From e9c1322dd6b1fb1d0ef4c0c37a934635e173f0ef Mon Sep 17 00:00:00 2001 From: skosito Date: Mon, 14 Oct 2024 12:38:40 +0200 Subject: [PATCH 01/16] backport uups changes --- v2/contracts/evm/ERC20Custody.sol | 36 +- v2/contracts/evm/ZetaConnectorBase.sol | 46 +- v2/contracts/evm/ZetaConnectorNative.sol | 12 +- v2/contracts/evm/ZetaConnectorNonNative.sol | 20 +- .../deterministic/DeployERC20Custody.s.sol | 44 +- .../deterministic/DeployGatewayEVM.s.sol | 2 +- .../DeployZetaConnectorNonNative.s.sol | 45 +- .../deterministic/UpgradeGatewayEVM.s.sol | 2 +- v2/test/ERC20Custody.t.sol | 60 ++- v2/test/GatewayEVM.t.sol | 57 ++- v2/test/GatewayEVMUpgrade.t.sol | 97 ----- v2/test/GatewayEVMZEVM.t.sol | 18 +- v2/test/GatewayZEVM.t.sol | 41 ++ v2/test/ZetaConnectorNative.t.sol | 37 +- v2/test/ZetaConnectorNonNative.t.sol | 38 +- v2/test/fuzz/ERC20CustodyEchidnaTest.sol | 76 ++-- v2/test/fuzz/GatewayEVMEchidnaTest.sol | 48 +-- .../upgrades/ERC20CustodyUpgradeTest.sol | 224 ++++++++++ .../{ => upgrades}/GatewayEVMUpgradeTest.sol | 42 +- .../utils/upgrades/GatewayZEVMUpgradeTest.sol | 405 ++++++++++++++++++ .../ZetaConnectorNativeUpgradeTest.sol | 112 +++++ .../ZetaConnectorNonNativeUpgradeTest.sol | 134 ++++++ 22 files changed, 1349 insertions(+), 247 deletions(-) delete mode 100644 v2/test/GatewayEVMUpgrade.t.sol create mode 100644 v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol rename v2/test/utils/{ => upgrades}/GatewayEVMUpgradeTest.sol (90%) create mode 100644 v2/test/utils/upgrades/GatewayZEVMUpgradeTest.sol create mode 100644 v2/test/utils/upgrades/ZetaConnectorNativeUpgradeTest.sol create mode 100644 v2/test/utils/upgrades/ZetaConnectorNonNativeUpgradeTest.sol diff --git a/v2/contracts/evm/ERC20Custody.sol b/v2/contracts/evm/ERC20Custody.sol index e1463b96e..670e4d007 100644 --- a/v2/contracts/evm/ERC20Custody.sol +++ b/v2/contracts/evm/ERC20Custody.sol @@ -6,20 +6,30 @@ import { IGatewayEVM } from "./interfaces/IGatewayEVM.sol"; import { RevertContext } from "../../contracts/Revert.sol"; -import "@openzeppelin/contracts/access/AccessControl.sol"; +import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; + +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import "@openzeppelin/contracts/utils/Pausable.sol"; -import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; /// @title ERC20Custody /// @notice Holds the ERC20 tokens deposited on ZetaChain and includes functionality to call a contract. /// @dev This contract does not call smart contracts directly, it passes through the Gateway contract. -contract ERC20Custody is IERC20Custody, ReentrancyGuard, AccessControl, Pausable { +contract ERC20Custody is + Initializable, + UUPSUpgradeable, + IERC20Custody, + ReentrancyGuardUpgradeable, + AccessControlUpgradeable, + PausableUpgradeable +{ using SafeERC20 for IERC20; /// @notice Gateway contract. - IGatewayEVM public immutable gateway; + IGatewayEVM public gateway; /// @notice Mapping of whitelisted tokens => true/false. mapping(address => bool) public whitelisted; /// @notice The address of the TSS (Threshold Signature Scheme) contract. @@ -33,12 +43,18 @@ contract ERC20Custody is IERC20Custody, ReentrancyGuard, AccessControl, Pausable /// @notice New role identifier for whitelister role. bytes32 public constant WHITELISTER_ROLE = keccak256("WHITELISTER_ROLE"); - /// @notice Constructor for ERC20Custody. + /// @notice Initializer for ERC20Custody. /// @dev Set admin as default admin and pauser, and tssAddress as tss role. - constructor(address gateway_, address tssAddress_, address admin_) { + function initialize(address gateway_, address tssAddress_, address admin_) public initializer { if (gateway_ == address(0) || tssAddress_ == address(0) || admin_ == address(0)) { revert ZeroAddress(); } + + __UUPSUpgradeable_init(); + __ReentrancyGuard_init(); + __AccessControl_init(); + __Pausable_init(); + gateway = IGatewayEVM(gateway_); tssAddress = tssAddress_; _grantRole(DEFAULT_ADMIN_ROLE, admin_); @@ -48,6 +64,10 @@ contract ERC20Custody is IERC20Custody, ReentrancyGuard, AccessControl, Pausable _grantRole(WHITELISTER_ROLE, tssAddress_); } + /// @dev Authorizes the upgrade of the contract, sender must be owner. + /// @param newImplementation Address of the new implementation. + function _authorizeUpgrade(address newImplementation) internal override onlyRole(DEFAULT_ADMIN_ROLE) { } + /// @notice Pause contract. function pause() external onlyRole(PAUSER_ROLE) { _pause(); @@ -197,4 +217,4 @@ contract ERC20Custody is IERC20Custody, ReentrancyGuard, AccessControl, Pausable // actual received amount. emit Deposited(recipient, asset, asset.balanceOf(address(this)) - oldBalance, message); } -} +} \ No newline at end of file diff --git a/v2/contracts/evm/ZetaConnectorBase.sol b/v2/contracts/evm/ZetaConnectorBase.sol index 5dc31c8b5..b2b4d4910 100644 --- a/v2/contracts/evm/ZetaConnectorBase.sol +++ b/v2/contracts/evm/ZetaConnectorBase.sol @@ -1,11 +1,13 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.26; -import "@openzeppelin/contracts/access/AccessControl.sol"; +import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import "@openzeppelin/contracts/utils/Pausable.sol"; -import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import { RevertContext } from "../../contracts/Revert.sol"; import { IGatewayEVM, IGatewayEVMErrors, IGatewayEVMEvents } from "../../contracts/evm/interfaces/IGatewayEVM.sol"; @@ -14,16 +16,23 @@ import "../../contracts/evm/interfaces/IZetaConnector.sol"; /// @title ZetaConnectorBase /// @notice Abstract base contract for ZetaConnector. /// @dev This contract implements basic functionality for handling tokens and interacting with the Gateway contract. -abstract contract ZetaConnectorBase is IZetaConnectorEvents, ReentrancyGuard, Pausable, AccessControl { +abstract contract ZetaConnectorBase is + Initializable, + UUPSUpgradeable, + IZetaConnectorEvents, + ReentrancyGuardUpgradeable, + PausableUpgradeable, + AccessControlUpgradeable +{ using SafeERC20 for IERC20; /// @notice Error indicating that a zero address was provided. error ZeroAddress(); /// @notice The Gateway contract used for executing cross-chain calls. - IGatewayEVM public immutable gateway; + IGatewayEVM public gateway; /// @notice The address of the Zeta token. - address public immutable zetaToken; + address public zetaToken; /// @notice The address of the TSS (Threshold Signature Scheme) contract. address public tssAddress; @@ -34,12 +43,27 @@ abstract contract ZetaConnectorBase is IZetaConnectorEvents, ReentrancyGuard, Pa /// @notice New role identifier for tss role. bytes32 public constant TSS_ROLE = keccak256("TSS_ROLE"); - /// @notice Constructor for ZetaConnectors. + /// @notice Initializer for ZetaConnectors. /// @dev Set admin as default admin and pauser, and tssAddress as tss role. - constructor(address gateway_, address zetaToken_, address tssAddress_, address admin_) { + function initialize( + address gateway_, + address zetaToken_, + address tssAddress_, + address admin_ + ) + public + virtual + initializer + { if (gateway_ == address(0) || zetaToken_ == address(0) || tssAddress_ == address(0) || admin_ == address(0)) { revert ZeroAddress(); } + + __UUPSUpgradeable_init(); + __ReentrancyGuard_init(); + __AccessControl_init(); + __Pausable_init(); + gateway = IGatewayEVM(gateway_); zetaToken = zetaToken_; tssAddress = tssAddress_; @@ -50,6 +74,10 @@ abstract contract ZetaConnectorBase is IZetaConnectorEvents, ReentrancyGuard, Pa _grantRole(PAUSER_ROLE, admin_); } + /// @dev Authorizes the upgrade of the contract, sender must be owner. + /// @param newImplementation Address of the new implementation. + function _authorizeUpgrade(address newImplementation) internal override onlyRole(DEFAULT_ADMIN_ROLE) { } + /// @notice Update tss address /// @param newTSSAddress new tss address function updateTSSAddress(address newTSSAddress) external onlyRole(DEFAULT_ADMIN_ROLE) { @@ -115,4 +143,4 @@ abstract contract ZetaConnectorBase is IZetaConnectorEvents, ReentrancyGuard, Pa /// @notice Handle received tokens. /// @param amount The amount of tokens received. function receiveTokens(uint256 amount) external virtual; -} +} \ No newline at end of file diff --git a/v2/contracts/evm/ZetaConnectorNative.sol b/v2/contracts/evm/ZetaConnectorNative.sol index a1d3e760b..957c3bb26 100644 --- a/v2/contracts/evm/ZetaConnectorNative.sol +++ b/v2/contracts/evm/ZetaConnectorNative.sol @@ -11,14 +11,18 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; contract ZetaConnectorNative is ZetaConnectorBase { using SafeERC20 for IERC20; - constructor( + function initialize( address gateway_, address zetaToken_, address tssAddress_, address admin_ ) - ZetaConnectorBase(gateway_, zetaToken_, tssAddress_, admin_) - { } + public + override + initializer + { + super.initialize(gateway_, zetaToken_, tssAddress_, admin_); + } /// @notice Withdraw tokens to a specified address. /// @param to The address to withdraw tokens to. @@ -101,4 +105,4 @@ contract ZetaConnectorNative is ZetaConnectorBase { function receiveTokens(uint256 amount) external override whenNotPaused { IERC20(zetaToken).safeTransferFrom(msg.sender, address(this), amount); } -} +} \ No newline at end of file diff --git a/v2/contracts/evm/ZetaConnectorNonNative.sol b/v2/contracts/evm/ZetaConnectorNonNative.sol index 1cf6db600..33c4ae5a9 100644 --- a/v2/contracts/evm/ZetaConnectorNonNative.sol +++ b/v2/contracts/evm/ZetaConnectorNonNative.sol @@ -8,23 +8,29 @@ import "./interfaces/IZetaNonEthNew.sol"; /// @notice Implementation of ZetaConnectorBase for non-native token handling. /// @dev This contract mints and burns Zeta tokens and interacts with the Gateway contract. contract ZetaConnectorNonNative is ZetaConnectorBase { - /// @notice Max supply for minting. - uint256 public maxSupply = type(uint256).max; - /// @notice Event triggered when max supply is updated. /// @param maxSupply New max supply. event MaxSupplyUpdated(uint256 maxSupply); error ExceedsMaxSupply(); - constructor( + /// @notice Max supply for minting. + uint256 public maxSupply; + + function initialize( address gateway_, address zetaToken_, address tssAddress_, address admin_ ) - ZetaConnectorBase(gateway_, zetaToken_, tssAddress_, admin_) - { } + public + override + initializer + { + super.initialize(gateway_, zetaToken_, tssAddress_, admin_); + + maxSupply = type(uint256).max; + } /// @notice Set max supply for minting. /// @param maxSupply_ New max supply. @@ -121,4 +127,4 @@ contract ZetaConnectorNonNative is ZetaConnectorBase { if (amount + IERC20(zetaToken).totalSupply() > maxSupply) revert ExceedsMaxSupply(); IZetaNonEthNew(zetaToken).mint(address(to), amount, internalSendHash); } -} +} \ No newline at end of file diff --git a/v2/scripts/deploy/deterministic/DeployERC20Custody.s.sol b/v2/scripts/deploy/deterministic/DeployERC20Custody.s.sol index bb8e933b5..f90cb404e 100644 --- a/v2/scripts/deploy/deterministic/DeployERC20Custody.s.sol +++ b/v2/scripts/deploy/deterministic/DeployERC20Custody.s.sol @@ -2,7 +2,8 @@ pragma solidity 0.8.26; import "forge-std/Script.sol"; -import "src/evm/ERC20Custody.sol"; +import "contracts/evm/ERC20Custody.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; contract DeployERC20Custody is Script { function run() external { @@ -10,19 +11,46 @@ contract DeployERC20Custody is Script { address admin = vm.envAddress("ERC20_CUSTODY_ADMIN_ADDRESS_EVM"); address gateway = vm.envAddress("GATEWAY_PROXY_EVM"); - bytes32 salt = keccak256("ERC20Custody"); + address expectedImplAddress; + address expectedProxyAddress; + + bytes32 implSalt = keccak256("ERC20Custody"); + bytes32 proxySalt = keccak256("ERC20CustodyProxy"); vm.startBroadcast(); - ERC20Custody custody = new ERC20Custody{salt: salt}(gateway, tss, admin); - require(address(custody) != address(0), "deployment failed"); + expectedImplAddress = vm.computeCreate2Address( + implSalt, + hashInitCode(type(ERC20Custody).creationCode) + ); + + ERC20Custody erc20CustodyImpl = new ERC20Custody{salt: implSalt}(); + require(address(erc20CustodyImpl) != address(0), "erc20CustodyImpl deployment failed"); + + require(expectedImplAddress == address(erc20CustodyImpl), "impl address doesn't match expected address"); - address expectedAddr = vm.computeCreate2Address( - salt, - hashInitCode(type(ERC20Custody).creationCode, abi.encode(gateway, tss, admin)) + expectedProxyAddress = vm.computeCreate2Address( + proxySalt, + hashInitCode( + type(ERC1967Proxy).creationCode, + abi.encode( + address(erc20CustodyImpl), + abi.encodeWithSelector(ERC20Custody.initialize.selector, gateway, tss, admin) + ) + ) ); - require(expectedAddr == address(custody), "erc20 custody address doesn't match expected address"); + ERC1967Proxy erc20CustodyProxy = new ERC1967Proxy{salt: proxySalt}( + address(erc20CustodyImpl), + abi.encodeWithSelector(ERC20Custody.initialize.selector, gateway, tss, admin) + ); + require(address(erc20CustodyProxy) != address(0), "erc20CustodyProxy deployment failed"); + + require(expectedProxyAddress == address(erc20CustodyProxy), "proxy address doesn't match expected address"); + + ERC20Custody erc20Custody = ERC20Custody(address(erc20CustodyProxy)); + require(erc20Custody.tssAddress() == tss, "tss not set"); + require(address(erc20Custody.gateway()) == gateway, "gateway not set"); vm.stopBroadcast(); } diff --git a/v2/scripts/deploy/deterministic/DeployGatewayEVM.s.sol b/v2/scripts/deploy/deterministic/DeployGatewayEVM.s.sol index effa25c9a..fe9e90d47 100644 --- a/v2/scripts/deploy/deterministic/DeployGatewayEVM.s.sol +++ b/v2/scripts/deploy/deterministic/DeployGatewayEVM.s.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.26; import "forge-std/Script.sol"; -import "src/evm/GatewayEVM.sol"; +import "contracts/evm/GatewayEVM.sol"; import "test/utils/TestERC20.sol"; import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; diff --git a/v2/scripts/deploy/deterministic/DeployZetaConnectorNonNative.s.sol b/v2/scripts/deploy/deterministic/DeployZetaConnectorNonNative.s.sol index c1f1c6d22..88bf79851 100644 --- a/v2/scripts/deploy/deterministic/DeployZetaConnectorNonNative.s.sol +++ b/v2/scripts/deploy/deterministic/DeployZetaConnectorNonNative.s.sol @@ -2,7 +2,8 @@ pragma solidity 0.8.26; import "forge-std/Script.sol"; -import "src/evm/ZetaConnectorNonNative.sol"; +import "contracts/evm/ZetaConnectorNonNative.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; contract DeployZetaConnectorNonNative is Script { function run() external { @@ -11,19 +12,47 @@ contract DeployZetaConnectorNonNative is Script { address gateway = vm.envAddress("GATEWAY_PROXY_EVM"); address zeta = vm.envAddress("ZETA_ERC20_EVM"); - bytes32 salt = keccak256("ZetaConnectorNonNative"); + address expectedImplAddress; + address expectedProxyAddress; + + bytes32 implSalt = keccak256("ZetaConnectorNonNative"); + bytes32 proxySalt = keccak256("ZetaConnectorNonNativeProxy"); vm.startBroadcast(); - ZetaConnectorNonNative connector = new ZetaConnectorNonNative{salt: salt}(gateway, zeta, tss, admin); - require(address(connector) != address(0), "deployment failed"); + expectedImplAddress = vm.computeCreate2Address( + implSalt, + hashInitCode(type(ZetaConnectorNonNative).creationCode) + ); + + ZetaConnectorNonNative connectorImpl = new ZetaConnectorNonNative{salt: implSalt}(); + require(address(connectorImpl) != address(0), "connectorImpl deployment failed"); + + require(expectedImplAddress == address(connectorImpl), "impl address doesn't match expected address"); - address expectedAddr = vm.computeCreate2Address( - salt, - hashInitCode(type(ZetaConnectorNonNative).creationCode, abi.encode(gateway, zeta, tss, admin)) + expectedProxyAddress = vm.computeCreate2Address( + proxySalt, + hashInitCode( + type(ERC1967Proxy).creationCode, + abi.encode( + address(connectorImpl), + abi.encodeWithSelector(ZetaConnectorNonNative.initialize.selector, gateway, zeta, tss, admin) + ) + ) ); - require(expectedAddr == address(connector), "zeta connector non native address doesn't match expected address"); + ERC1967Proxy connectorProxy = new ERC1967Proxy{salt: proxySalt}( + address(connectorImpl), + abi.encodeWithSelector(ZetaConnectorNonNative.initialize.selector, gateway, zeta, tss, admin) + ); + require(address(connectorProxy) != address(0), "connectorProxy deployment failed"); + + require(expectedProxyAddress == address(connectorProxy), "proxy address doesn't match expected address"); + + ZetaConnectorNonNative connector = ZetaConnectorNonNative(address(connectorProxy)); + require(connector.tssAddress() == tss, "tss not set"); + require(address(connector.gateway()) == gateway, "gateway not set"); + require(address(connector.zetaToken()) == zeta, "zeta not set"); vm.stopBroadcast(); } diff --git a/v2/scripts/deploy/deterministic/UpgradeGatewayEVM.s.sol b/v2/scripts/deploy/deterministic/UpgradeGatewayEVM.s.sol index ed2b84c8d..39e030219 100644 --- a/v2/scripts/deploy/deterministic/UpgradeGatewayEVM.s.sol +++ b/v2/scripts/deploy/deterministic/UpgradeGatewayEVM.s.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.26; import "forge-std/Script.sol"; -import "src/evm/GatewayEVM.sol"; +import "contracts/evm/GatewayEVM.sol"; import "test/utils/GatewayEVMUpgradeTest.sol"; import "test/utils/TestERC20.sol"; import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; diff --git a/v2/test/ERC20Custody.t.sol b/v2/test/ERC20Custody.t.sol index 40c63445a..774a956a0 100644 --- a/v2/test/ERC20Custody.t.sol +++ b/v2/test/ERC20Custody.t.sol @@ -12,6 +12,7 @@ import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import { Upgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; +import "./utils/upgrades/ERC20CustodyUpgradeTest.sol"; import "../contracts/evm/ERC20Custody.sol"; import "../contracts/evm/GatewayEVM.sol"; @@ -23,7 +24,6 @@ import "./utils/IReceiverEVM.sol"; contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents, IERC20CustodyEvents { using SafeERC20 for IERC20; - address proxy; GatewayEVM gateway; ReceiverEVM receiver; ERC20Custody custody; @@ -40,6 +40,8 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); error LegacyMethodsNotSupported(); + event WithdrawnV2(address indexed to, address indexed token, uint256 amount); + bytes32 public constant TSS_ROLE = keccak256("TSS_ROLE"); bytes32 public constant WITHDRAWER_ROLE = keccak256("WITHDRAWER_ROLE"); bytes32 public constant ASSET_HANDLER_ROLE = keccak256("ASSET_HANDLER_ROLE"); @@ -55,12 +57,19 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv token = new TestERC20("test", "TTK"); zeta = new TestERC20("zeta", "ZETA"); - proxy = Upgrades.deployUUPSProxy( + address proxy = Upgrades.deployUUPSProxy( "GatewayEVM.sol", abi.encodeCall(GatewayEVM.initialize, (tssAddress, address(zeta), owner)) ); gateway = GatewayEVM(proxy); - custody = new ERC20Custody(address(gateway), tssAddress, owner); - zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zeta), tssAddress, owner); + proxy = Upgrades.deployUUPSProxy( + "ERC20Custody.sol", abi.encodeCall(ERC20Custody.initialize, (address(gateway), tssAddress, owner)) + ); + custody = ERC20Custody(proxy); + proxy = Upgrades.deployUUPSProxy( + "ZetaConnectorNonNative.sol", + abi.encodeCall(ZetaConnectorNonNative.initialize, (address(gateway), address(zeta), tssAddress, owner)) + ); + zetaConnector = ZetaConnectorNonNative(proxy); receiver = new ReceiverEVM(); vm.deal(tssAddress, 1 ether); @@ -177,19 +186,6 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv assertEq(false, whitelisted); } - function testNewCustodyFailsIfAddressesAreZero() public { - vm.expectRevert(ZeroAddress.selector); - ERC20Custody newCustody = new ERC20Custody(address(0), tssAddress, owner); - - vm.expectRevert(ZeroAddress.selector); - newCustody = new ERC20Custody(address(gateway), address(0), owner); - - vm.expectRevert(ZeroAddress.selector); - newCustody = new ERC20Custody(address(gateway), tssAddress, address(0)); - - newCustody = new ERC20Custody(address(gateway), tssAddress, owner); - } - function testForwardCallToReceiveERC20ThroughCustody() public { uint256 amount = 100_000; bytes memory data = @@ -559,4 +555,34 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.expectRevert(NotWhitelisted.selector); custody.deposit(abi.encodePacked(destination), token, 1000, message); } + + function testUpgradeAndWithdraw() public { + // upgrade + Upgrades.upgradeProxy(address(custody), "ERC20CustodyUpgradeTest.sol", "", owner); + ERC20CustodyUpgradeTest custodyV2 = ERC20CustodyUpgradeTest(address(custody)); + // withdraw + uint256 amount = 100_000; + uint256 balanceBefore = token.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeCustody = token.balanceOf(address(custodyV2)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(destination), amount); + vm.expectCall(address(token), 0, transferData); + vm.expectEmit(true, true, true, true, address(custodyV2)); + emit WithdrawnV2(destination, address(token), amount); + vm.prank(tssAddress); + custodyV2.withdraw(destination, address(token), amount); + + // Verify that the tokens were transferred to the destination address + uint256 balanceAfter = token.balanceOf(destination); + assertEq(balanceAfter, amount); + + // Verify that the tokens were substracted from custody + uint256 balanceAfterCustody = token.balanceOf(address(custodyV2)); + assertEq(balanceAfterCustody, balanceBeforeCustody - amount); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = token.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } } diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index 2bf0ef5da..4fd1680ce 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -7,6 +7,7 @@ import "forge-std/Vm.sol"; import "./utils/ReceiverEVM.sol"; import "./utils/TestERC20.sol"; +import "./utils/upgrades/GatewayEVMUpgradeTest.sol"; import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; @@ -24,7 +25,6 @@ import "./utils/Zeta.non-eth.sol"; contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents, IERC20CustodyEvents { using SafeERC20 for IERC20; - address proxy; GatewayEVM gateway; ReceiverEVM receiver; ERC20Custody custody; @@ -40,6 +40,8 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver error EnforcedPause(); error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); + event ExecutedV2(address indexed destination, uint256 value, bytes data); + bytes32 public constant TSS_ROLE = keccak256("TSS_ROLE"); bytes32 public constant WITHDRAWER_ROLE = keccak256("WITHDRAWER_ROLE"); bytes32 public constant ASSET_HANDLER_ROLE = keccak256("ASSET_HANDLER_ROLE"); @@ -54,12 +56,19 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver token = new TestERC20("test", "TTK"); zeta = new ZetaNonEth(tssAddress, tssAddress); - proxy = Upgrades.deployUUPSProxy( + address proxy = Upgrades.deployUUPSProxy( "GatewayEVM.sol", abi.encodeCall(GatewayEVM.initialize, (tssAddress, address(zeta), owner)) ); gateway = GatewayEVM(proxy); - custody = new ERC20Custody(address(gateway), tssAddress, owner); - zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zeta), tssAddress, owner); + proxy = Upgrades.deployUUPSProxy( + "ERC20Custody.sol", abi.encodeCall(ERC20Custody.initialize, (address(gateway), tssAddress, owner)) + ); + custody = ERC20Custody(proxy); + proxy = Upgrades.deployUUPSProxy( + "ZetaConnectorNonNative.sol", + abi.encodeCall(ZetaConnectorNonNative.initialize, (address(gateway), address(zeta), tssAddress, owner)) + ); + zetaConnector = ZetaConnectorNonNative(proxy); vm.prank(tssAddress); zeta.updateTssAndConnectorAddresses(tssAddress, address(zetaConnector)); receiver = new ReceiverEVM(); @@ -318,12 +327,37 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.expectRevert(ZeroAddress.selector); gateway.executeRevert{ value: value }(address(0), data, revertContext); } + + function testUpgradeAndForwardCallToReceivePayable() public { + // upgrade + Upgrades.upgradeProxy(address(gateway), "GatewayEVMUpgradeTest.sol", "", owner); + GatewayEVMUpgradeTest gatewayUpgradeTest = GatewayEVMUpgradeTest(address(gateway)); + // call + address custodyBeforeUpgrade = gateway.custody(); + address tssBeforeUpgrade = gateway.tssAddress(); + + string memory str = "Hello, Foundry!"; + uint256 num = 42; + bool flag = true; + uint256 value = 1 ether; + + bytes memory data = abi.encodeWithSignature("receivePayable(string,uint256,bool)", str, num, flag); + vm.expectCall(address(receiver), value, data); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedPayable(address(gateway), value, str, num, flag); + vm.expectEmit(true, true, true, true, address(gateway)); + emit ExecutedV2(address(receiver), value, data); + vm.prank(tssAddress); + gatewayUpgradeTest.execute{ value: value }(address(receiver), data); + + assertEq(custodyBeforeUpgrade, gateway.custody()); + assertEq(tssBeforeUpgrade, gateway.tssAddress()); + } } contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents { using SafeERC20 for IERC20; - address proxy; GatewayEVM gateway; ERC20Custody custody; ZetaConnectorNonNative zetaConnector; @@ -344,12 +378,19 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR token = new TestERC20("test", "TTK"); zeta = new ZetaNonEth(tssAddress, tssAddress); - proxy = Upgrades.deployUUPSProxy( + address proxy = Upgrades.deployUUPSProxy( "GatewayEVM.sol", abi.encodeCall(GatewayEVM.initialize, (tssAddress, address(zeta), owner)) ); gateway = GatewayEVM(proxy); - custody = new ERC20Custody(address(gateway), tssAddress, owner); - zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zeta), tssAddress, owner); + proxy = Upgrades.deployUUPSProxy( + "ERC20Custody.sol", abi.encodeCall(ERC20Custody.initialize, (address(gateway), tssAddress, owner)) + ); + custody = ERC20Custody(proxy); + proxy = Upgrades.deployUUPSProxy( + "ZetaConnectorNonNative.sol", + abi.encodeCall(ZetaConnectorBase.initialize, (address(gateway), address(zeta), tssAddress, owner)) + ); + zetaConnector = ZetaConnectorNonNative(proxy); vm.prank(tssAddress); zeta.updateTssAndConnectorAddresses(tssAddress, address(zetaConnector)); vm.deal(tssAddress, 1 ether); diff --git a/v2/test/GatewayEVMUpgrade.t.sol b/v2/test/GatewayEVMUpgrade.t.sol deleted file mode 100644 index a2a66dd8f..000000000 --- a/v2/test/GatewayEVMUpgrade.t.sol +++ /dev/null @@ -1,97 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; - -import "forge-std/Test.sol"; -import "forge-std/Vm.sol"; - -import "./utils/GatewayEVMUpgradeTest.sol"; - -import "./utils/IReceiverEVM.sol"; -import "./utils/ReceiverEVM.sol"; -import "./utils/TestERC20.sol"; -import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; - -import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import { Upgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; - -import "./utils/IReceiverEVM.sol"; - -import "../contracts/evm/ERC20Custody.sol"; -import "../contracts/evm/GatewayEVM.sol"; -import "../contracts/evm/ZetaConnectorNonNative.sol"; -import "../contracts/evm/interfaces/IGatewayEVM.sol"; - -contract GatewayEVMUUPSUpgradeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents { - using SafeERC20 for IERC20; - - event ExecutedV2(address indexed destination, uint256 value, bytes data); - - address proxy; - GatewayEVM gateway; - ReceiverEVM receiver; - ERC20Custody custody; - ZetaConnectorNonNative zetaConnector; - TestERC20 token; - TestERC20 zeta; - address owner; - address destination; - address tssAddress; - - function setUp() public { - owner = address(this); - destination = address(0x1234); - tssAddress = address(0x5678); - - token = new TestERC20("test", "TTK"); - zeta = new TestERC20("zeta", "ZETA"); - - proxy = Upgrades.deployUUPSProxy( - "GatewayEVM.sol", abi.encodeCall(GatewayEVM.initialize, (tssAddress, address(zeta), owner)) - ); - gateway = GatewayEVM(proxy); - - custody = new ERC20Custody(address(gateway), tssAddress, owner); - zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zeta), tssAddress, owner); - receiver = new ReceiverEVM(); - - vm.deal(tssAddress, 1 ether); - - vm.startPrank(owner); - gateway.setCustody(address(custody)); - gateway.setConnector(address(zetaConnector)); - vm.stopPrank(); - - token.mint(owner, 1_000_000); - token.transfer(address(custody), 500_000); - - vm.deal(tssAddress, 1 ether); - } - - function testUpgradeAndForwardCallToReceivePayable() public { - address custodyBeforeUpgrade = gateway.custody(); - address tssBeforeUpgrade = gateway.tssAddress(); - - string memory str = "Hello, Foundry!"; - uint256 num = 42; - bool flag = true; - uint256 value = 1 ether; - - Upgrades.upgradeProxy(proxy, "GatewayEVMUpgradeTest.sol", "", owner); - - bytes memory data = abi.encodeWithSignature("receivePayable(string,uint256,bool)", str, num, flag); - GatewayEVMUpgradeTest gatewayUpgradeTest = GatewayEVMUpgradeTest(proxy); - - vm.expectCall(address(receiver), value, data); - vm.expectEmit(true, true, true, true, address(receiver)); - emit ReceivedPayable(address(gateway), value, str, num, flag); - vm.expectEmit(true, true, true, true, address(gateway)); - emit ExecutedV2(address(receiver), value, data); - vm.prank(tssAddress); - gatewayUpgradeTest.execute{ value: value }(address(receiver), data); - - assertEq(custodyBeforeUpgrade, gateway.custody()); - assertEq(tssBeforeUpgrade, gateway.tssAddress()); - } -} diff --git a/v2/test/GatewayEVMZEVM.t.sol b/v2/test/GatewayEVMZEVM.t.sol index a81ab8e3e..d7be92c51 100644 --- a/v2/test/GatewayEVMZEVM.t.sol +++ b/v2/test/GatewayEVMZEVM.t.sol @@ -42,7 +42,6 @@ contract GatewayEVMZEVMTest is // evm using SafeERC20 for IERC20; - address proxyEVM; GatewayEVM gatewayEVM; ERC20Custody custody; ZetaConnectorNonNative zetaConnector; @@ -73,12 +72,21 @@ contract GatewayEVMZEVMTest is token = new TestERC20("test", "TTK"); zeta = new TestERC20("zeta", "ZETA"); - proxyEVM = Upgrades.deployUUPSProxy( + address proxy = Upgrades.deployUUPSProxy( "GatewayEVM.sol", abi.encodeCall(GatewayEVM.initialize, (tssAddress, address(zeta), ownerEVM)) ); - gatewayEVM = GatewayEVM(proxyEVM); - custody = new ERC20Custody(address(gatewayEVM), tssAddress, ownerEVM); - zetaConnector = new ZetaConnectorNonNative(address(gatewayEVM), address(zeta), tssAddress, ownerEVM); + gatewayEVM = GatewayEVM(proxy); + proxy = Upgrades.deployUUPSProxy( + "ERC20Custody.sol", abi.encodeCall(ERC20Custody.initialize, (address(gatewayEVM), tssAddress, ownerEVM)) + ); + custody = ERC20Custody(proxy); + proxy = Upgrades.deployUUPSProxy( + "ZetaConnectorNonNative.sol", + abi.encodeCall( + ZetaConnectorNonNative.initialize, (address(gatewayEVM), address(zeta), tssAddress, ownerEVM) + ) + ); + zetaConnector = ZetaConnectorNonNative(proxy); vm.deal(tssAddress, 1 ether); diff --git a/v2/test/GatewayZEVM.t.sol b/v2/test/GatewayZEVM.t.sol index ea2ada45a..29a113fed 100644 --- a/v2/test/GatewayZEVM.t.sol +++ b/v2/test/GatewayZEVM.t.sol @@ -9,6 +9,7 @@ import "./utils/SystemContract.sol"; import "./utils/TestUniversalContract.sol"; import "./utils/WZETA.sol"; +import "./utils/upgrades/GatewayZEVMUpgradeTest.sol"; import "../contracts/zevm/GatewayZEVM.sol"; import "../contracts/zevm/ZRC20.sol"; @@ -31,6 +32,19 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors error ZeroAddress(); error LowBalance(); + event WithdrawnV2( + address indexed sender, + uint256 indexed chainId, + bytes receiver, + address zrc20, + uint256 value, + uint256 gasfee, + uint256 protocolFlatFee, + bytes message, + uint256 gasLimit, + RevertOptions revertOptions + ); + function setUp() public { owner = address(this); addr1 = address(0x1234); @@ -371,6 +385,33 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors emit Called(owner, address(zrc20), abi.encodePacked(addr1), message, 1, revertOptions); gateway.call(abi.encodePacked(addr1), address(zrc20), message, 1, revertOptions); } + + function testUpgradeAndWithdrawZRC20() public { + // upgrade + Upgrades.upgradeProxy(proxy, "GatewayZEVMUpgradeTest.sol", "", owner); + GatewayZEVMUpgradeTest gatewayUpgradeTest = GatewayZEVMUpgradeTest(proxy); + // withdraw + uint256 amount = 1; + uint256 ownerBalanceBefore = zrc20.balanceOf(owner); + + vm.expectEmit(true, true, true, true, address(gatewayUpgradeTest)); + emit WithdrawnV2( + owner, + 0, + abi.encodePacked(addr1), + address(zrc20), + amount, + 0, + zrc20.PROTOCOL_FLAT_FEE(), + "", + 0, + revertOptions + ); + gatewayUpgradeTest.withdraw(abi.encodePacked(addr1), amount, address(zrc20), revertOptions); + + uint256 ownerBalanceAfter = zrc20.balanceOf(owner); + assertEq(ownerBalanceBefore - amount, ownerBalanceAfter); + } } contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors { diff --git a/v2/test/ZetaConnectorNative.t.sol b/v2/test/ZetaConnectorNative.t.sol index dbe83cc15..4f158fd49 100644 --- a/v2/test/ZetaConnectorNative.t.sol +++ b/v2/test/ZetaConnectorNative.t.sol @@ -7,6 +7,7 @@ import "forge-std/Vm.sol"; import "./utils/ReceiverEVM.sol"; import "./utils/TestERC20.sol"; +import "./utils/upgrades/ZetaConnectorNativeUpgradeTest.sol"; import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; @@ -30,7 +31,6 @@ contract ZetaConnectorNativeTest is { using SafeERC20 for IERC20; - address proxy; GatewayEVM gateway; ReceiverEVM receiver; ERC20Custody custody; @@ -44,6 +44,8 @@ contract ZetaConnectorNativeTest is error EnforcedPause(); error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); + event WithdrawnV2(address indexed to, uint256 amount); + bytes32 public constant WITHDRAWER_ROLE = keccak256("WITHDRAWER_ROLE"); bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); bytes32 public constant TSS_ROLE = keccak256("TSS_ROLE"); @@ -56,12 +58,19 @@ contract ZetaConnectorNativeTest is zetaToken = new TestERC20("zeta", "ZETA"); - proxy = Upgrades.deployUUPSProxy( + address proxy = Upgrades.deployUUPSProxy( "GatewayEVM.sol", abi.encodeCall(GatewayEVM.initialize, (tssAddress, address(zetaToken), owner)) ); gateway = GatewayEVM(proxy); - custody = new ERC20Custody(address(gateway), tssAddress, owner); - zetaConnector = new ZetaConnectorNative(address(gateway), address(zetaToken), tssAddress, owner); + proxy = Upgrades.deployUUPSProxy( + "ERC20Custody.sol", abi.encodeCall(ERC20Custody.initialize, (address(gateway), tssAddress, owner)) + ); + custody = ERC20Custody(proxy); + proxy = Upgrades.deployUUPSProxy( + "ZetaConnectorNative.sol", + abi.encodeCall(ZetaConnectorNative.initialize, (address(gateway), address(zetaToken), tssAddress, owner)) + ); + zetaConnector = ZetaConnectorNative(proxy); receiver = new ReceiverEVM(); @@ -344,4 +353,24 @@ contract ZetaConnectorNativeTest is vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, WITHDRAWER_ROLE)); zetaConnector.withdrawAndRevert(address(receiver), amount, data, internalSendHash, revertContext); } + + function testUpgradeAndWithdraw() public { + // upgrade + Upgrades.upgradeProxy(address(zetaConnector), "ZetaConnectorNativeUpgradeTest.sol", "", owner); + ZetaConnectorNativeUpgradeTest zetaConnectorV2 = ZetaConnectorNativeUpgradeTest(address(zetaConnector)); + // withdraw + uint256 amount = 100_000; + bytes32 internalSendHash = ""; + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + + bytes memory data = abi.encodeWithSignature("transfer(address,uint256)", destination, amount); + vm.expectCall(address(zetaToken), 0, data); + vm.expectEmit(true, true, true, true, address(zetaConnectorV2)); + emit WithdrawnV2(destination, amount); + vm.prank(tssAddress); + zetaConnectorV2.withdraw(destination, amount, internalSendHash); + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, amount); + } } diff --git a/v2/test/ZetaConnectorNonNative.t.sol b/v2/test/ZetaConnectorNonNative.t.sol index 250cd69aa..cd1973f52 100644 --- a/v2/test/ZetaConnectorNonNative.t.sol +++ b/v2/test/ZetaConnectorNonNative.t.sol @@ -7,6 +7,7 @@ import "forge-std/Vm.sol"; import "./utils/ReceiverEVM.sol"; import "./utils/TestERC20.sol"; +import "./utils/upgrades/ZetaConnectorNonNativeUpgradeTest.sol"; import "../contracts/evm/ERC20Custody.sol"; import "../contracts/evm/GatewayEVM.sol"; @@ -30,7 +31,6 @@ contract ZetaConnectorNonNativeTest is { using SafeERC20 for IERC20; - address proxy; GatewayEVM gateway; ReceiverEVM receiver; ERC20Custody custody; @@ -45,6 +45,8 @@ contract ZetaConnectorNonNativeTest is error ExceedsMaxSupply(); error EnforcedPause(); + event WithdrawnV2(address indexed to, uint256 amount); + bytes32 public constant WITHDRAWER_ROLE = keccak256("WITHDRAWER_ROLE"); bytes32 public constant TSS_ROLE = keccak256("TSS_ROLE"); bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); @@ -56,13 +58,20 @@ contract ZetaConnectorNonNativeTest is zetaToken = new ZetaNonEth(tssAddress, tssAddress); - proxy = Upgrades.deployUUPSProxy( + address proxy = Upgrades.deployUUPSProxy( "GatewayEVM.sol", abi.encodeCall(GatewayEVM.initialize, (tssAddress, address(zetaToken), owner)) ); gateway = GatewayEVM(proxy); - custody = new ERC20Custody(address(gateway), tssAddress, owner); - zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zetaToken), tssAddress, owner); + proxy = Upgrades.deployUUPSProxy( + "ERC20Custody.sol", abi.encodeCall(ERC20Custody.initialize, (address(gateway), tssAddress, owner)) + ); + custody = ERC20Custody(proxy); + proxy = Upgrades.deployUUPSProxy( + "ZetaConnectorNonNative.sol", + abi.encodeCall(ZetaConnectorNonNative.initialize, (address(gateway), address(zetaToken), tssAddress, owner)) + ); + zetaConnector = ZetaConnectorNonNative(proxy); vm.prank(tssAddress); zetaToken.updateTssAndConnectorAddresses(tssAddress, address(zetaConnector)); @@ -351,4 +360,25 @@ contract ZetaConnectorNonNativeTest is vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, TSS_ROLE)); zetaConnector.setMaxSupply(10_000); } + + function testUpgradeAndWithdraw() public { + // upgrade + Upgrades.upgradeProxy(address(zetaConnector), "ZetaConnectorNonNativeUpgradeTest.sol", "", owner); + ZetaConnectorNonNativeUpgradeTest zetaConnectorV2 = ZetaConnectorNonNativeUpgradeTest(address(zetaConnector)); + // withdraw + uint256 amount = 100_000; + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + bytes32 internalSendHash = ""; + + bytes memory data = + abi.encodeWithSignature("mint(address,uint256,bytes32)", destination, amount, internalSendHash); + vm.expectCall(address(zetaToken), 0, data); + vm.expectEmit(true, true, true, true, address(zetaConnectorV2)); + emit WithdrawnV2(destination, amount); + vm.prank(tssAddress); + zetaConnectorV2.withdraw(destination, amount, internalSendHash); + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, amount); + } } diff --git a/v2/test/fuzz/ERC20CustodyEchidnaTest.sol b/v2/test/fuzz/ERC20CustodyEchidnaTest.sol index a59beacb9..06773a131 100644 --- a/v2/test/fuzz/ERC20CustodyEchidnaTest.sol +++ b/v2/test/fuzz/ERC20CustodyEchidnaTest.sol @@ -1,38 +1,38 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; - -import "../../contracts/evm/ERC20Custody.sol"; -import "../../contracts/evm/GatewayEVM.sol"; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import { Upgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; -import "test/utils/TestERC20.sol"; - -contract ERC20CustodyEchidnaTest is ERC20Custody { - using SafeERC20 for IERC20; - - TestERC20 public testERC20; - address public echidnaCaller = msg.sender; - - address proxy = Upgrades.deployUUPSProxy( - "GatewayEVM.sol", abi.encodeCall(GatewayEVM.initialize, (echidnaCaller, address(0x123), address(0x123))) - ); - GatewayEVM testGateway = GatewayEVM(proxy); - - constructor() ERC20Custody(address(testGateway), echidnaCaller, echidnaCaller) { - testERC20 = new TestERC20("test", "TEST"); - testGateway.setCustody(address(this)); - } - - function testWithdrawAndCall(address to, uint256 amount, bytes calldata data) public { - // mint more than amount - testERC20.mint(address(this), amount + 5); - // transfer overhead to gateway - testERC20.transfer(address(testGateway), 5); - - withdrawAndCall(address(testERC20), to, amount, data); - - // Assertion to ensure no ERC20 tokens are left in the gateway contract after execution - assert(testERC20.balanceOf(address(gateway)) == 0); - } -} +// // SPDX-License-Identifier: MIT +// pragma solidity 0.8.26; + +// import "../../contracts/evm/ERC20Custody.sol"; +// import "../../contracts/evm/GatewayEVM.sol"; +// import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +// import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +// import { Upgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; +// import "test/utils/TestERC20.sol"; + +// contract ERC20CustodyEchidnaTest is ERC20Custody { +// using SafeERC20 for IERC20; + +// TestERC20 public testERC20; +// address public echidnaCaller = msg.sender; + +// address proxy = Upgrades.deployUUPSProxy( +// "GatewayEVM.sol", abi.encodeCall(GatewayEVM.initialize, (echidnaCaller, address(0x123), address(0x123))) +// ); +// GatewayEVM testGateway = GatewayEVM(proxy); + +// constructor() ERC20Custody(address(testGateway), echidnaCaller, echidnaCaller) { +// testERC20 = new TestERC20("test", "TEST"); +// testGateway.setCustody(address(this)); +// } + +// function testWithdrawAndCall(address to, uint256 amount, bytes calldata data) public { +// // mint more than amount +// testERC20.mint(address(this), amount + 5); +// // transfer overhead to gateway +// testERC20.transfer(address(testGateway), 5); + +// withdrawAndCall(address(testERC20), to, amount, data); + +// // Assertion to ensure no ERC20 tokens are left in the gateway contract after execution +// assert(testERC20.balanceOf(address(gateway)) == 0); +// } +// } diff --git a/v2/test/fuzz/GatewayEVMEchidnaTest.sol b/v2/test/fuzz/GatewayEVMEchidnaTest.sol index 84fe308dd..8dc07eb7a 100644 --- a/v2/test/fuzz/GatewayEVMEchidnaTest.sol +++ b/v2/test/fuzz/GatewayEVMEchidnaTest.sol @@ -1,31 +1,31 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +// // SPDX-License-Identifier: MIT +// pragma solidity 0.8.26; -import "../../contracts/evm/ERC20Custody.sol"; -import "../../contracts/evm/GatewayEVM.sol"; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import "test/utils/TestERC20.sol"; +// import "../../contracts/evm/ERC20Custody.sol"; +// import "../../contracts/evm/GatewayEVM.sol"; +// import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +// import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +// import "test/utils/TestERC20.sol"; -contract GatewayEVMEchidnaTest is GatewayEVM { - using SafeERC20 for IERC20; +// contract GatewayEVMEchidnaTest is GatewayEVM { +// using SafeERC20 for IERC20; - TestERC20 public testERC20; - address public echidnaCaller = msg.sender; +// TestERC20 public testERC20; +// address public echidnaCaller = msg.sender; - constructor() { - tssAddress = echidnaCaller; - zetaConnector = address(0x123); - testERC20 = new TestERC20("test", "TEST"); - custody = address(new ERC20Custody(address(this), tssAddress, address(this))); - } +// constructor() { +// tssAddress = echidnaCaller; +// zetaConnector = address(0x123); +// testERC20 = new TestERC20("test", "TEST"); +// custody = address(new ERC20Custody(address(this), tssAddress, address(this))); +// } - function testExecuteWithERC20(address to, uint256 amount, bytes calldata data) public { - testERC20.mint(address(this), amount); +// function testExecuteWithERC20(address to, uint256 amount, bytes calldata data) public { +// testERC20.mint(address(this), amount); - executeWithERC20(address(testERC20), to, amount, data); +// executeWithERC20(address(testERC20), to, amount, data); - // Assertion to ensure no ERC20 tokens are left in the contract after execution - assert(testERC20.balanceOf(address(this)) == 0); - } -} +// // Assertion to ensure no ERC20 tokens are left in the contract after execution +// assert(testERC20.balanceOf(address(this)) == 0); +// } +// } diff --git a/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol b/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol new file mode 100644 index 000000000..2c67a6246 --- /dev/null +++ b/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol @@ -0,0 +1,224 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import { IERC20Custody } from "../../../contracts/evm/interfaces/IERC20Custody.sol"; +import { IGatewayEVM } from "../../../contracts/evm/interfaces/IGatewayEVM.sol"; + +import { RevertContext } from "../../../contracts/Revert.sol"; + +import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; + +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +/// @title ERC20CustodyUpgradeTest +/// @notice Modified ERC20Custody contract for testing upgrades +/// @dev The only difference is in event naming +/// @custom:oz-upgrades-from ERC20Custody +contract ERC20CustodyUpgradeTest is + Initializable, + UUPSUpgradeable, + IERC20Custody, + ReentrancyGuardUpgradeable, + AccessControlUpgradeable, + PausableUpgradeable +{ + using SafeERC20 for IERC20; + + /// @notice Gateway contract. + IGatewayEVM public gateway; + /// @notice Mapping of whitelisted tokens => true/false. + mapping(address => bool) public whitelisted; + /// @notice The address of the TSS (Threshold Signature Scheme) contract. + address public tssAddress; + /// @notice Used to flag if contract supports legacy methods (eg. deposit). + bool public supportsLegacy; + /// @notice New role identifier for pauser role. + bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); + /// @notice New role identifier for withdrawer role. + bytes32 public constant WITHDRAWER_ROLE = keccak256("WITHDRAWER_ROLE"); + /// @notice New role identifier for whitelister role. + bytes32 public constant WHITELISTER_ROLE = keccak256("WHITELISTER_ROLE"); + + /// @dev Modified event for testing upgrade. + event WithdrawnV2(address indexed to, address indexed token, uint256 amount); + + /// @notice Initializer for ERC20Custody. + /// @dev Set admin as default admin and pauser, and tssAddress as tss role. + function initialize(address gateway_, address tssAddress_, address admin_) public initializer { + if (gateway_ == address(0) || tssAddress_ == address(0) || admin_ == address(0)) { + revert ZeroAddress(); + } + + __UUPSUpgradeable_init(); + __ReentrancyGuard_init(); + __AccessControl_init(); + __Pausable_init(); + + gateway = IGatewayEVM(gateway_); + tssAddress = tssAddress_; + _grantRole(DEFAULT_ADMIN_ROLE, admin_); + _grantRole(PAUSER_ROLE, admin_); + _grantRole(WITHDRAWER_ROLE, tssAddress_); + _grantRole(WHITELISTER_ROLE, admin_); + _grantRole(WHITELISTER_ROLE, tssAddress_); + } + + /// @dev Authorizes the upgrade of the contract, sender must be owner. + /// @param newImplementation Address of the new implementation. + function _authorizeUpgrade(address newImplementation) internal override onlyRole(DEFAULT_ADMIN_ROLE) { } + + /// @notice Pause contract. + function pause() external onlyRole(PAUSER_ROLE) { + _pause(); + } + + /// @notice Unpause contract. + function unpause() external onlyRole(PAUSER_ROLE) { + _unpause(); + } + + /// @notice Update tss address + /// @param newTSSAddress new tss address + function updateTSSAddress(address newTSSAddress) external onlyRole(DEFAULT_ADMIN_ROLE) { + if (newTSSAddress == address(0)) revert ZeroAddress(); + + _revokeRole(WITHDRAWER_ROLE, tssAddress); + _revokeRole(WHITELISTER_ROLE, tssAddress); + + _grantRole(WITHDRAWER_ROLE, newTSSAddress); + _grantRole(WHITELISTER_ROLE, newTSSAddress); + + tssAddress = newTSSAddress; + + emit UpdatedCustodyTSSAddress(newTSSAddress); + } + + /// @notice Unpause contract. + function setSupportsLegacy(bool _supportsLegacy) external onlyRole(DEFAULT_ADMIN_ROLE) { + supportsLegacy = _supportsLegacy; + } + + /// @notice Whitelist ERC20 token. + /// @param token address of ERC20 token + function whitelist(address token) external onlyRole(WHITELISTER_ROLE) { + if (token == address(0)) revert ZeroAddress(); + whitelisted[token] = true; + emit Whitelisted(token); + } + + /// @notice Unwhitelist ERC20 token. + /// @param token address of ERC20 token + function unwhitelist(address token) external onlyRole(WHITELISTER_ROLE) { + if (token == address(0)) revert ZeroAddress(); + whitelisted[token] = false; + emit Unwhitelisted(token); + } + + /// @notice Withdraw directly transfers the tokens to the destination address without contract call. + /// @dev This function can only be called by the TSS address. + /// @param to Destination address for the tokens. + /// @param token Address of the ERC20 token. + /// @param amount Amount of tokens to withdraw. + function withdraw( + address to, + address token, + uint256 amount + ) + external + nonReentrant + onlyRole(WITHDRAWER_ROLE) + whenNotPaused + { + if (!whitelisted[token]) revert NotWhitelisted(); + + IERC20(token).safeTransfer(to, amount); + + emit WithdrawnV2(to, token, amount); + } + + /// @notice WithdrawAndCall transfers tokens to Gateway and call a contract through the Gateway. + /// @dev This function can only be called by the TSS address. + /// @param to Address of the contract to call. + /// @param token Address of the ERC20 token. + /// @param amount Amount of tokens to withdraw. + /// @param data Calldata to pass to the contract call. + function withdrawAndCall( + address to, + address token, + uint256 amount, + bytes calldata data + ) + public + nonReentrant + onlyRole(WITHDRAWER_ROLE) + whenNotPaused + { + if (!whitelisted[token]) revert NotWhitelisted(); + + // Transfer the tokens to the Gateway contract + IERC20(token).safeTransfer(address(gateway), amount); + + // Forward the call to the Gateway contract + gateway.executeWithERC20(token, to, amount, data); + + emit WithdrawnAndCalled(to, token, amount, data); + } + + /// @notice WithdrawAndRevert transfers tokens to Gateway and call a contract with a revert functionality through + /// the Gateway. + /// @dev This function can only be called by the TSS address. + /// @param to Address of the contract to call. + /// @param token Address of the ERC20 token. + /// @param amount Amount of tokens to withdraw. + /// @param data Calldata to pass to the contract call. + /// @param revertContext Revert context to pass to onRevert. + function withdrawAndRevert( + address to, + address token, + uint256 amount, + bytes calldata data, + RevertContext calldata revertContext + ) + public + nonReentrant + onlyRole(WITHDRAWER_ROLE) + whenNotPaused + { + if (!whitelisted[token]) revert NotWhitelisted(); + + // Transfer the tokens to the Gateway contract + IERC20(token).safeTransfer(address(gateway), amount); + + // Forward the call to the Gateway contract + gateway.revertWithERC20(token, to, amount, data, revertContext); + + emit WithdrawnAndReverted(to, token, amount, data, revertContext); + } + + /// @notice Deposits asset to custody and pay fee in zeta erc20. + /// @custom:deprecated This method is deprecated. + function deposit( + bytes calldata recipient, + IERC20 asset, + uint256 amount, + bytes calldata message + ) + external + nonReentrant + whenNotPaused + { + if (!supportsLegacy) revert LegacyMethodsNotSupported(); + if (!whitelisted[address(asset)]) revert NotWhitelisted(); + uint256 oldBalance = asset.balanceOf(address(this)); + asset.safeTransferFrom(msg.sender, address(this), amount); + // In case if there is a fee on a token transfer, we might not receive a full expected amount + // and we need to correctly process that, we subtract an old balance from a new balance, which should be an + // actual received amount. + emit Deposited(recipient, asset, asset.balanceOf(address(this)) - oldBalance, message); + } +} \ No newline at end of file diff --git a/v2/test/utils/GatewayEVMUpgradeTest.sol b/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol similarity index 90% rename from v2/test/utils/GatewayEVMUpgradeTest.sol rename to v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol index 83a9b8f57..c06feb646 100644 --- a/v2/test/utils/GatewayEVMUpgradeTest.sol +++ b/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.26; -import { RevertContext, RevertOptions, Revertable } from "../../contracts/Revert.sol"; -import "../../contracts/evm/ZetaConnectorBase.sol"; -import "../../contracts/evm/interfaces/IERC20Custody.sol"; -import "../../contracts/evm/interfaces/IGatewayEVM.sol"; +import { RevertContext, RevertOptions, Revertable } from "../../../contracts/Revert.sol"; +import { ZetaConnectorBase } from "../../../contracts/evm/ZetaConnectorBase.sol"; +import { IERC20Custody } from "../../../contracts/evm/interfaces/IERC20Custody.sol"; +import { IGatewayEVM } from "../../../contracts/evm/interfaces/IGatewayEVM.sol"; import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; @@ -46,6 +46,8 @@ contract GatewayEVMUpgradeTest is bytes32 public constant ASSET_HANDLER_ROLE = keccak256("ASSET_HANDLER_ROLE"); /// @notice New role identifier for pauser role. bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); + /// @notice Max size of payload + revertOptions revert message. + uint256 public constant MAX_PAYLOAD_SIZE = 1024; /// @custom:oz-upgrades-unsafe-allow constructor constructor() { @@ -80,12 +82,26 @@ contract GatewayEVMUpgradeTest is /// @param data Calldata to pass to the call. /// @return The result of the call. function _execute(address destination, bytes calldata data) internal returns (bytes memory) { + revertIfCallingOnRevert(data); (bool success, bytes memory result) = destination.call{ value: msg.value }(data); if (!success) revert ExecutionFailed(); return result; } + /// @notice Update tss address + /// @param newTSSAddress new tss address + function updateTSSAddress(address newTSSAddress) external onlyRole(DEFAULT_ADMIN_ROLE) { + if (newTSSAddress == address(0)) revert ZeroAddress(); + + _revokeRole(TSS_ROLE, tssAddress); + _grantRole(TSS_ROLE, newTSSAddress); + + tssAddress = newTSSAddress; + + emit UpdatedGatewayTSSAddress(newTSSAddress); + } + /// @notice Pause contract. function pause() external onlyRole(PAUSER_ROLE) { _pause(); @@ -270,6 +286,7 @@ contract GatewayEVMUpgradeTest is { if (msg.value == 0) revert InsufficientETHAmount(); if (receiver == address(0)) revert ZeroAddress(); + if (payload.length + revertOptions.revertMessage.length >= MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); (bool deposited,) = tssAddress.call{ value: msg.value }(""); @@ -297,6 +314,7 @@ contract GatewayEVMUpgradeTest is { if (amount == 0) revert InsufficientERC20Amount(); if (receiver == address(0)) revert ZeroAddress(); + if (payload.length + revertOptions.revertMessage.length >= MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); transferFromToAssetHandler(msg.sender, asset, amount); @@ -317,6 +335,8 @@ contract GatewayEVMUpgradeTest is nonReentrant { if (receiver == address(0)) revert ZeroAddress(); + if (payload.length + revertOptions.revertMessage.length >= MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); + emit Called(msg.sender, receiver, payload, revertOptions); } @@ -389,4 +409,18 @@ contract GatewayEVMUpgradeTest is IERC20(token).safeTransfer(custody, amount); } } + + // @dev prevent spoofing onRevert functions + function revertIfCallingOnRevert(bytes calldata data) private pure { + if (data.length >= 4) { + bytes4 functionSelector; + assembly { + functionSelector := calldataload(data.offset) + } + + if (functionSelector == Revertable.onRevert.selector) { + revert NotAllowedToCallOnRevert(); + } + } + } } diff --git a/v2/test/utils/upgrades/GatewayZEVMUpgradeTest.sol b/v2/test/utils/upgrades/GatewayZEVMUpgradeTest.sol new file mode 100644 index 000000000..44e7580bd --- /dev/null +++ b/v2/test/utils/upgrades/GatewayZEVMUpgradeTest.sol @@ -0,0 +1,405 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import { IGatewayZEVM } from "../../../contracts/zevm/interfaces/IGatewayZEVM.sol"; + +import { RevertContext, RevertOptions } from "../../../contracts/Revert.sol"; +import "../../../contracts/zevm/interfaces/IWZETA.sol"; +import { IZRC20 } from "../../../contracts/zevm/interfaces/IZRC20.sol"; +import { UniversalContract, zContext } from "../../../contracts/zevm/interfaces/UniversalContract.sol"; +import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; + +import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; + +/// @title GatewayZEVMUpgradeTest +/// @notice Modified GatewayZEVM contract for testing upgrades +/// @dev The only difference is in event naming +/// @custom:oz-upgrades-from GatewayZEVM +contract GatewayZEVMUpgradeTest is + IGatewayZEVM, + Initializable, + AccessControlUpgradeable, + UUPSUpgradeable, + ReentrancyGuardUpgradeable, + PausableUpgradeable +{ + /// @notice Error indicating a zero address was provided. + error ZeroAddress(); + + /// @notice The constant address of the Fungible module. + address public constant FUNGIBLE_MODULE_ADDRESS = 0x735b14BB79463307AAcBED86DAf3322B1e6226aB; + /// @notice The address of the Zeta token. + address public zetaToken; + + /// @notice New role identifier for pauser role. + bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); + + /// @notice Max size of message + revertOptions revert message. + uint256 public constant MAX_MESSAGE_SIZE = 1024; + + /// @dev Modified event for testing upgrade. + event WithdrawnV2( + address indexed sender, + uint256 indexed chainId, + bytes receiver, + address zrc20, + uint256 value, + uint256 gasfee, + uint256 protocolFlatFee, + bytes message, + uint256 gasLimit, + RevertOptions revertOptions + ); + + /// @dev Only Fungible module address allowed modifier. + modifier onlyFungible() { + if (msg.sender != FUNGIBLE_MODULE_ADDRESS) { + revert CallerIsNotFungibleModule(); + } + _; + } + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + + /// @notice Initialize with address of zeta token and admin account set as DEFAULT_ADMIN_ROLE. + /// @dev Using admin to authorize upgrades and pause. + function initialize(address zetaToken_, address admin_) public initializer { + if (zetaToken_ == address(0) || admin_ == address(0)) { + revert ZeroAddress(); + } + __UUPSUpgradeable_init(); + __AccessControl_init(); + __Pausable_init(); + __ReentrancyGuard_init(); + + _grantRole(DEFAULT_ADMIN_ROLE, admin_); + _grantRole(PAUSER_ROLE, admin_); + zetaToken = zetaToken_; + } + + /// @dev Authorizes the upgrade of the contract. + /// @param newImplementation The address of the new implementation. + function _authorizeUpgrade(address newImplementation) internal override onlyRole(DEFAULT_ADMIN_ROLE) { } + + /// @dev Receive function to receive ZETA from WETH9.withdraw(). + receive() external payable whenNotPaused { + if (msg.sender != zetaToken && msg.sender != FUNGIBLE_MODULE_ADDRESS) revert OnlyWZETAOrFungible(); + } + + /// @notice Pause contract. + function pause() external onlyRole(PAUSER_ROLE) { + _pause(); + } + + /// @notice Unpause contract. + function unpause() external onlyRole(PAUSER_ROLE) { + _unpause(); + } + + /// @dev Internal function to withdraw ZRC20 tokens. + /// @param amount The amount of tokens to withdraw. + /// @param zrc20 The address of the ZRC20 token. + /// @return The gas fee for the withdrawal. + function _withdrawZRC20(uint256 amount, address zrc20) internal returns (uint256) { + // Use gas limit from zrc20 + return _withdrawZRC20WithGasLimit(amount, zrc20, IZRC20(zrc20).GAS_LIMIT()); + } + + /// @dev Internal function to withdraw ZRC20 tokens with gas limit. + /// @param amount The amount of tokens to withdraw. + /// @param zrc20 The address of the ZRC20 token. + /// @param gasLimit Gas limit. + /// @return The gas fee for the withdrawal. + function _withdrawZRC20WithGasLimit(uint256 amount, address zrc20, uint256 gasLimit) internal returns (uint256) { + (address gasZRC20, uint256 gasFee) = IZRC20(zrc20).withdrawGasFeeWithGasLimit(gasLimit); + if (!IZRC20(gasZRC20).transferFrom(msg.sender, FUNGIBLE_MODULE_ADDRESS, gasFee)) { + revert GasFeeTransferFailed(); + } + + if (!IZRC20(zrc20).transferFrom(msg.sender, address(this), amount)) { + revert ZRC20TransferFailed(); + } + + if (!IZRC20(zrc20).burn(amount)) revert ZRC20BurnFailed(); + + return gasFee; + } + + /// @dev Internal function to transfer ZETA tokens. + /// @param amount The amount of tokens to transfer. + /// @param to The address to transfer the tokens to. + function _transferZETA(uint256 amount, address to) internal { + if (!IWETH9(zetaToken).transferFrom(msg.sender, address(this), amount)) revert FailedZetaSent(); + IWETH9(zetaToken).withdraw(amount); + (bool sent,) = to.call{ value: amount }(""); + if (!sent) revert FailedZetaSent(); + } + + /// @notice Withdraw ZRC20 tokens to an external chain. + /// @param receiver The receiver address on the external chain. + /// @param amount The amount of tokens to withdraw. + /// @param zrc20 The address of the ZRC20 token. + /// @param revertOptions Revert options. + function withdraw( + bytes memory receiver, + uint256 amount, + address zrc20, + RevertOptions calldata revertOptions + ) + external + nonReentrant + whenNotPaused + { + if (receiver.length == 0) revert ZeroAddress(); + if (amount == 0) revert InsufficientZRC20Amount(); + + uint256 gasFee = _withdrawZRC20(amount, zrc20); + emit WithdrawnV2( + msg.sender, + 0, + receiver, + zrc20, + amount, + gasFee, + IZRC20(zrc20).PROTOCOL_FLAT_FEE(), + "", + IZRC20(zrc20).GAS_LIMIT(), + revertOptions + ); + } + + /// @notice Withdraw ZRC20 tokens and call a smart contract on an external chain. + /// @param receiver The receiver address on the external chain. + /// @param amount The amount of tokens to withdraw. + /// @param zrc20 The address of the ZRC20 token. + /// @param message The calldata to pass to the contract call. + /// @param gasLimit Gas limit. + /// @param revertOptions Revert options. + function withdrawAndCall( + bytes memory receiver, + uint256 amount, + address zrc20, + bytes calldata message, + uint256 gasLimit, + RevertOptions calldata revertOptions + ) + external + nonReentrant + whenNotPaused + { + if (receiver.length == 0) revert ZeroAddress(); + if (amount == 0) revert InsufficientZRC20Amount(); + if (gasLimit == 0) revert InsufficientGasLimit(); + if (message.length + revertOptions.revertMessage.length >= MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); + + uint256 gasFee = _withdrawZRC20WithGasLimit(amount, zrc20, gasLimit); + emit Withdrawn( + msg.sender, + 0, + receiver, + zrc20, + amount, + gasFee, + IZRC20(zrc20).PROTOCOL_FLAT_FEE(), + message, + gasLimit, + revertOptions + ); + } + + /// @notice Withdraw ZETA tokens to an external chain. + /// @param receiver The receiver address on the external chain. + /// @param amount The amount of tokens to withdraw. + /// @param revertOptions Revert options. + function withdraw( + bytes memory receiver, + uint256 amount, + uint256 chainId, + RevertOptions calldata revertOptions + ) + external + nonReentrant + whenNotPaused + { + if (receiver.length == 0) revert ZeroAddress(); + if (amount == 0) revert InsufficientZetaAmount(); + + _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); + emit Withdrawn(msg.sender, chainId, receiver, address(zetaToken), amount, 0, 0, "", 0, revertOptions); + } + + /// @notice Withdraw ZETA tokens and call a smart contract on an external chain. + /// @param receiver The receiver address on the external chain. + /// @param amount The amount of tokens to withdraw. + /// @param chainId Chain id of the external chain. + /// @param message The calldata to pass to the contract call. + /// @param revertOptions Revert options. + function withdrawAndCall( + bytes memory receiver, + uint256 amount, + uint256 chainId, + bytes calldata message, + RevertOptions calldata revertOptions + ) + external + nonReentrant + whenNotPaused + { + if (receiver.length == 0) revert ZeroAddress(); + if (amount == 0) revert InsufficientZetaAmount(); + if (message.length + revertOptions.revertMessage.length >= MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); + + _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); + emit Withdrawn(msg.sender, chainId, receiver, address(zetaToken), amount, 0, 0, message, 0, revertOptions); + } + + /// @notice Call a smart contract on an external chain without asset transfer. + /// @param receiver The receiver address on the external chain. + /// @param zrc20 Address of zrc20 to pay fees. + /// @param message The calldata to pass to the contract call. + /// @param gasLimit Gas limit. + /// @param revertOptions Revert options. + function call( + bytes memory receiver, + address zrc20, + bytes calldata message, + uint256 gasLimit, + RevertOptions calldata revertOptions + ) + external + nonReentrant + whenNotPaused + { + if (receiver.length == 0) revert ZeroAddress(); + if (gasLimit == 0) revert InsufficientGasLimit(); + if (message.length + revertOptions.revertMessage.length >= MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); + + (address gasZRC20, uint256 gasFee) = IZRC20(zrc20).withdrawGasFeeWithGasLimit(gasLimit); + if (!IZRC20(gasZRC20).transferFrom(msg.sender, FUNGIBLE_MODULE_ADDRESS, gasFee)) { + revert GasFeeTransferFailed(); + } + + emit Called(msg.sender, zrc20, receiver, message, gasLimit, revertOptions); + } + + /// @notice Deposit foreign coins into ZRC20. + /// @param zrc20 The address of the ZRC20 token. + /// @param amount The amount of tokens to deposit. + /// @param target The target address to receive the deposited tokens. + function deposit(address zrc20, uint256 amount, address target) external onlyFungible whenNotPaused { + if (zrc20 == address(0) || target == address(0)) revert ZeroAddress(); + if (amount == 0) revert InsufficientZRC20Amount(); + + if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); + + if (!IZRC20(zrc20).deposit(target, amount)) revert ZRC20DepositFailed(); + } + + /// @notice Execute a user-specified contract on ZEVM. + /// @param context The context of the cross-chain call. + /// @param zrc20 The address of the ZRC20 token. + /// @param amount The amount of tokens to transfer. + /// @param target The target contract to call. + /// @param message The calldata to pass to the contract call. + function execute( + zContext calldata context, + address zrc20, + uint256 amount, + address target, + bytes calldata message + ) + external + onlyFungible + whenNotPaused + { + if (zrc20 == address(0) || target == address(0)) revert ZeroAddress(); + + UniversalContract(target).onCrossChainCall(context, zrc20, amount, message); + } + + /// @notice Deposit foreign coins into ZRC20 and call a user-specified contract on ZEVM. + /// @param context The context of the cross-chain call. + /// @param zrc20 The address of the ZRC20 token. + /// @param amount The amount of tokens to transfer. + /// @param target The target contract to call. + /// @param message The calldata to pass to the contract call. + function depositAndCall( + zContext calldata context, + address zrc20, + uint256 amount, + address target, + bytes calldata message + ) + external + onlyFungible + whenNotPaused + { + if (zrc20 == address(0) || target == address(0)) revert ZeroAddress(); + if (amount == 0) revert InsufficientZRC20Amount(); + if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); + + if (!IZRC20(zrc20).deposit(target, amount)) revert ZRC20DepositFailed(); + UniversalContract(target).onCrossChainCall(context, zrc20, amount, message); + } + + /// @notice Deposit ZETA and call a user-specified contract on ZEVM. + /// @param context The context of the cross-chain call. + /// @param amount The amount of tokens to transfer. + /// @param target The target contract to call. + /// @param message The calldata to pass to the contract call. + function depositAndCall( + zContext calldata context, + uint256 amount, + address target, + bytes calldata message + ) + external + onlyFungible + whenNotPaused + { + if (target == address(0)) revert ZeroAddress(); + if (amount == 0) revert InsufficientZetaAmount(); + if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); + + _transferZETA(amount, target); + UniversalContract(target).onCrossChainCall(context, zetaToken, amount, message); + } + + /// @notice Revert a user-specified contract on ZEVM. + /// @param target The target contract to call. + /// @param revertContext Revert context to pass to onRevert. + function executeRevert(address target, RevertContext calldata revertContext) external onlyFungible whenNotPaused { + if (target == address(0)) revert ZeroAddress(); + + UniversalContract(target).onRevert(revertContext); + } + + /// @notice Deposit foreign coins into ZRC20 and revert a user-specified contract on ZEVM. + /// @param zrc20 The address of the ZRC20 token. + /// @param amount The amount of tokens to revert. + /// @param target The target contract to call. + /// @param revertContext Revert context to pass to onRevert. + function depositAndRevert( + address zrc20, + uint256 amount, + address target, + RevertContext calldata revertContext + ) + external + onlyFungible + whenNotPaused + { + if (zrc20 == address(0) || target == address(0)) revert ZeroAddress(); + if (amount == 0) revert InsufficientZRC20Amount(); + if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); + + if (!IZRC20(zrc20).deposit(target, amount)) revert ZRC20DepositFailed(); + UniversalContract(target).onRevert(revertContext); + } +} diff --git a/v2/test/utils/upgrades/ZetaConnectorNativeUpgradeTest.sol b/v2/test/utils/upgrades/ZetaConnectorNativeUpgradeTest.sol new file mode 100644 index 000000000..f99aa973b --- /dev/null +++ b/v2/test/utils/upgrades/ZetaConnectorNativeUpgradeTest.sol @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "../../../contracts/evm/ZetaConnectorBase.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +/// @title ZetaConnectorNativeUpgradeTest +/// @notice Modified ZetaConnectorNative contract for testing upgrades +/// @dev The only difference is in event naming +/// @custom:oz-upgrades-from ZetaConnectorNative +contract ZetaConnectorNativeUpgradeTest is ZetaConnectorBase { + using SafeERC20 for IERC20; + + /// @dev Modified event for testing upgrade. + event WithdrawnV2(address indexed to, uint256 amount); + + function initialize( + address gateway_, + address zetaToken_, + address tssAddress_, + address admin_ + ) + public + override + initializer + { + super.initialize(gateway_, zetaToken_, tssAddress_, admin_); + } + + /// @notice Withdraw tokens to a specified address. + /// @param to The address to withdraw tokens to. + /// @param amount The amount of tokens to withdraw. + /// @param internalSendHash A hash used for internal tracking of the transaction. + /// @dev This function can only be called by the TSS address. + function withdraw( + address to, + uint256 amount, + bytes32 internalSendHash + ) + external + override + nonReentrant + onlyRole(WITHDRAWER_ROLE) + whenNotPaused + { + IERC20(zetaToken).safeTransfer(to, amount); + emit WithdrawnV2(to, amount); + } + + /// @notice Withdraw tokens and call a contract through Gateway. + /// @param to The address to withdraw tokens to. + /// @param amount The amount of tokens to withdraw. + /// @param data The calldata to pass to the contract call. + /// @param internalSendHash A hash used for internal tracking of the transaction. + /// @dev This function can only be called by the TSS address. + function withdrawAndCall( + address to, + uint256 amount, + bytes calldata data, + bytes32 internalSendHash + ) + external + override + nonReentrant + onlyRole(WITHDRAWER_ROLE) + whenNotPaused + { + // Transfer zetaToken to the Gateway contract + IERC20(zetaToken).safeTransfer(address(gateway), amount); + + // Forward the call to the Gateway contract + gateway.executeWithERC20(address(zetaToken), to, amount, data); + + emit WithdrawnAndCalled(to, amount, data); + } + + /// @notice Withdraw tokens and call a contract with a revert callback through Gateway. + /// @param to The address to withdraw tokens to. + /// @param amount The amount of tokens to withdraw. + /// @param data The calldata to pass to the contract call. + /// @param internalSendHash A hash used for internal tracking of the transaction. + /// @dev This function can only be called by the TSS address. + /// @param revertContext Revert context to pass to onRevert. + function withdrawAndRevert( + address to, + uint256 amount, + bytes calldata data, + bytes32 internalSendHash, + RevertContext calldata revertContext + ) + external + override + nonReentrant + onlyRole(WITHDRAWER_ROLE) + whenNotPaused + { + // Transfer zetaToken to the Gateway contract + IERC20(zetaToken).safeTransfer(address(gateway), amount); + + // Forward the call to the Gateway contract + gateway.revertWithERC20(address(zetaToken), to, amount, data, revertContext); + + emit WithdrawnAndReverted(to, amount, data, revertContext); + } + + /// @notice Handle received tokens. + /// @param amount The amount of tokens received. + function receiveTokens(uint256 amount) external override whenNotPaused { + IERC20(zetaToken).safeTransferFrom(msg.sender, address(this), amount); + } +} \ No newline at end of file diff --git a/v2/test/utils/upgrades/ZetaConnectorNonNativeUpgradeTest.sol b/v2/test/utils/upgrades/ZetaConnectorNonNativeUpgradeTest.sol new file mode 100644 index 000000000..550494428 --- /dev/null +++ b/v2/test/utils/upgrades/ZetaConnectorNonNativeUpgradeTest.sol @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "../../../contracts/evm/ZetaConnectorBase.sol"; +import "../../../contracts/evm/interfaces/IZetaNonEthNew.sol"; + +/// @title ZetaConnectorNonNativeUpgradeTest +/// @notice Modified ZetaConnectorNonNative contract for testing upgrades +/// @dev The only difference is in event naming +/// @custom:oz-upgrades-from ZetaConnectorNonNative +contract ZetaConnectorNonNativeUpgradeTest is ZetaConnectorBase { + /// @notice Event triggered when max supply is updated. + /// @param maxSupply New max supply. + event MaxSupplyUpdated(uint256 maxSupply); + + error ExceedsMaxSupply(); + + /// @notice Max supply for minting. + uint256 public maxSupply; + + /// @dev Modified event for testing upgrade. + event WithdrawnV2(address indexed to, uint256 amount); + + function initialize( + address gateway_, + address zetaToken_, + address tssAddress_, + address admin_ + ) + public + override + initializer + { + super.initialize(gateway_, zetaToken_, tssAddress_, admin_); + + maxSupply = type(uint256).max; + } + + /// @notice Set max supply for minting. + /// @param maxSupply_ New max supply. + /// @dev This function can only be called by the TSS address. + function setMaxSupply(uint256 maxSupply_) external onlyRole(TSS_ROLE) whenNotPaused { + maxSupply = maxSupply_; + emit MaxSupplyUpdated(maxSupply_); + } + + /// @notice Withdraw tokens to a specified address. + /// @param to The address to withdraw tokens to. + /// @param amount The amount of tokens to withdraw. + /// @param internalSendHash A hash used for internal tracking of the transaction. + /// @dev This function can only be called by the TSS address. + function withdraw( + address to, + uint256 amount, + bytes32 internalSendHash + ) + external + override + nonReentrant + onlyRole(WITHDRAWER_ROLE) + whenNotPaused + { + _mintTo(to, amount, internalSendHash); + emit WithdrawnV2(to, amount); + } + + /// @notice Withdraw tokens and call a contract through Gateway. + /// @param to The address to withdraw tokens to. + /// @param amount The amount of tokens to withdraw. + /// @param data The calldata to pass to the contract call. + /// @param internalSendHash A hash used for internal tracking of the transaction. + /// @dev This function can only be called by the TSS address, and mints if supply is not reached. + function withdrawAndCall( + address to, + uint256 amount, + bytes calldata data, + bytes32 internalSendHash + ) + external + override + nonReentrant + onlyRole(WITHDRAWER_ROLE) + whenNotPaused + { + // Mint zetaToken to the Gateway contract + _mintTo(address(gateway), amount, internalSendHash); + + // Forward the call to the Gateway contract + gateway.executeWithERC20(address(zetaToken), to, amount, data); + + emit WithdrawnAndCalled(to, amount, data); + } + + /// @notice Withdraw tokens and call a contract with a revert callback through Gateway. + /// @param to The address to withdraw tokens to. + /// @param amount The amount of tokens to withdraw. + /// @param data The calldata to pass to the contract call. + /// @param internalSendHash A hash used for internal tracking of the transaction. + /// @dev This function can only be called by the TSS address, and mints if supply is not reached. + /// @param revertContext Revert context to pass to onRevert. + function withdrawAndRevert( + address to, + uint256 amount, + bytes calldata data, + bytes32 internalSendHash, + RevertContext calldata revertContext + ) + external + override + nonReentrant + onlyRole(WITHDRAWER_ROLE) + whenNotPaused + { + // Mint zetaToken to the Gateway contract + _mintTo(address(gateway), amount, internalSendHash); + + // Forward the call to the Gateway contract + gateway.revertWithERC20(address(zetaToken), to, amount, data, revertContext); + + emit WithdrawnAndReverted(to, amount, data, revertContext); + } + + /// @notice Handle received tokens and burn them. + /// @param amount The amount of tokens received. + function receiveTokens(uint256 amount) external override whenNotPaused { + IZetaNonEthNew(zetaToken).burnFrom(msg.sender, amount); + } + + /// @dev mints to provided account and checks if totalSupply will be exceeded + function _mintTo(address to, uint256 amount, bytes32 internalSendHash) internal { + if (amount + IERC20(zetaToken).totalSupply() > maxSupply) revert ExceedsMaxSupply(); + IZetaNonEthNew(zetaToken).mint(address(to), amount, internalSendHash); + } +} \ No newline at end of file From 544a104315218be8f988acc7fd907218cf529a03 Mon Sep 17 00:00:00 2001 From: skosito Date: Mon, 14 Oct 2024 12:40:10 +0200 Subject: [PATCH 02/16] revert revertcontext change --- v2/contracts/Revert.sol | 2 +- v2/test/GatewayEVM.t.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/v2/contracts/Revert.sol b/v2/contracts/Revert.sol index 3d0d48363..7675f0cfa 100644 --- a/v2/contracts/Revert.sol +++ b/v2/contracts/Revert.sol @@ -21,7 +21,7 @@ struct RevertOptions { /// @param revertMessage Arbitrary data sent back in onRevert. struct RevertContext { address asset; - uint256 amount; + uint64 amount; bytes revertMessage; } diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index 4fd1680ce..515dd130c 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -226,7 +226,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver } function testForwardCallToReceiveOnRevertFails() public { - bytes memory data = abi.encodeWithSignature("onRevert((address,uint256,bytes))"); + bytes memory data = abi.encodeWithSignature("onRevert((address,uint64,bytes))"); vm.prank(tssAddress); vm.expectRevert(NotAllowedToCallOnRevert.selector); From 59f480b05d631644263e005479915780baf12313 Mon Sep 17 00:00:00 2001 From: skosito Date: Mon, 14 Oct 2024 13:08:53 +0200 Subject: [PATCH 03/16] revert on non supported methods --- v2/contracts/Revert.sol | 5 + v2/contracts/evm/GatewayEVM.sol | 10 +- v2/contracts/zevm/GatewayZEVM.sol | 13 +- v2/test/GatewayEVM.t.sol | 2 +- v2/test/GatewayEVMZEVM.t.sol | 2 +- v2/test/GatewayZEVM.t.sol | 338 +++++++++++++++--------------- v2/test/utils/SenderZEVM.sol | 4 +- 7 files changed, 197 insertions(+), 177 deletions(-) diff --git a/v2/contracts/Revert.sol b/v2/contracts/Revert.sol index 7675f0cfa..8f7517225 100644 --- a/v2/contracts/Revert.sol +++ b/v2/contracts/Revert.sol @@ -32,3 +32,8 @@ interface Revertable { /// @param revertContext Revert context to pass to onRevert. function onRevert(RevertContext calldata revertContext) external; } + +interface INotSupportedMethods { + error CallOnRevertNotSupported(); + error ZETANotSupported(); +} \ No newline at end of file diff --git a/v2/contracts/evm/GatewayEVM.sol b/v2/contracts/evm/GatewayEVM.sol index bed6a39ed..e8bd0aee7 100644 --- a/v2/contracts/evm/GatewayEVM.sol +++ b/v2/contracts/evm/GatewayEVM.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.26; -import { RevertContext, RevertOptions, Revertable } from "../../contracts/Revert.sol"; +import { RevertContext, RevertOptions, Revertable, INotSupportedMethods } from "../../contracts/Revert.sol"; import { ZetaConnectorBase } from "./ZetaConnectorBase.sol"; import { IERC20Custody } from "./interfaces/IERC20Custody.sol"; import { IGatewayEVM } from "./interfaces/IGatewayEVM.sol"; @@ -23,7 +23,8 @@ contract GatewayEVM is UUPSUpgradeable, IGatewayEVM, ReentrancyGuardUpgradeable, - PausableUpgradeable + PausableUpgradeable, + INotSupportedMethods { using SafeERC20 for IERC20; @@ -233,6 +234,7 @@ contract GatewayEVM is whenNotPaused nonReentrant { + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (msg.value == 0) revert InsufficientETHAmount(); if (receiver == address(0)) revert ZeroAddress(); @@ -258,6 +260,7 @@ contract GatewayEVM is whenNotPaused nonReentrant { + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (amount == 0) revert InsufficientERC20Amount(); if (receiver == address(0)) revert ZeroAddress(); @@ -280,6 +283,7 @@ contract GatewayEVM is whenNotPaused nonReentrant { + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (msg.value == 0) revert InsufficientETHAmount(); if (receiver == address(0)) revert ZeroAddress(); if (payload.length + revertOptions.revertMessage.length >= MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); @@ -308,6 +312,7 @@ contract GatewayEVM is whenNotPaused nonReentrant { + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (amount == 0) revert InsufficientERC20Amount(); if (receiver == address(0)) revert ZeroAddress(); if (payload.length + revertOptions.revertMessage.length >= MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); @@ -330,6 +335,7 @@ contract GatewayEVM is whenNotPaused nonReentrant { + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver == address(0)) revert ZeroAddress(); if (payload.length + revertOptions.revertMessage.length >= MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); diff --git a/v2/contracts/zevm/GatewayZEVM.sol b/v2/contracts/zevm/GatewayZEVM.sol index 928e05af6..b1fdd034b 100644 --- a/v2/contracts/zevm/GatewayZEVM.sol +++ b/v2/contracts/zevm/GatewayZEVM.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.26; import { IGatewayZEVM } from "./interfaces/IGatewayZEVM.sol"; -import { RevertContext, RevertOptions } from "../../contracts/Revert.sol"; +import { RevertContext, RevertOptions, INotSupportedMethods } from "../../contracts/Revert.sol"; import "./interfaces/IWZETA.sol"; import { IZRC20 } from "./interfaces/IZRC20.sol"; import { UniversalContract, zContext } from "./interfaces/UniversalContract.sol"; @@ -23,7 +23,8 @@ contract GatewayZEVM is AccessControlUpgradeable, UUPSUpgradeable, ReentrancyGuardUpgradeable, - PausableUpgradeable + PausableUpgradeable, + INotSupportedMethods { /// @notice Error indicating a zero address was provided. error ZeroAddress(); @@ -141,6 +142,7 @@ contract GatewayZEVM is nonReentrant whenNotPaused { + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver.length == 0) revert ZeroAddress(); if (amount == 0) revert InsufficientZRC20Amount(); @@ -178,6 +180,7 @@ contract GatewayZEVM is nonReentrant whenNotPaused { + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver.length == 0) revert ZeroAddress(); if (amount == 0) revert InsufficientZRC20Amount(); if (gasLimit == 0) revert InsufficientGasLimit(); @@ -212,6 +215,8 @@ contract GatewayZEVM is nonReentrant whenNotPaused { + revert ZETANotSupported(); + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver.length == 0) revert ZeroAddress(); if (amount == 0) revert InsufficientZetaAmount(); @@ -236,6 +241,8 @@ contract GatewayZEVM is nonReentrant whenNotPaused { + revert ZETANotSupported(); + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver.length == 0) revert ZeroAddress(); if (amount == 0) revert InsufficientZetaAmount(); if (message.length + revertOptions.revertMessage.length >= MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); @@ -261,6 +268,7 @@ contract GatewayZEVM is nonReentrant whenNotPaused { + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver.length == 0) revert ZeroAddress(); if (gasLimit == 0) revert InsufficientGasLimit(); if (message.length + revertOptions.revertMessage.length >= MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); @@ -348,6 +356,7 @@ contract GatewayZEVM is onlyFungible whenNotPaused { + revert ZETANotSupported(); if (target == address(0)) revert ZeroAddress(); if (amount == 0) revert InsufficientZetaAmount(); if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index 515dd130c..a3ecec544 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -408,7 +408,7 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR revertOptions = RevertOptions({ revertAddress: address(0x321), - callOnRevert: true, + callOnRevert: false, abortAddress: address(0x321), revertMessage: "", onRevertGasLimit: 0 diff --git a/v2/test/GatewayEVMZEVM.t.sol b/v2/test/GatewayEVMZEVM.t.sol index d7be92c51..9ce2a9d94 100644 --- a/v2/test/GatewayEVMZEVM.t.sol +++ b/v2/test/GatewayEVMZEVM.t.sol @@ -126,7 +126,7 @@ contract GatewayEVMZEVMTest is revertOptions = RevertOptions({ revertAddress: address(0x321), - callOnRevert: true, + callOnRevert: false, abortAddress: address(0x321), revertMessage: "", onRevertGasLimit: 0 diff --git a/v2/test/GatewayZEVM.t.sol b/v2/test/GatewayZEVM.t.sol index 29a113fed..2d39c807d 100644 --- a/v2/test/GatewayZEVM.t.sol +++ b/v2/test/GatewayZEVM.t.sol @@ -80,7 +80,7 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors revertOptions = RevertOptions({ revertAddress: address(0x321), - callOnRevert: true, + callOnRevert: false, abortAddress: address(0x321), revertMessage: "", onRevertGasLimit: 0 @@ -226,55 +226,55 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors assertEq(ownerBalanceBefore - amount - expectedGasFee, ownerBalanceAfter); } - function testWithdrawZETAFailsIfAmountIsZero() public { - vm.expectRevert(InsufficientZetaAmount.selector); - gateway.withdraw(abi.encodePacked(addr1), 0, 1, revertOptions); - } - - function testWithdrawZETAFailsIfReceiverIsZeroAddress() public { - vm.expectRevert(ZeroAddress.selector); - gateway.withdraw(abi.encodePacked(""), 0, 1, revertOptions); - } - - function testWithdrawAndCallZETAFailsIfAmountIsZero() public { - bytes memory message = abi.encodeWithSignature("hello(address)", addr1); - vm.expectRevert(InsufficientZetaAmount.selector); - gateway.withdrawAndCall(abi.encodePacked(addr1), 0, 1, message, revertOptions); - } - - function testWithdrawAndCallZETAFailsIfMessageSizeExceeded() public { - bytes memory message = new bytes(512); - revertOptions.revertMessage = new bytes(512); - vm.expectRevert(MessageSizeExceeded.selector); - gateway.withdrawAndCall(abi.encodePacked(addr1), 1, 1, message, revertOptions); - } - - function testWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress() public { - bytes memory message = abi.encodeWithSignature("hello(address)", addr1); - vm.expectRevert(ZeroAddress.selector); - gateway.withdrawAndCall(abi.encodePacked(""), 1, 1, message, revertOptions); - } - - function testWithdrawZETA() public { - uint256 amount = 1; - uint256 ownerBalanceBefore = zetaToken.balanceOf(owner); - uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); - uint256 fungibleModuleBalanceBefore = fungibleModule.balance; - uint256 chainId = 1; - - vm.expectEmit(true, true, true, true, address(gateway)); - emit Withdrawn(owner, chainId, abi.encodePacked(addr1), address(zetaToken), amount, 0, 0, "", 0, revertOptions); - gateway.withdraw(abi.encodePacked(addr1), amount, chainId, revertOptions); - - uint256 ownerBalanceAfter = zetaToken.balanceOf(owner); - assertEq(ownerBalanceBefore - 1, ownerBalanceAfter); - - uint256 gatewayBalanceAfter = zetaToken.balanceOf(address(gateway)); - assertEq(gatewayBalanceBefore, gatewayBalanceAfter); - - // Verify amount is transfered to fungible module - assertEq(fungibleModuleBalanceBefore + 1, fungibleModule.balance); - } + // function testWithdrawZETAFailsIfAmountIsZero() public { + // vm.expectRevert(InsufficientZetaAmount.selector); + // gateway.withdraw(abi.encodePacked(addr1), 0, 1, revertOptions); + // } + + // function testWithdrawZETAFailsIfReceiverIsZeroAddress() public { + // vm.expectRevert(ZeroAddress.selector); + // gateway.withdraw(abi.encodePacked(""), 0, 1, revertOptions); + // } + + // function testWithdrawAndCallZETAFailsIfAmountIsZero() public { + // bytes memory message = abi.encodeWithSignature("hello(address)", addr1); + // vm.expectRevert(InsufficientZetaAmount.selector); + // gateway.withdrawAndCall(abi.encodePacked(addr1), 0, 1, message, revertOptions); + // } + + // function testWithdrawAndCallZETAFailsIfMessageSizeExceeded() public { + // bytes memory message = new bytes(512); + // revertOptions.revertMessage = new bytes(512); + // vm.expectRevert(MessageSizeExceeded.selector); + // gateway.withdrawAndCall(abi.encodePacked(addr1), 1, 1, message, revertOptions); + // } + + // function testWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress() public { + // bytes memory message = abi.encodeWithSignature("hello(address)", addr1); + // vm.expectRevert(ZeroAddress.selector); + // gateway.withdrawAndCall(abi.encodePacked(""), 1, 1, message, revertOptions); + // } + + // function testWithdrawZETA() public { + // uint256 amount = 1; + // uint256 ownerBalanceBefore = zetaToken.balanceOf(owner); + // uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); + // uint256 fungibleModuleBalanceBefore = fungibleModule.balance; + // uint256 chainId = 1; + + // vm.expectEmit(true, true, true, true, address(gateway)); + // emit Withdrawn(owner, chainId, abi.encodePacked(addr1), address(zetaToken), amount, 0, 0, "", 0, revertOptions); + // gateway.withdraw(abi.encodePacked(addr1), amount, chainId, revertOptions); + + // uint256 ownerBalanceAfter = zetaToken.balanceOf(owner); + // assertEq(ownerBalanceBefore - 1, ownerBalanceAfter); + + // uint256 gatewayBalanceAfter = zetaToken.balanceOf(address(gateway)); + // assertEq(gatewayBalanceBefore, gatewayBalanceAfter); + + // // Verify amount is transfered to fungible module + // assertEq(fungibleModuleBalanceBefore + 1, fungibleModule.balance); + // } function testWithdrawZETAFailsIfNoAllowance() public { uint256 amount = 1; @@ -310,29 +310,29 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.withdraw(abi.encodePacked(addr1), amount, chainId, revertOptions); } - function testWithdrawZETAWithMessage() public { - uint256 amount = 1; - uint256 ownerBalanceBefore = zetaToken.balanceOf(owner); - uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); - uint256 fungibleModuleBalanceBefore = fungibleModule.balance; - bytes memory message = abi.encodeWithSignature("hello(address)", addr1); - uint256 chainId = 1; + // function testWithdrawZETAWithMessage() public { + // uint256 amount = 1; + // uint256 ownerBalanceBefore = zetaToken.balanceOf(owner); + // uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); + // uint256 fungibleModuleBalanceBefore = fungibleModule.balance; + // bytes memory message = abi.encodeWithSignature("hello(address)", addr1); + // uint256 chainId = 1; - vm.expectEmit(true, true, true, true, address(gateway)); - emit Withdrawn( - owner, chainId, abi.encodePacked(addr1), address(zetaToken), amount, 0, 0, message, 0, revertOptions - ); - gateway.withdrawAndCall(abi.encodePacked(addr1), amount, chainId, message, revertOptions); + // vm.expectEmit(true, true, true, true, address(gateway)); + // emit Withdrawn( + // owner, chainId, abi.encodePacked(addr1), address(zetaToken), amount, 0, 0, message, 0, revertOptions + // ); + // gateway.withdrawAndCall(abi.encodePacked(addr1), amount, chainId, message, revertOptions); - uint256 ownerBalanceAfter = zetaToken.balanceOf(owner); - assertEq(ownerBalanceBefore - 1, ownerBalanceAfter); + // uint256 ownerBalanceAfter = zetaToken.balanceOf(owner); + // assertEq(ownerBalanceBefore - 1, ownerBalanceAfter); - uint256 gatewayBalanceAfter = zetaToken.balanceOf(address(gateway)); - assertEq(gatewayBalanceBefore, gatewayBalanceAfter); + // uint256 gatewayBalanceAfter = zetaToken.balanceOf(address(gateway)); + // assertEq(gatewayBalanceBefore, gatewayBalanceAfter); - // Verify amount is transfered to fungible module - assertEq(fungibleModuleBalanceBefore + 1, fungibleModule.balance); - } + // // Verify amount is transfered to fungible module + // assertEq(fungibleModuleBalanceBefore + 1, fungibleModule.balance); + // } function testWithdrawZETAWithMessageFailsIfNoAllowance() public { uint256 amount = 1; @@ -758,104 +758,104 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.depositAndRevert(address(zrc20), 1, address(gateway), revertContext); } - function testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress() public { - bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - - vm.prank(fungibleModule); - vm.expectRevert(ZeroAddress.selector); - gateway.depositAndCall(context, 1, address(0), message); - } - - function testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero() public { - bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - - vm.prank(fungibleModule); - vm.expectRevert(InsufficientZetaAmount.selector); - gateway.depositAndCall(context, 0, address(zrc20), message); - } - - function testDepositZETAAndCallUniversalContractFailsIfZeroAddress() public { - uint256 amount = 1; - uint256 fungibleBalanceBefore = zetaToken.balanceOf(fungibleModule); - uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); - uint256 destinationBalanceBefore = address(testUniversalContract).balance; - bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - - vm.prank(fungibleModule); - vm.expectRevert(ZeroAddress.selector); - gateway.depositAndCall(context, 1, address(0), message); - } - - function testDepositZETAAndCallUniversal() public { - bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - - vm.prank(fungibleModule); - vm.expectRevert(ZeroAddress.selector); - gateway.depositAndCall(context, 1, address(0), message); - } - - function testDepositZETAAndCallUniversalContract() public { - uint256 amount = 1; - uint256 fungibleBalanceBefore = zetaToken.balanceOf(fungibleModule); - uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); - uint256 destinationBalanceBefore = address(testUniversalContract).balance; - bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - - vm.expectEmit(true, true, true, true, address(testUniversalContract)); - emit ContextData(abi.encodePacked(gateway), fungibleModule, amount, address(gateway), "hello"); - vm.prank(fungibleModule); - gateway.depositAndCall(context, amount, address(testUniversalContract), message); - - uint256 fungibleBalanceAfter = zetaToken.balanceOf(fungibleModule); - assertEq(fungibleBalanceBefore - amount, fungibleBalanceAfter); - - uint256 gatewayBalanceAfter = zetaToken.balanceOf(address(gateway)); - assertEq(gatewayBalanceBefore, gatewayBalanceAfter); - - // Verify amount is transfered to destination - assertEq(destinationBalanceBefore + amount, address(testUniversalContract).balance); - } - - function testDepositZETAAndCallUniversalContractFailsIfSenderIsNotFungibleModule() public { - uint256 amount = 1; - bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - - vm.expectRevert(CallerIsNotFungibleModule.selector); - vm.prank(owner); - gateway.depositAndCall(context, amount, address(testUniversalContract), message); - } - - function testDepositZETAAndCallUniversalContractFailsIfTargetIsFungibleModule() public { - uint256 amount = 1; - bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - - vm.expectRevert(InvalidTarget.selector); - vm.prank(fungibleModule); - gateway.depositAndCall(context, amount, fungibleModule, message); - } - - function testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway() public { - uint256 amount = 1; - bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - - vm.expectRevert(InvalidTarget.selector); - vm.prank(fungibleModule); - gateway.depositAndCall(context, amount, address(gateway), message); - } + // function testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress() public { + // bytes memory message = abi.encode("hello"); + // zContext memory context = + // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + // vm.prank(fungibleModule); + // vm.expectRevert(ZeroAddress.selector); + // gateway.depositAndCall(context, 1, address(0), message); + // } + + // function testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero() public { + // bytes memory message = abi.encode("hello"); + // zContext memory context = + // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + // vm.prank(fungibleModule); + // vm.expectRevert(InsufficientZetaAmount.selector); + // gateway.depositAndCall(context, 0, address(zrc20), message); + // } + + // function testDepositZETAAndCallUniversalContractFailsIfZeroAddress() public { + // uint256 amount = 1; + // uint256 fungibleBalanceBefore = zetaToken.balanceOf(fungibleModule); + // uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); + // uint256 destinationBalanceBefore = address(testUniversalContract).balance; + // bytes memory message = abi.encode("hello"); + // zContext memory context = + // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + // vm.prank(fungibleModule); + // vm.expectRevert(ZeroAddress.selector); + // gateway.depositAndCall(context, 1, address(0), message); + // } + + // function testDepositZETAAndCallUniversal() public { + // bytes memory message = abi.encode("hello"); + // zContext memory context = + // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + // vm.prank(fungibleModule); + // vm.expectRevert(ZeroAddress.selector); + // gateway.depositAndCall(context, 1, address(0), message); + // } + + // function testDepositZETAAndCallUniversalContract() public { + // uint256 amount = 1; + // uint256 fungibleBalanceBefore = zetaToken.balanceOf(fungibleModule); + // uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); + // uint256 destinationBalanceBefore = address(testUniversalContract).balance; + // bytes memory message = abi.encode("hello"); + // zContext memory context = + // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + // vm.expectEmit(true, true, true, true, address(testUniversalContract)); + // emit ContextData(abi.encodePacked(gateway), fungibleModule, amount, address(gateway), "hello"); + // vm.prank(fungibleModule); + // gateway.depositAndCall(context, amount, address(testUniversalContract), message); + + // uint256 fungibleBalanceAfter = zetaToken.balanceOf(fungibleModule); + // assertEq(fungibleBalanceBefore - amount, fungibleBalanceAfter); + + // uint256 gatewayBalanceAfter = zetaToken.balanceOf(address(gateway)); + // assertEq(gatewayBalanceBefore, gatewayBalanceAfter); + + // // Verify amount is transfered to destination + // assertEq(destinationBalanceBefore + amount, address(testUniversalContract).balance); + // } + + // function testDepositZETAAndCallUniversalContractFailsIfSenderIsNotFungibleModule() public { + // uint256 amount = 1; + // bytes memory message = abi.encode("hello"); + // zContext memory context = + // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + // vm.expectRevert(CallerIsNotFungibleModule.selector); + // vm.prank(owner); + // gateway.depositAndCall(context, amount, address(testUniversalContract), message); + // } + + // function testDepositZETAAndCallUniversalContractFailsIfTargetIsFungibleModule() public { + // uint256 amount = 1; + // bytes memory message = abi.encode("hello"); + // zContext memory context = + // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + // vm.expectRevert(InvalidTarget.selector); + // vm.prank(fungibleModule); + // gateway.depositAndCall(context, amount, fungibleModule, message); + // } + + // function testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway() public { + // uint256 amount = 1; + // bytes memory message = abi.encode("hello"); + // zContext memory context = + // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + + // vm.expectRevert(InvalidTarget.selector); + // vm.prank(fungibleModule); + // gateway.depositAndCall(context, amount, address(gateway), message); + // } } diff --git a/v2/test/utils/SenderZEVM.sol b/v2/test/utils/SenderZEVM.sol index 1efa159d6..88bed329c 100644 --- a/v2/test/utils/SenderZEVM.sol +++ b/v2/test/utils/SenderZEVM.sol @@ -33,7 +33,7 @@ contract SenderZEVM { RevertOptions memory revertOptions = RevertOptions({ revertAddress: address(0x321), - callOnRevert: true, + callOnRevert: false, abortAddress: address(0x321), revertMessage: "", onRevertGasLimit: 0 @@ -72,7 +72,7 @@ contract SenderZEVM { RevertOptions memory revertOptions = RevertOptions({ revertAddress: address(0x321), - callOnRevert: true, + callOnRevert: false, abortAddress: address(0x321), revertMessage: "", onRevertGasLimit: 0 From 6fa64b683165c13bf98d91278b52568d1c718ed6 Mon Sep 17 00:00:00 2001 From: skosito Date: Mon, 14 Oct 2024 13:23:33 +0200 Subject: [PATCH 04/16] tss pauser --- v2/contracts/evm/ERC20Custody.sol | 1 + v2/contracts/evm/GatewayEVM.sol | 1 + v2/contracts/evm/ZetaConnectorBase.sol | 1 + v2/test/ERC20Custody.t.sol | 14 ++++++++------ v2/test/GatewayEVM.t.sol | 12 +++++++----- v2/test/ZetaConnectorNative.t.sol | 12 +++++++----- v2/test/ZetaConnectorNonNative.t.sol | 12 +++++++----- v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol | 1 + 8 files changed, 33 insertions(+), 21 deletions(-) diff --git a/v2/contracts/evm/ERC20Custody.sol b/v2/contracts/evm/ERC20Custody.sol index 670e4d007..22481a0ea 100644 --- a/v2/contracts/evm/ERC20Custody.sol +++ b/v2/contracts/evm/ERC20Custody.sol @@ -59,6 +59,7 @@ contract ERC20Custody is tssAddress = tssAddress_; _grantRole(DEFAULT_ADMIN_ROLE, admin_); _grantRole(PAUSER_ROLE, admin_); + _grantRole(PAUSER_ROLE, tssAddress_); _grantRole(WITHDRAWER_ROLE, tssAddress_); _grantRole(WHITELISTER_ROLE, admin_); _grantRole(WHITELISTER_ROLE, tssAddress_); diff --git a/v2/contracts/evm/GatewayEVM.sol b/v2/contracts/evm/GatewayEVM.sol index e8bd0aee7..06a8d89e2 100644 --- a/v2/contracts/evm/GatewayEVM.sol +++ b/v2/contracts/evm/GatewayEVM.sol @@ -64,6 +64,7 @@ contract GatewayEVM is _grantRole(DEFAULT_ADMIN_ROLE, admin_); _grantRole(PAUSER_ROLE, admin_); + _grantRole(PAUSER_ROLE, tssAddress_); tssAddress = tssAddress_; _grantRole(TSS_ROLE, tssAddress_); diff --git a/v2/contracts/evm/ZetaConnectorBase.sol b/v2/contracts/evm/ZetaConnectorBase.sol index b2b4d4910..4cae63406 100644 --- a/v2/contracts/evm/ZetaConnectorBase.sol +++ b/v2/contracts/evm/ZetaConnectorBase.sol @@ -72,6 +72,7 @@ abstract contract ZetaConnectorBase is _grantRole(WITHDRAWER_ROLE, tssAddress_); _grantRole(TSS_ROLE, tssAddress_); _grantRole(PAUSER_ROLE, admin_); + _grantRole(PAUSER_ROLE, tssAddress_); } /// @dev Authorizes the upgrade of the contract, sender must be owner. diff --git a/v2/test/ERC20Custody.t.sol b/v2/test/ERC20Custody.t.sol index 774a956a0..ecb552352 100644 --- a/v2/test/ERC20Custody.t.sol +++ b/v2/test/ERC20Custody.t.sol @@ -33,6 +33,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv address owner; address destination; address tssAddress; + address foo; RevertContext revertContext; error EnforcedPause(); @@ -53,7 +54,8 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv owner = address(this); destination = address(0x1234); tssAddress = address(0x5678); - + foo = address(0x9876); + token = new TestERC20("test", "TTK"); zeta = new TestERC20("zeta", "ZETA"); @@ -221,15 +223,15 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv } function testForwardCallToReceiveERC20ThroughCustodyTogglePause() public { - vm.prank(tssAddress); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); + vm.prank(foo); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, foo, PAUSER_ROLE)); custody.pause(); - vm.prank(tssAddress); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); + vm.prank(foo); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, foo, PAUSER_ROLE)); gateway.unpause(); - vm.prank(owner); + vm.prank(tssAddress); custody.pause(); uint256 amount = 100_000; diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index a3ecec544..4a7067b10 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -34,6 +34,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver address owner; address destination; address tssAddress; + address foo; RevertOptions revertOptions; RevertContext revertContext; @@ -52,6 +53,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver owner = address(this); destination = address(0x1234); tssAddress = address(0x5678); + foo = address(0x9876); token = new TestERC20("test", "TTK"); @@ -242,15 +244,15 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver } function testForwardCallToReceiveNoParamsTogglePause() public { - vm.prank(tssAddress); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); + vm.prank(foo); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, foo, PAUSER_ROLE)); gateway.pause(); - vm.prank(tssAddress); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); + vm.prank(foo); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, foo, PAUSER_ROLE)); gateway.unpause(); - vm.prank(owner); + vm.prank(tssAddress); gateway.pause(); bytes memory data = abi.encodeWithSignature("receiveNoParams()"); diff --git a/v2/test/ZetaConnectorNative.t.sol b/v2/test/ZetaConnectorNative.t.sol index 4f158fd49..c7a355223 100644 --- a/v2/test/ZetaConnectorNative.t.sol +++ b/v2/test/ZetaConnectorNative.t.sol @@ -39,6 +39,7 @@ contract ZetaConnectorNativeTest is address owner; address destination; address tssAddress; + address foo; RevertContext revertContext; error EnforcedPause(); @@ -55,6 +56,7 @@ contract ZetaConnectorNativeTest is owner = address(this); destination = address(0x1234); tssAddress = address(0x5678); + foo = address(0x9876); zetaToken = new TestERC20("zeta", "ZETA"); @@ -151,15 +153,15 @@ contract ZetaConnectorNativeTest is uint256 amount = 100_000; bytes32 internalSendHash = ""; - vm.prank(tssAddress); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); + vm.prank(foo); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, foo, PAUSER_ROLE)); zetaConnector.pause(); - vm.prank(tssAddress); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); + vm.prank(foo); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, foo, PAUSER_ROLE)); zetaConnector.unpause(); - vm.prank(owner); + vm.prank(tssAddress); zetaConnector.pause(); vm.expectRevert(EnforcedPause.selector); diff --git a/v2/test/ZetaConnectorNonNative.t.sol b/v2/test/ZetaConnectorNonNative.t.sol index cd1973f52..739f89485 100644 --- a/v2/test/ZetaConnectorNonNative.t.sol +++ b/v2/test/ZetaConnectorNonNative.t.sol @@ -39,6 +39,7 @@ contract ZetaConnectorNonNativeTest is address owner; address destination; address tssAddress; + address foo; RevertContext revertContext; error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); @@ -55,6 +56,7 @@ contract ZetaConnectorNonNativeTest is owner = address(this); destination = address(0x1234); tssAddress = address(0x5678); + foo = address(0x9876); zetaToken = new ZetaNonEth(tssAddress, tssAddress); @@ -109,15 +111,15 @@ contract ZetaConnectorNonNativeTest is uint256 amount = 100_000; bytes32 internalSendHash = ""; - vm.prank(tssAddress); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); + vm.prank(foo); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, foo, PAUSER_ROLE)); zetaConnector.pause(); - vm.prank(tssAddress); - vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, tssAddress, PAUSER_ROLE)); + vm.prank(foo); + vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, foo, PAUSER_ROLE)); zetaConnector.unpause(); - vm.prank(owner); + vm.prank(tssAddress); zetaConnector.pause(); vm.expectRevert(EnforcedPause.selector); diff --git a/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol b/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol index c06feb646..d2e360481 100644 --- a/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol +++ b/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol @@ -67,6 +67,7 @@ contract GatewayEVMUpgradeTest is _grantRole(DEFAULT_ADMIN_ROLE, admin_); _grantRole(PAUSER_ROLE, admin_); + _grantRole(PAUSER_ROLE, tssAddress_); tssAddress = tssAddress_; _grantRole(TSS_ROLE, tssAddress_); From 915a2b60e451bf67ff86596a789af6a74dc2c491 Mon Sep 17 00:00:00 2001 From: skosito Date: Mon, 14 Oct 2024 13:35:05 +0200 Subject: [PATCH 05/16] review fixes --- v2/contracts/evm/ERC20Custody.sol | 4 +-- v2/contracts/evm/GatewayEVM.sol | 32 ++++++++++--------- v2/contracts/evm/ZetaConnectorBase.sol | 4 +-- v2/contracts/evm/ZetaConnectorNonNative.sol | 2 +- v2/contracts/evm/interfaces/IERC20Custody.sol | 3 +- v2/contracts/evm/interfaces/IGatewayEVM.sol | 3 +- .../evm/interfaces/IZetaConnector.sol | 3 +- v2/contracts/zevm/GatewayZEVM.sol | 18 ++++++----- v2/test/ERC20Custody.t.sol | 2 +- v2/test/GatewayEVM.t.sol | 14 ++++---- v2/test/ZetaConnectorNative.t.sol | 2 +- .../upgrades/ERC20CustodyUpgradeTest.sol | 4 +-- .../utils/upgrades/GatewayEVMUpgradeTest.sol | 4 +-- 13 files changed, 51 insertions(+), 44 deletions(-) diff --git a/v2/contracts/evm/ERC20Custody.sol b/v2/contracts/evm/ERC20Custody.sol index 22481a0ea..624620956 100644 --- a/v2/contracts/evm/ERC20Custody.sol +++ b/v2/contracts/evm/ERC20Custody.sol @@ -90,9 +90,9 @@ contract ERC20Custody is _grantRole(WITHDRAWER_ROLE, newTSSAddress); _grantRole(WHITELISTER_ROLE, newTSSAddress); - tssAddress = newTSSAddress; + emit UpdatedCustodyTSSAddress(tssAddress, newTSSAddress); - emit UpdatedCustodyTSSAddress(newTSSAddress); + tssAddress = newTSSAddress; } /// @notice Unpause contract. diff --git a/v2/contracts/evm/GatewayEVM.sol b/v2/contracts/evm/GatewayEVM.sol index 06a8d89e2..ad299275d 100644 --- a/v2/contracts/evm/GatewayEVM.sol +++ b/v2/contracts/evm/GatewayEVM.sol @@ -80,7 +80,7 @@ contract GatewayEVM is /// @param data Calldata to pass to the call. /// @return The result of the call. function _execute(address destination, bytes calldata data) internal returns (bytes memory) { - revertIfCallingOnRevert(data); + _revertIfCallingOnRevert(data); (bool success, bytes memory result) = destination.call{ value: msg.value }(data); if (!success) revert ExecutionFailed(); @@ -95,9 +95,9 @@ contract GatewayEVM is _revokeRole(TSS_ROLE, tssAddress); _grantRole(TSS_ROLE, newTSSAddress); - tssAddress = newTSSAddress; + emit UpdatedGatewayTSSAddress(tssAddress, newTSSAddress); - emit UpdatedGatewayTSSAddress(newTSSAddress); + tssAddress = newTSSAddress; } /// @notice Pause contract. @@ -178,18 +178,18 @@ contract GatewayEVM is if (amount == 0) revert InsufficientERC20Amount(); if (to == address(0)) revert ZeroAddress(); // Approve the target contract to spend the tokens - if (!resetApproval(token, to)) revert ApprovalFailed(); + if (!_resetApproval(token, to)) revert ApprovalFailed(); if (!IERC20(token).approve(to, amount)) revert ApprovalFailed(); // Execute the call on the target contract _execute(to, data); // Reset approval - if (!resetApproval(token, to)) revert ApprovalFailed(); + if (!_resetApproval(token, to)) revert ApprovalFailed(); // Transfer any remaining tokens back to the custody/connector contract uint256 remainingBalance = IERC20(token).balanceOf(address(this)); if (remainingBalance > 0) { - transferToAssetHandler(token, remainingBalance); + _transferToAssetHandler(token, remainingBalance); } emit ExecutedWithERC20(token, to, amount, data); @@ -238,6 +238,7 @@ contract GatewayEVM is if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (msg.value == 0) revert InsufficientETHAmount(); if (receiver == address(0)) revert ZeroAddress(); + if (revertOptions.revertMessage.length > MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); (bool deposited,) = tssAddress.call{ value: msg.value }(""); @@ -264,8 +265,9 @@ contract GatewayEVM is if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (amount == 0) revert InsufficientERC20Amount(); if (receiver == address(0)) revert ZeroAddress(); + if (revertOptions.revertMessage.length > MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); - transferFromToAssetHandler(msg.sender, asset, amount); + _transferFromToAssetHandler(msg.sender, asset, amount); emit Deposited(msg.sender, receiver, amount, asset, "", revertOptions); } @@ -287,7 +289,7 @@ contract GatewayEVM is if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (msg.value == 0) revert InsufficientETHAmount(); if (receiver == address(0)) revert ZeroAddress(); - if (payload.length + revertOptions.revertMessage.length >= MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); + if (payload.length + revertOptions.revertMessage.length > MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); (bool deposited,) = tssAddress.call{ value: msg.value }(""); @@ -316,9 +318,9 @@ contract GatewayEVM is if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (amount == 0) revert InsufficientERC20Amount(); if (receiver == address(0)) revert ZeroAddress(); - if (payload.length + revertOptions.revertMessage.length >= MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); + if (payload.length + revertOptions.revertMessage.length > MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); - transferFromToAssetHandler(msg.sender, asset, amount); + _transferFromToAssetHandler(msg.sender, asset, amount); emit Deposited(msg.sender, receiver, amount, asset, payload, revertOptions); } @@ -338,7 +340,7 @@ contract GatewayEVM is { if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver == address(0)) revert ZeroAddress(); - if (payload.length + revertOptions.revertMessage.length >= MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); + if (payload.length + revertOptions.revertMessage.length > MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); emit Called(msg.sender, receiver, payload, revertOptions); } @@ -368,7 +370,7 @@ contract GatewayEVM is /// @param token Address of the ERC20 token. /// @param to Address to reset the approval for. /// @return True if the approval reset was successful, false otherwise. - function resetApproval(address token, address to) private returns (bool) { + function _resetApproval(address token, address to) private returns (bool) { return IERC20(token).approve(to, 0); } @@ -378,7 +380,7 @@ contract GatewayEVM is /// @param from Address of the sender. /// @param token Address of the ERC20 token. /// @param amount Amount of tokens to transfer. - function transferFromToAssetHandler(address from, address token, uint256 amount) private { + function _transferFromToAssetHandler(address from, address token, uint256 amount) private { if (token == zetaToken) { // transfer to connector // transfer amount to gateway @@ -399,7 +401,7 @@ contract GatewayEVM is /// type. /// @param token Address of the ERC20 token. /// @param amount Amount of tokens to transfer. - function transferToAssetHandler(address token, uint256 amount) private { + function _transferToAssetHandler(address token, uint256 amount) private { if (token == zetaToken) { // transfer to connector // approve connector to handle tokens depending on connector version (eg. lock or burn) @@ -414,7 +416,7 @@ contract GatewayEVM is } // @dev prevent spoofing onRevert functions - function revertIfCallingOnRevert(bytes calldata data) private pure { + function _revertIfCallingOnRevert(bytes calldata data) private pure { if (data.length >= 4) { bytes4 functionSelector; assembly { diff --git a/v2/contracts/evm/ZetaConnectorBase.sol b/v2/contracts/evm/ZetaConnectorBase.sol index 4cae63406..ab08cf6c6 100644 --- a/v2/contracts/evm/ZetaConnectorBase.sol +++ b/v2/contracts/evm/ZetaConnectorBase.sol @@ -90,9 +90,9 @@ abstract contract ZetaConnectorBase is _grantRole(WITHDRAWER_ROLE, newTSSAddress); _grantRole(TSS_ROLE, newTSSAddress); + emit UpdatedZetaConnectorTSSAddress(tssAddress, newTSSAddress); + tssAddress = newTSSAddress; - - emit UpdatedZetaConnectorTSSAddress(newTSSAddress); } /// @notice Pause contract. diff --git a/v2/contracts/evm/ZetaConnectorNonNative.sol b/v2/contracts/evm/ZetaConnectorNonNative.sol index 33c4ae5a9..0feab73a6 100644 --- a/v2/contracts/evm/ZetaConnectorNonNative.sol +++ b/v2/contracts/evm/ZetaConnectorNonNative.sol @@ -123,7 +123,7 @@ contract ZetaConnectorNonNative is ZetaConnectorBase { } /// @dev mints to provided account and checks if totalSupply will be exceeded - function _mintTo(address to, uint256 amount, bytes32 internalSendHash) internal { + function _mintTo(address to, uint256 amount, bytes32 internalSendHash) private { if (amount + IERC20(zetaToken).totalSupply() > maxSupply) revert ExceedsMaxSupply(); IZetaNonEthNew(zetaToken).mint(address(to), amount, internalSendHash); } diff --git a/v2/contracts/evm/interfaces/IERC20Custody.sol b/v2/contracts/evm/interfaces/IERC20Custody.sol index 1feda3416..525f494be 100644 --- a/v2/contracts/evm/interfaces/IERC20Custody.sol +++ b/v2/contracts/evm/interfaces/IERC20Custody.sol @@ -43,7 +43,8 @@ interface IERC20CustodyEvents { /// @notice Emitted when tss address is updated /// @param newTSSAddress new tss address - event UpdatedCustodyTSSAddress(address newTSSAddress); + /// @param oldTSSAddress old tss address + event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress); } /// @title IERC20CustodyErrors diff --git a/v2/contracts/evm/interfaces/IGatewayEVM.sol b/v2/contracts/evm/interfaces/IGatewayEVM.sol index adf976a6e..364c39e88 100644 --- a/v2/contracts/evm/interfaces/IGatewayEVM.sol +++ b/v2/contracts/evm/interfaces/IGatewayEVM.sol @@ -52,7 +52,8 @@ interface IGatewayEVMEvents { /// @notice Emitted when tss address is updated /// @param newTSSAddress new tss address - event UpdatedGatewayTSSAddress(address newTSSAddress); + /// @param oldTSSAddress old tss address + event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress); } /// @title IGatewayEVMErrors diff --git a/v2/contracts/evm/interfaces/IZetaConnector.sol b/v2/contracts/evm/interfaces/IZetaConnector.sol index 103add979..d611b23fd 100644 --- a/v2/contracts/evm/interfaces/IZetaConnector.sol +++ b/v2/contracts/evm/interfaces/IZetaConnector.sol @@ -26,5 +26,6 @@ interface IZetaConnectorEvents { /// @notice Emitted when tss address is updated /// @param newTSSAddress new tss address - event UpdatedZetaConnectorTSSAddress(address newTSSAddress); + /// @param oldTSSAddress old tss address + event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress); } diff --git a/v2/contracts/zevm/GatewayZEVM.sol b/v2/contracts/zevm/GatewayZEVM.sol index b1fdd034b..0f6a71e6f 100644 --- a/v2/contracts/zevm/GatewayZEVM.sol +++ b/v2/contracts/zevm/GatewayZEVM.sol @@ -88,21 +88,21 @@ contract GatewayZEVM is _unpause(); } - /// @dev Internal function to withdraw ZRC20 tokens. + /// @dev Private function to withdraw ZRC20 tokens. /// @param amount The amount of tokens to withdraw. /// @param zrc20 The address of the ZRC20 token. /// @return The gas fee for the withdrawal. - function _withdrawZRC20(uint256 amount, address zrc20) internal returns (uint256) { + function _withdrawZRC20(uint256 amount, address zrc20) private returns (uint256) { // Use gas limit from zrc20 return _withdrawZRC20WithGasLimit(amount, zrc20, IZRC20(zrc20).GAS_LIMIT()); } - /// @dev Internal function to withdraw ZRC20 tokens with gas limit. + /// @dev Private function to withdraw ZRC20 tokens with gas limit. /// @param amount The amount of tokens to withdraw. /// @param zrc20 The address of the ZRC20 token. /// @param gasLimit Gas limit. /// @return The gas fee for the withdrawal. - function _withdrawZRC20WithGasLimit(uint256 amount, address zrc20, uint256 gasLimit) internal returns (uint256) { + function _withdrawZRC20WithGasLimit(uint256 amount, address zrc20, uint256 gasLimit) private returns (uint256) { (address gasZRC20, uint256 gasFee) = IZRC20(zrc20).withdrawGasFeeWithGasLimit(gasLimit); if (!IZRC20(gasZRC20).transferFrom(msg.sender, FUNGIBLE_MODULE_ADDRESS, gasFee)) { revert GasFeeTransferFailed(); @@ -117,10 +117,10 @@ contract GatewayZEVM is return gasFee; } - /// @dev Internal function to transfer ZETA tokens. + /// @dev Private function to transfer ZETA tokens. /// @param amount The amount of tokens to transfer. /// @param to The address to transfer the tokens to. - function _transferZETA(uint256 amount, address to) internal { + function _transferZETA(uint256 amount, address to) private { if (!IWETH9(zetaToken).transferFrom(msg.sender, address(this), amount)) revert FailedZetaSent(); IWETH9(zetaToken).withdraw(amount); (bool sent,) = to.call{ value: amount }(""); @@ -145,6 +145,7 @@ contract GatewayZEVM is if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver.length == 0) revert ZeroAddress(); if (amount == 0) revert InsufficientZRC20Amount(); + if (revertOptions.revertMessage.length > MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); uint256 gasFee = _withdrawZRC20(amount, zrc20); emit Withdrawn( @@ -219,6 +220,7 @@ contract GatewayZEVM is if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver.length == 0) revert ZeroAddress(); if (amount == 0) revert InsufficientZetaAmount(); + if (revertOptions.revertMessage.length > MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); emit Withdrawn(msg.sender, chainId, receiver, address(zetaToken), amount, 0, 0, "", 0, revertOptions); @@ -245,7 +247,7 @@ contract GatewayZEVM is if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver.length == 0) revert ZeroAddress(); if (amount == 0) revert InsufficientZetaAmount(); - if (message.length + revertOptions.revertMessage.length >= MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); + if (message.length + revertOptions.revertMessage.length > MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); emit Withdrawn(msg.sender, chainId, receiver, address(zetaToken), amount, 0, 0, message, 0, revertOptions); @@ -271,7 +273,7 @@ contract GatewayZEVM is if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver.length == 0) revert ZeroAddress(); if (gasLimit == 0) revert InsufficientGasLimit(); - if (message.length + revertOptions.revertMessage.length >= MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); + if (message.length + revertOptions.revertMessage.length > MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); (address gasZRC20, uint256 gasFee) = IZRC20(zrc20).withdrawGasFeeWithGasLimit(gasLimit); if (!IZRC20(gasZRC20).transferFrom(msg.sender, FUNGIBLE_MODULE_ADDRESS, gasFee)) { diff --git a/v2/test/ERC20Custody.t.sol b/v2/test/ERC20Custody.t.sol index ecb552352..1c44fdfb4 100644 --- a/v2/test/ERC20Custody.t.sol +++ b/v2/test/ERC20Custody.t.sol @@ -107,7 +107,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.startPrank(owner); vm.expectEmit(true, true, true, true, address(custody)); - emit UpdatedCustodyTSSAddress(newTSSAddress); + emit UpdatedCustodyTSSAddress(tssAddress, newTSSAddress); custody.updateTSSAddress(newTSSAddress); assertEq(newTSSAddress, custody.tssAddress()); diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index 4a7067b10..ebb7176f6 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -100,7 +100,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.startPrank(owner); vm.expectEmit(true, true, true, true, address(gateway)); - emit UpdatedGatewayTSSAddress(newTSSAddress); + emit UpdatedGatewayTSSAddress(tssAddress, newTSSAddress); gateway.updateTSSAddress(newTSSAddress); assertEq(newTSSAddress, gateway.tssAddress()); @@ -501,8 +501,8 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR function testDepositERC20ToCustodyWithPayloadFailsIfPayloadSizeExceeded() public { uint256 amount = 100_000; - bytes memory payload = new bytes(512); - revertOptions.revertMessage = new bytes(512); + bytes memory payload = new bytes(gateway.MAX_PAYLOAD_SIZE() / 2); + revertOptions.revertMessage = new bytes(gateway.MAX_PAYLOAD_SIZE() / 2 + 1); token.approve(address(gateway), amount); @@ -576,8 +576,8 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR function testDepositEthToTssWithPayloadFailsIfPayloadSizeExceeded() public { uint256 amount = 100_000; - bytes memory payload = new bytes(512); - revertOptions.revertMessage = new bytes(512); + bytes memory payload = new bytes(gateway.MAX_PAYLOAD_SIZE() / 2); + revertOptions.revertMessage = new bytes(gateway.MAX_PAYLOAD_SIZE() / 2 + 1); vm.expectRevert(PayloadSizeExceeded.selector); gateway.depositAndCall{ value: amount }(destination, payload, revertOptions); @@ -608,8 +608,8 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR } function testCallWithPayloadFailsIfPayloadSizeExceeded() public { - bytes memory payload = new bytes(512); - revertOptions.revertMessage = new bytes(512); + bytes memory payload = new bytes(gateway.MAX_PAYLOAD_SIZE() / 2); + revertOptions.revertMessage = new bytes(gateway.MAX_PAYLOAD_SIZE() / 2 + 1); vm.expectRevert(PayloadSizeExceeded.selector); gateway.call(destination, payload, revertOptions); diff --git a/v2/test/ZetaConnectorNative.t.sol b/v2/test/ZetaConnectorNative.t.sol index c7a355223..dbf1f7139 100644 --- a/v2/test/ZetaConnectorNative.t.sol +++ b/v2/test/ZetaConnectorNative.t.sol @@ -104,7 +104,7 @@ contract ZetaConnectorNativeTest is vm.startPrank(owner); vm.expectEmit(true, true, true, true, address(zetaConnector)); - emit UpdatedZetaConnectorTSSAddress(newTSSAddress); + emit UpdatedZetaConnectorTSSAddress(tssAddress, newTSSAddress); zetaConnector.updateTSSAddress(newTSSAddress); assertEq(newTSSAddress, zetaConnector.tssAddress()); diff --git a/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol b/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol index 2c67a6246..00fcf9ccc 100644 --- a/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol +++ b/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol @@ -93,9 +93,9 @@ contract ERC20CustodyUpgradeTest is _grantRole(WITHDRAWER_ROLE, newTSSAddress); _grantRole(WHITELISTER_ROLE, newTSSAddress); - tssAddress = newTSSAddress; + emit UpdatedCustodyTSSAddress(tssAddress, newTSSAddress); - emit UpdatedCustodyTSSAddress(newTSSAddress); + tssAddress = newTSSAddress; } /// @notice Unpause contract. diff --git a/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol b/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol index d2e360481..f181e3d61 100644 --- a/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol +++ b/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol @@ -98,9 +98,9 @@ contract GatewayEVMUpgradeTest is _revokeRole(TSS_ROLE, tssAddress); _grantRole(TSS_ROLE, newTSSAddress); + emit UpdatedGatewayTSSAddress(tssAddress, newTSSAddress); + tssAddress = newTSSAddress; - - emit UpdatedGatewayTSSAddress(newTSSAddress); } /// @notice Pause contract. From a00918b3b8ce915bfe1558e94c15888bf5da8d82 Mon Sep 17 00:00:00 2001 From: skosito Date: Mon, 14 Oct 2024 13:35:18 +0200 Subject: [PATCH 06/16] fmt --- v2/contracts/Revert.sol | 2 +- v2/contracts/evm/ERC20Custody.sol | 2 +- v2/contracts/evm/GatewayEVM.sol | 2 +- v2/contracts/evm/ZetaConnectorBase.sol | 4 ++-- v2/contracts/evm/ZetaConnectorNative.sol | 2 +- v2/contracts/evm/ZetaConnectorNonNative.sol | 2 +- v2/contracts/zevm/GatewayZEVM.sol | 2 +- v2/test/ERC20Custody.t.sol | 6 +++--- v2/test/GatewayZEVM.t.sol | 3 ++- v2/test/ZetaConnectorNative.t.sol | 2 +- v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol | 2 +- v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol | 2 +- v2/test/utils/upgrades/ZetaConnectorNativeUpgradeTest.sol | 2 +- .../utils/upgrades/ZetaConnectorNonNativeUpgradeTest.sol | 2 +- 14 files changed, 18 insertions(+), 17 deletions(-) diff --git a/v2/contracts/Revert.sol b/v2/contracts/Revert.sol index 8f7517225..2ad3bb997 100644 --- a/v2/contracts/Revert.sol +++ b/v2/contracts/Revert.sol @@ -36,4 +36,4 @@ interface Revertable { interface INotSupportedMethods { error CallOnRevertNotSupported(); error ZETANotSupported(); -} \ No newline at end of file +} diff --git a/v2/contracts/evm/ERC20Custody.sol b/v2/contracts/evm/ERC20Custody.sol index 624620956..d575d87a6 100644 --- a/v2/contracts/evm/ERC20Custody.sol +++ b/v2/contracts/evm/ERC20Custody.sol @@ -218,4 +218,4 @@ contract ERC20Custody is // actual received amount. emit Deposited(recipient, asset, asset.balanceOf(address(this)) - oldBalance, message); } -} \ No newline at end of file +} diff --git a/v2/contracts/evm/GatewayEVM.sol b/v2/contracts/evm/GatewayEVM.sol index ad299275d..2749d8681 100644 --- a/v2/contracts/evm/GatewayEVM.sol +++ b/v2/contracts/evm/GatewayEVM.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.26; -import { RevertContext, RevertOptions, Revertable, INotSupportedMethods } from "../../contracts/Revert.sol"; +import { INotSupportedMethods, RevertContext, RevertOptions, Revertable } from "../../contracts/Revert.sol"; import { ZetaConnectorBase } from "./ZetaConnectorBase.sol"; import { IERC20Custody } from "./interfaces/IERC20Custody.sol"; import { IGatewayEVM } from "./interfaces/IGatewayEVM.sol"; diff --git a/v2/contracts/evm/ZetaConnectorBase.sol b/v2/contracts/evm/ZetaConnectorBase.sol index ab08cf6c6..02fbd93f4 100644 --- a/v2/contracts/evm/ZetaConnectorBase.sol +++ b/v2/contracts/evm/ZetaConnectorBase.sol @@ -91,7 +91,7 @@ abstract contract ZetaConnectorBase is _grantRole(TSS_ROLE, newTSSAddress); emit UpdatedZetaConnectorTSSAddress(tssAddress, newTSSAddress); - + tssAddress = newTSSAddress; } @@ -144,4 +144,4 @@ abstract contract ZetaConnectorBase is /// @notice Handle received tokens. /// @param amount The amount of tokens received. function receiveTokens(uint256 amount) external virtual; -} \ No newline at end of file +} diff --git a/v2/contracts/evm/ZetaConnectorNative.sol b/v2/contracts/evm/ZetaConnectorNative.sol index 957c3bb26..b5f35c6ef 100644 --- a/v2/contracts/evm/ZetaConnectorNative.sol +++ b/v2/contracts/evm/ZetaConnectorNative.sol @@ -105,4 +105,4 @@ contract ZetaConnectorNative is ZetaConnectorBase { function receiveTokens(uint256 amount) external override whenNotPaused { IERC20(zetaToken).safeTransferFrom(msg.sender, address(this), amount); } -} \ No newline at end of file +} diff --git a/v2/contracts/evm/ZetaConnectorNonNative.sol b/v2/contracts/evm/ZetaConnectorNonNative.sol index 0feab73a6..3b05f2cd9 100644 --- a/v2/contracts/evm/ZetaConnectorNonNative.sol +++ b/v2/contracts/evm/ZetaConnectorNonNative.sol @@ -127,4 +127,4 @@ contract ZetaConnectorNonNative is ZetaConnectorBase { if (amount + IERC20(zetaToken).totalSupply() > maxSupply) revert ExceedsMaxSupply(); IZetaNonEthNew(zetaToken).mint(address(to), amount, internalSendHash); } -} \ No newline at end of file +} diff --git a/v2/contracts/zevm/GatewayZEVM.sol b/v2/contracts/zevm/GatewayZEVM.sol index 0f6a71e6f..9115e3e06 100644 --- a/v2/contracts/zevm/GatewayZEVM.sol +++ b/v2/contracts/zevm/GatewayZEVM.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.26; import { IGatewayZEVM } from "./interfaces/IGatewayZEVM.sol"; -import { RevertContext, RevertOptions, INotSupportedMethods } from "../../contracts/Revert.sol"; +import { INotSupportedMethods, RevertContext, RevertOptions } from "../../contracts/Revert.sol"; import "./interfaces/IWZETA.sol"; import { IZRC20 } from "./interfaces/IZRC20.sol"; import { UniversalContract, zContext } from "./interfaces/UniversalContract.sol"; diff --git a/v2/test/ERC20Custody.t.sol b/v2/test/ERC20Custody.t.sol index 1c44fdfb4..f351fdb5d 100644 --- a/v2/test/ERC20Custody.t.sol +++ b/v2/test/ERC20Custody.t.sol @@ -8,11 +8,11 @@ import "./utils/ReceiverEVM.sol"; import "./utils/TestERC20.sol"; +import "./utils/upgrades/ERC20CustodyUpgradeTest.sol"; import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import { Upgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; -import "./utils/upgrades/ERC20CustodyUpgradeTest.sol"; import "../contracts/evm/ERC20Custody.sol"; import "../contracts/evm/GatewayEVM.sol"; @@ -55,7 +55,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv destination = address(0x1234); tssAddress = address(0x5678); foo = address(0x9876); - + token = new TestERC20("test", "TTK"); zeta = new TestERC20("zeta", "ZETA"); @@ -63,7 +63,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv "GatewayEVM.sol", abi.encodeCall(GatewayEVM.initialize, (tssAddress, address(zeta), owner)) ); gateway = GatewayEVM(proxy); - proxy = Upgrades.deployUUPSProxy( + proxy = Upgrades.deployUUPSProxy( "ERC20Custody.sol", abi.encodeCall(ERC20Custody.initialize, (address(gateway), tssAddress, owner)) ); custody = ERC20Custody(proxy); diff --git a/v2/test/GatewayZEVM.t.sol b/v2/test/GatewayZEVM.t.sol index 2d39c807d..b9512ded9 100644 --- a/v2/test/GatewayZEVM.t.sol +++ b/v2/test/GatewayZEVM.t.sol @@ -263,7 +263,8 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors // uint256 chainId = 1; // vm.expectEmit(true, true, true, true, address(gateway)); - // emit Withdrawn(owner, chainId, abi.encodePacked(addr1), address(zetaToken), amount, 0, 0, "", 0, revertOptions); + // emit Withdrawn(owner, chainId, abi.encodePacked(addr1), address(zetaToken), amount, 0, 0, "", 0, + // revertOptions); // gateway.withdraw(abi.encodePacked(addr1), amount, chainId, revertOptions); // uint256 ownerBalanceAfter = zetaToken.balanceOf(owner); diff --git a/v2/test/ZetaConnectorNative.t.sol b/v2/test/ZetaConnectorNative.t.sol index dbf1f7139..8e1cff4fe 100644 --- a/v2/test/ZetaConnectorNative.t.sol +++ b/v2/test/ZetaConnectorNative.t.sol @@ -64,7 +64,7 @@ contract ZetaConnectorNativeTest is "GatewayEVM.sol", abi.encodeCall(GatewayEVM.initialize, (tssAddress, address(zetaToken), owner)) ); gateway = GatewayEVM(proxy); - proxy = Upgrades.deployUUPSProxy( + proxy = Upgrades.deployUUPSProxy( "ERC20Custody.sol", abi.encodeCall(ERC20Custody.initialize, (address(gateway), tssAddress, owner)) ); custody = ERC20Custody(proxy); diff --git a/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol b/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol index 00fcf9ccc..c60b9c1ae 100644 --- a/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol +++ b/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol @@ -221,4 +221,4 @@ contract ERC20CustodyUpgradeTest is // actual received amount. emit Deposited(recipient, asset, asset.balanceOf(address(this)) - oldBalance, message); } -} \ No newline at end of file +} diff --git a/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol b/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol index f181e3d61..4cf3c9809 100644 --- a/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol +++ b/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol @@ -99,7 +99,7 @@ contract GatewayEVMUpgradeTest is _grantRole(TSS_ROLE, newTSSAddress); emit UpdatedGatewayTSSAddress(tssAddress, newTSSAddress); - + tssAddress = newTSSAddress; } diff --git a/v2/test/utils/upgrades/ZetaConnectorNativeUpgradeTest.sol b/v2/test/utils/upgrades/ZetaConnectorNativeUpgradeTest.sol index f99aa973b..f4a56b2ee 100644 --- a/v2/test/utils/upgrades/ZetaConnectorNativeUpgradeTest.sol +++ b/v2/test/utils/upgrades/ZetaConnectorNativeUpgradeTest.sol @@ -109,4 +109,4 @@ contract ZetaConnectorNativeUpgradeTest is ZetaConnectorBase { function receiveTokens(uint256 amount) external override whenNotPaused { IERC20(zetaToken).safeTransferFrom(msg.sender, address(this), amount); } -} \ No newline at end of file +} diff --git a/v2/test/utils/upgrades/ZetaConnectorNonNativeUpgradeTest.sol b/v2/test/utils/upgrades/ZetaConnectorNonNativeUpgradeTest.sol index 550494428..adbec1f45 100644 --- a/v2/test/utils/upgrades/ZetaConnectorNonNativeUpgradeTest.sol +++ b/v2/test/utils/upgrades/ZetaConnectorNonNativeUpgradeTest.sol @@ -131,4 +131,4 @@ contract ZetaConnectorNonNativeUpgradeTest is ZetaConnectorBase { if (amount + IERC20(zetaToken).totalSupply() > maxSupply) revert ExceedsMaxSupply(); IZetaNonEthNew(zetaToken).mint(address(to), amount, internalSendHash); } -} \ No newline at end of file +} From 46dcff90820d24ab51c30d9bc162285b5005c98e Mon Sep 17 00:00:00 2001 From: skosito Date: Mon, 14 Oct 2024 13:42:49 +0200 Subject: [PATCH 07/16] tests fixes --- v2/test/GatewayEVM.t.sol | 15 +++++++++++++++ v2/test/GatewayZEVM.t.sol | 20 ++++++++++++++++---- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index ebb7176f6..e97d140d5 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -446,6 +446,15 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR gateway.deposit(destination, amount, address(token), revertOptions); } + function testDepositERC20ToCustodyFailsIfPayloadSizeExceeded() public { + uint256 amount = 100_000; + token.approve(address(gateway), amount); + revertOptions.revertMessage = new bytes(gateway.MAX_PAYLOAD_SIZE() + 1); + + vm.expectRevert(PayloadSizeExceeded.selector); + gateway.deposit(destination, amount, address(token), revertOptions); + } + function testDepositZetaToConnector() public { uint256 amount = 100_000; zeta.approve(address(gateway), amount); @@ -492,6 +501,12 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR gateway.deposit{ value: amount }(destination, revertOptions); } + function testFailDepositEthToTssIfPayloadSizeExceeded() public { + revertOptions.revertMessage = new bytes(gateway.MAX_PAYLOAD_SIZE() + 1); + vm.expectRevert("PayloadSizeExceeded"); + gateway.deposit{ value: 1 }(destination, revertOptions); + } + function testFailDepositEthToTssIfReceiverIsZeroAddress() public { uint256 amount = 1; diff --git a/v2/test/GatewayZEVM.t.sol b/v2/test/GatewayZEVM.t.sol index b9512ded9..35fe0e89a 100644 --- a/v2/test/GatewayZEVM.t.sol +++ b/v2/test/GatewayZEVM.t.sol @@ -131,6 +131,12 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.withdraw(abi.encodePacked(addr1), amount, address(zrc20), revertOptions); } + function testWithdrawZRC20FailsIfMessageSizeExceeded() public { + revertOptions.revertMessage = new bytes(gateway.MAX_MESSAGE_SIZE() + 1); + vm.expectRevert(MessageSizeExceeded.selector); + gateway.withdraw(abi.encodePacked(addr1), 2, address(zrc20), revertOptions); + } + function testWithdrawZRC20FailsIsAmountIs0() public { vm.expectRevert(InsufficientZRC20Amount.selector); gateway.withdraw(abi.encodePacked(addr1), 0, address(zrc20), revertOptions); @@ -164,8 +170,8 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors } function testWithdrawAndCallZRC20FailsIfMessageSizeExceeded() public { - bytes memory message = new bytes(512); - revertOptions.revertMessage = new bytes(512); + bytes memory message = new bytes(gateway.MAX_MESSAGE_SIZE() / 2); + revertOptions.revertMessage = new bytes(gateway.MAX_MESSAGE_SIZE() / 2 + 1); vm.expectRevert(MessageSizeExceeded.selector); gateway.withdrawAndCall(abi.encodePacked(addr1), 1, address(zrc20), message, 1, revertOptions); @@ -231,6 +237,12 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors // gateway.withdraw(abi.encodePacked(addr1), 0, 1, revertOptions); // } + // function testWithdrawZETAFailsIfMessageSizeExceeded() public { + // revertOptions.revertMessage = new bytes(gateway.MAX_MESSAGE_SIZE() + 1); + // vm.expectRevert(MessageSizeExceeded.selector); + // gateway.withdraw(abi.encodePacked(addr1), 1, 1, revertOptions); + // } + // function testWithdrawZETAFailsIfReceiverIsZeroAddress() public { // vm.expectRevert(ZeroAddress.selector); // gateway.withdraw(abi.encodePacked(""), 0, 1, revertOptions); @@ -367,8 +379,8 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors } function testCallFailsIfMessageSizeExceeded() public { - bytes memory message = new bytes(512); - revertOptions.revertMessage = new bytes(512); + bytes memory message = new bytes(gateway.MAX_MESSAGE_SIZE() / 2); + revertOptions.revertMessage = new bytes(gateway.MAX_MESSAGE_SIZE() / 2 + 1); vm.expectRevert(MessageSizeExceeded.selector); gateway.call(abi.encodePacked(addr1), address(zrc20), message, 1, revertOptions); } From 9892e638282863d50908d0c707318b026d8884a9 Mon Sep 17 00:00:00 2001 From: skosito Date: Tue, 15 Oct 2024 09:51:14 +0200 Subject: [PATCH 08/16] revert on zeta connector usage --- v2/contracts/evm/GatewayEVM.sol | 2 + v2/test/GatewayEVM.t.sol | 18 ++-- v2/test/ZetaConnectorNative.t.sol | 138 ++++++++++++------------- v2/test/ZetaConnectorNonNative.t.sol | 146 +++++++++++++-------------- 4 files changed, 153 insertions(+), 151 deletions(-) diff --git a/v2/contracts/evm/GatewayEVM.sol b/v2/contracts/evm/GatewayEVM.sol index 2749d8681..c54d7a282 100644 --- a/v2/contracts/evm/GatewayEVM.sol +++ b/v2/contracts/evm/GatewayEVM.sol @@ -382,6 +382,7 @@ contract GatewayEVM is /// @param amount Amount of tokens to transfer. function _transferFromToAssetHandler(address from, address token, uint256 amount) private { if (token == zetaToken) { + revert ZETANotSupported(); // transfer to connector // transfer amount to gateway IERC20(token).safeTransferFrom(from, address(this), amount); @@ -403,6 +404,7 @@ contract GatewayEVM is /// @param amount Amount of tokens to transfer. function _transferToAssetHandler(address token, uint256 amount) private { if (token == zetaToken) { + revert ZETANotSupported(); // transfer to connector // approve connector to handle tokens depending on connector version (eg. lock or burn) if (!IERC20(token).approve(zetaConnector, amount)) revert ApprovalFailed(); diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index e97d140d5..be3489379 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -455,17 +455,17 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR gateway.deposit(destination, amount, address(token), revertOptions); } - function testDepositZetaToConnector() public { - uint256 amount = 100_000; - zeta.approve(address(gateway), amount); + // function testDepositZetaToConnector() public { + // uint256 amount = 100_000; + // zeta.approve(address(gateway), amount); - vm.expectEmit(true, true, true, true, address(gateway)); - emit Deposited(owner, destination, amount, address(zeta), "", revertOptions); - gateway.deposit(destination, amount, address(zeta), revertOptions); + // vm.expectEmit(true, true, true, true, address(gateway)); + // emit Deposited(owner, destination, amount, address(zeta), "", revertOptions); + // gateway.deposit(destination, amount, address(zeta), revertOptions); - uint256 ownerAmountAfter = zeta.balanceOf(owner); - assertEq(ownerAmount - amount, ownerAmountAfter); - } + // uint256 ownerAmountAfter = zeta.balanceOf(owner); + // assertEq(ownerAmount - amount, ownerAmountAfter); + // } function testFailDepositERC20ToCustodyIfAmountIs0() public { uint256 amount = 0; diff --git a/v2/test/ZetaConnectorNative.t.sol b/v2/test/ZetaConnectorNative.t.sol index 8e1cff4fe..287de8e3f 100644 --- a/v2/test/ZetaConnectorNative.t.sol +++ b/v2/test/ZetaConnectorNative.t.sol @@ -239,75 +239,75 @@ contract ZetaConnectorNativeTest is zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); } - function testWithdrawAndCallReceiveNoParams() public { - uint256 amount = 100_000; - bytes32 internalSendHash = ""; - bytes memory data = abi.encodeWithSignature("receiveNoParams()"); - uint256 balanceBefore = zetaToken.balanceOf(destination); - assertEq(balanceBefore, 0); - uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - - bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); - vm.expectCall(address(zetaToken), 0, transferData); - vm.expectEmit(true, true, true, true, address(receiver)); - emit ReceivedNoParams(address(gateway)); - vm.expectEmit(true, true, true, true, address(zetaConnector)); - emit WithdrawnAndCalled(address(receiver), amount, data); - vm.prank(tssAddress); - zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); - - // Verify that the no tokens were transferred to the destination address - uint256 balanceAfter = zetaToken.balanceOf(destination); - assertEq(balanceAfter, 0); - - // Verify that zeta connector doesn't get more tokens - uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector); - - // Verify that the approval was reset - uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); - assertEq(allowance, 0); - - // Verify that gateway doesn't hold any tokens - uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); - assertEq(balanceGateway, 0); - } - - function testWithdrawAndCallReceiveERC20Partial() public { - uint256 amount = 100_000; - bytes32 internalSendHash = ""; - bytes memory data = abi.encodeWithSignature( - "receiveERC20Partial(uint256,address,address)", amount, address(zetaToken), destination - ); - uint256 balanceBefore = zetaToken.balanceOf(destination); - assertEq(balanceBefore, 0); - uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - - bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); - vm.expectCall(address(zetaToken), 0, transferData); - vm.expectEmit(true, true, true, true, address(receiver)); - emit ReceivedERC20(address(gateway), amount / 2, address(zetaToken), destination); - vm.expectEmit(true, true, true, true, address(zetaConnector)); - emit WithdrawnAndCalled(address(receiver), amount, data); - vm.prank(tssAddress); - zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); - - // Verify that the tokens were transferred to the destination address - uint256 balanceAfter = zetaToken.balanceOf(destination); - assertEq(balanceAfter, amount / 2); - - // Verify that zeta connector doesn't get more tokens - uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector - amount / 2); - - // Verify that the approval was reset - uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); - assertEq(allowance, 0); - - // Verify that gateway doesn't hold any tokens - uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); - assertEq(balanceGateway, 0); - } + // function testWithdrawAndCallReceiveNoParams() public { + // uint256 amount = 100_000; + // bytes32 internalSendHash = ""; + // bytes memory data = abi.encodeWithSignature("receiveNoParams()"); + // uint256 balanceBefore = zetaToken.balanceOf(destination); + // assertEq(balanceBefore, 0); + // uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + + // bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + // vm.expectCall(address(zetaToken), 0, transferData); + // vm.expectEmit(true, true, true, true, address(receiver)); + // emit ReceivedNoParams(address(gateway)); + // vm.expectEmit(true, true, true, true, address(zetaConnector)); + // emit WithdrawnAndCalled(address(receiver), amount, data); + // vm.prank(tssAddress); + // zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + + // // Verify that the no tokens were transferred to the destination address + // uint256 balanceAfter = zetaToken.balanceOf(destination); + // assertEq(balanceAfter, 0); + + // // Verify that zeta connector doesn't get more tokens + // uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + // assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector); + + // // Verify that the approval was reset + // uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + // assertEq(allowance, 0); + + // // Verify that gateway doesn't hold any tokens + // uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + // assertEq(balanceGateway, 0); + // } + + // function testWithdrawAndCallReceiveERC20Partial() public { + // uint256 amount = 100_000; + // bytes32 internalSendHash = ""; + // bytes memory data = abi.encodeWithSignature( + // "receiveERC20Partial(uint256,address,address)", amount, address(zetaToken), destination + // ); + // uint256 balanceBefore = zetaToken.balanceOf(destination); + // assertEq(balanceBefore, 0); + // uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + + // bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + // vm.expectCall(address(zetaToken), 0, transferData); + // vm.expectEmit(true, true, true, true, address(receiver)); + // emit ReceivedERC20(address(gateway), amount / 2, address(zetaToken), destination); + // vm.expectEmit(true, true, true, true, address(zetaConnector)); + // emit WithdrawnAndCalled(address(receiver), amount, data); + // vm.prank(tssAddress); + // zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + + // // Verify that the tokens were transferred to the destination address + // uint256 balanceAfter = zetaToken.balanceOf(destination); + // assertEq(balanceAfter, amount / 2); + + // // Verify that zeta connector doesn't get more tokens + // uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + // assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector - amount / 2); + + // // Verify that the approval was reset + // uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + // assertEq(allowance, 0); + + // // Verify that gateway doesn't hold any tokens + // uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + // assertEq(balanceGateway, 0); + // } function testWithdrawAndRevert() public { uint256 amount = 100_000; diff --git a/v2/test/ZetaConnectorNonNative.t.sol b/v2/test/ZetaConnectorNonNative.t.sol index 739f89485..bea5cfcac 100644 --- a/v2/test/ZetaConnectorNonNative.t.sol +++ b/v2/test/ZetaConnectorNonNative.t.sol @@ -200,79 +200,79 @@ contract ZetaConnectorNonNativeTest is zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); } - function testWithdrawAndCallReceiveNoParams() public { - uint256 amount = 100_000; - bytes32 internalSendHash = ""; - bytes memory data = abi.encodeWithSignature("receiveNoParams()"); - uint256 balanceBefore = zetaToken.balanceOf(destination); - assertEq(balanceBefore, 0); - uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - assertEq(balanceBeforeZetaConnector, 0); - - bytes memory mintData = - abi.encodeWithSignature("mint(address,uint256,bytes32)", address(gateway), amount, internalSendHash); - vm.expectCall(address(zetaToken), 0, mintData); - vm.expectEmit(true, true, true, true, address(receiver)); - emit ReceivedNoParams(address(gateway)); - vm.expectEmit(true, true, true, true, address(zetaConnector)); - emit WithdrawnAndCalled(address(receiver), amount, data); - vm.prank(tssAddress); - zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); - - // Verify that the no tokens were transferred to the destination address - uint256 balanceAfter = zetaToken.balanceOf(destination); - assertEq(balanceAfter, 0); - - // Verify that zeta connector doesn't hold any tokens - uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - assertEq(balanceAfterZetaConnector, 0); - - // Verify that the approval was reset - uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); - assertEq(allowance, 0); - - // Verify that gateway doesn't hold any tokens - uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); - assertEq(balanceGateway, 0); - } - - function testWithdrawAndCallReceiveERC20Partial() public { - uint256 amount = 100_000; - bytes32 internalSendHash = ""; - bytes memory data = abi.encodeWithSignature( - "receiveERC20Partial(uint256,address,address)", amount, address(zetaToken), destination - ); - uint256 balanceBefore = zetaToken.balanceOf(destination); - assertEq(balanceBefore, 0); - uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - assertEq(balanceBeforeZetaConnector, 0); - - bytes memory mintData = - abi.encodeWithSignature("mint(address,uint256,bytes32)", address(gateway), amount, internalSendHash); - vm.expectCall(address(zetaToken), 0, mintData); - vm.expectEmit(true, true, true, true, address(receiver)); - emit ReceivedERC20(address(gateway), amount / 2, address(zetaToken), destination); - vm.expectEmit(true, true, true, true, address(zetaConnector)); - emit WithdrawnAndCalled(address(receiver), amount, data); - vm.prank(tssAddress); - zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); - - // Verify that the tokens were transferred to the destination address - uint256 balanceAfter = zetaToken.balanceOf(destination); - assertEq(balanceAfter, amount / 2); - - // Verify that zeta connector doesn't hold any tokens - uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - assertEq(balanceAfterZetaConnector, 0); - - // Verify that the approval was reset - uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); - assertEq(allowance, 0); - - // Verify that gateway doesn't hold any tokens - uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); - assertEq(balanceGateway, 0); - } + // function testWithdrawAndCallReceiveNoParams() public { + // uint256 amount = 100_000; + // bytes32 internalSendHash = ""; + // bytes memory data = abi.encodeWithSignature("receiveNoParams()"); + // uint256 balanceBefore = zetaToken.balanceOf(destination); + // assertEq(balanceBefore, 0); + // uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + // assertEq(balanceBeforeZetaConnector, 0); + + // bytes memory mintData = + // abi.encodeWithSignature("mint(address,uint256,bytes32)", address(gateway), amount, internalSendHash); + // vm.expectCall(address(zetaToken), 0, mintData); + // vm.expectEmit(true, true, true, true, address(receiver)); + // emit ReceivedNoParams(address(gateway)); + // vm.expectEmit(true, true, true, true, address(zetaConnector)); + // emit WithdrawnAndCalled(address(receiver), amount, data); + // vm.prank(tssAddress); + // zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + + // // Verify that the no tokens were transferred to the destination address + // uint256 balanceAfter = zetaToken.balanceOf(destination); + // assertEq(balanceAfter, 0); + + // // Verify that zeta connector doesn't hold any tokens + // uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + // assertEq(balanceAfterZetaConnector, 0); + + // // Verify that the approval was reset + // uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + // assertEq(allowance, 0); + + // // Verify that gateway doesn't hold any tokens + // uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + // assertEq(balanceGateway, 0); + // } + + // function testWithdrawAndCallReceiveERC20Partial() public { + // uint256 amount = 100_000; + // bytes32 internalSendHash = ""; + // bytes memory data = abi.encodeWithSignature( + // "receiveERC20Partial(uint256,address,address)", amount, address(zetaToken), destination + // ); + // uint256 balanceBefore = zetaToken.balanceOf(destination); + // assertEq(balanceBefore, 0); + // uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + // assertEq(balanceBeforeZetaConnector, 0); + + // bytes memory mintData = + // abi.encodeWithSignature("mint(address,uint256,bytes32)", address(gateway), amount, internalSendHash); + // vm.expectCall(address(zetaToken), 0, mintData); + // vm.expectEmit(true, true, true, true, address(receiver)); + // emit ReceivedERC20(address(gateway), amount / 2, address(zetaToken), destination); + // vm.expectEmit(true, true, true, true, address(zetaConnector)); + // emit WithdrawnAndCalled(address(receiver), amount, data); + // vm.prank(tssAddress); + // zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + + // // Verify that the tokens were transferred to the destination address + // uint256 balanceAfter = zetaToken.balanceOf(destination); + // assertEq(balanceAfter, amount / 2); + + // // Verify that zeta connector doesn't hold any tokens + // uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + // assertEq(balanceAfterZetaConnector, 0); + + // // Verify that the approval was reset + // uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + // assertEq(allowance, 0); + + // // Verify that gateway doesn't hold any tokens + // uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + // assertEq(balanceGateway, 0); + // } function testWithdrawAndRevert() public { uint256 amount = 100_000; From 36ae34849c1c43f3f8ea7f39d3d4b54c8385f4b3 Mon Sep 17 00:00:00 2001 From: skosito Date: Tue, 15 Oct 2024 14:34:54 +0200 Subject: [PATCH 09/16] PR comment --- v2/contracts/zevm/GatewayZEVM.sol | 1 - v2/test/GatewayZEVM.t.sol | 164 +++++++++++++++--------------- 2 files changed, 82 insertions(+), 83 deletions(-) diff --git a/v2/contracts/zevm/GatewayZEVM.sol b/v2/contracts/zevm/GatewayZEVM.sol index 9115e3e06..787d02749 100644 --- a/v2/contracts/zevm/GatewayZEVM.sol +++ b/v2/contracts/zevm/GatewayZEVM.sol @@ -358,7 +358,6 @@ contract GatewayZEVM is onlyFungible whenNotPaused { - revert ZETANotSupported(); if (target == address(0)) revert ZeroAddress(); if (amount == 0) revert InsufficientZetaAmount(); if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); diff --git a/v2/test/GatewayZEVM.t.sol b/v2/test/GatewayZEVM.t.sol index 35fe0e89a..25ae20278 100644 --- a/v2/test/GatewayZEVM.t.sol +++ b/v2/test/GatewayZEVM.t.sol @@ -771,104 +771,104 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors gateway.depositAndRevert(address(zrc20), 1, address(gateway), revertContext); } - // function testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress() public { - // bytes memory message = abi.encode("hello"); - // zContext memory context = - // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + function testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress() public { + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - // vm.prank(fungibleModule); - // vm.expectRevert(ZeroAddress.selector); - // gateway.depositAndCall(context, 1, address(0), message); - // } + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + gateway.depositAndCall(context, 1, address(0), message); + } - // function testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero() public { - // bytes memory message = abi.encode("hello"); - // zContext memory context = - // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + function testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero() public { + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - // vm.prank(fungibleModule); - // vm.expectRevert(InsufficientZetaAmount.selector); - // gateway.depositAndCall(context, 0, address(zrc20), message); - // } + vm.prank(fungibleModule); + vm.expectRevert(InsufficientZetaAmount.selector); + gateway.depositAndCall(context, 0, address(zrc20), message); + } - // function testDepositZETAAndCallUniversalContractFailsIfZeroAddress() public { - // uint256 amount = 1; - // uint256 fungibleBalanceBefore = zetaToken.balanceOf(fungibleModule); - // uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); - // uint256 destinationBalanceBefore = address(testUniversalContract).balance; - // bytes memory message = abi.encode("hello"); - // zContext memory context = - // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + function testDepositZETAAndCallUniversalContractFailsIfZeroAddress() public { + uint256 amount = 1; + uint256 fungibleBalanceBefore = zetaToken.balanceOf(fungibleModule); + uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); + uint256 destinationBalanceBefore = address(testUniversalContract).balance; + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - // vm.prank(fungibleModule); - // vm.expectRevert(ZeroAddress.selector); - // gateway.depositAndCall(context, 1, address(0), message); - // } + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + gateway.depositAndCall(context, 1, address(0), message); + } - // function testDepositZETAAndCallUniversal() public { - // bytes memory message = abi.encode("hello"); - // zContext memory context = - // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + function testDepositZETAAndCallUniversal() public { + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - // vm.prank(fungibleModule); - // vm.expectRevert(ZeroAddress.selector); - // gateway.depositAndCall(context, 1, address(0), message); - // } + vm.prank(fungibleModule); + vm.expectRevert(ZeroAddress.selector); + gateway.depositAndCall(context, 1, address(0), message); + } - // function testDepositZETAAndCallUniversalContract() public { - // uint256 amount = 1; - // uint256 fungibleBalanceBefore = zetaToken.balanceOf(fungibleModule); - // uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); - // uint256 destinationBalanceBefore = address(testUniversalContract).balance; - // bytes memory message = abi.encode("hello"); - // zContext memory context = - // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + function testDepositZETAAndCallUniversalContract() public { + uint256 amount = 1; + uint256 fungibleBalanceBefore = zetaToken.balanceOf(fungibleModule); + uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); + uint256 destinationBalanceBefore = address(testUniversalContract).balance; + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - // vm.expectEmit(true, true, true, true, address(testUniversalContract)); - // emit ContextData(abi.encodePacked(gateway), fungibleModule, amount, address(gateway), "hello"); - // vm.prank(fungibleModule); - // gateway.depositAndCall(context, amount, address(testUniversalContract), message); + vm.expectEmit(true, true, true, true, address(testUniversalContract)); + emit ContextData(abi.encodePacked(gateway), fungibleModule, amount, address(gateway), "hello"); + vm.prank(fungibleModule); + gateway.depositAndCall(context, amount, address(testUniversalContract), message); - // uint256 fungibleBalanceAfter = zetaToken.balanceOf(fungibleModule); - // assertEq(fungibleBalanceBefore - amount, fungibleBalanceAfter); + uint256 fungibleBalanceAfter = zetaToken.balanceOf(fungibleModule); + assertEq(fungibleBalanceBefore - amount, fungibleBalanceAfter); - // uint256 gatewayBalanceAfter = zetaToken.balanceOf(address(gateway)); - // assertEq(gatewayBalanceBefore, gatewayBalanceAfter); + uint256 gatewayBalanceAfter = zetaToken.balanceOf(address(gateway)); + assertEq(gatewayBalanceBefore, gatewayBalanceAfter); - // // Verify amount is transfered to destination - // assertEq(destinationBalanceBefore + amount, address(testUniversalContract).balance); - // } + // Verify amount is transfered to destination + assertEq(destinationBalanceBefore + amount, address(testUniversalContract).balance); + } - // function testDepositZETAAndCallUniversalContractFailsIfSenderIsNotFungibleModule() public { - // uint256 amount = 1; - // bytes memory message = abi.encode("hello"); - // zContext memory context = - // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + function testDepositZETAAndCallUniversalContractFailsIfSenderIsNotFungibleModule() public { + uint256 amount = 1; + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - // vm.expectRevert(CallerIsNotFungibleModule.selector); - // vm.prank(owner); - // gateway.depositAndCall(context, amount, address(testUniversalContract), message); - // } + vm.expectRevert(CallerIsNotFungibleModule.selector); + vm.prank(owner); + gateway.depositAndCall(context, amount, address(testUniversalContract), message); + } - // function testDepositZETAAndCallUniversalContractFailsIfTargetIsFungibleModule() public { - // uint256 amount = 1; - // bytes memory message = abi.encode("hello"); - // zContext memory context = - // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + function testDepositZETAAndCallUniversalContractFailsIfTargetIsFungibleModule() public { + uint256 amount = 1; + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - // vm.expectRevert(InvalidTarget.selector); - // vm.prank(fungibleModule); - // gateway.depositAndCall(context, amount, fungibleModule, message); - // } + vm.expectRevert(InvalidTarget.selector); + vm.prank(fungibleModule); + gateway.depositAndCall(context, amount, fungibleModule, message); + } - // function testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway() public { - // uint256 amount = 1; - // bytes memory message = abi.encode("hello"); - // zContext memory context = - // zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + function testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway() public { + uint256 amount = 1; + bytes memory message = abi.encode("hello"); + zContext memory context = + zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); - // vm.expectRevert(InvalidTarget.selector); - // vm.prank(fungibleModule); - // gateway.depositAndCall(context, amount, address(gateway), message); - // } + vm.expectRevert(InvalidTarget.selector); + vm.prank(fungibleModule); + gateway.depositAndCall(context, amount, address(gateway), message); + } } From 8aaf5fd7ac3419289cfdf6403fb1f67fb5d81ef7 Mon Sep 17 00:00:00 2001 From: skosito Date: Tue, 15 Oct 2024 15:44:34 +0200 Subject: [PATCH 10/16] PR comment --- v2/contracts/evm/GatewayEVM.sol | 1 - v2/test/ZetaConnectorNative.t.sol | 138 ++++++++++++------------- v2/test/ZetaConnectorNonNative.t.sol | 146 +++++++++++++-------------- 3 files changed, 142 insertions(+), 143 deletions(-) diff --git a/v2/contracts/evm/GatewayEVM.sol b/v2/contracts/evm/GatewayEVM.sol index c54d7a282..bc6eda26f 100644 --- a/v2/contracts/evm/GatewayEVM.sol +++ b/v2/contracts/evm/GatewayEVM.sol @@ -404,7 +404,6 @@ contract GatewayEVM is /// @param amount Amount of tokens to transfer. function _transferToAssetHandler(address token, uint256 amount) private { if (token == zetaToken) { - revert ZETANotSupported(); // transfer to connector // approve connector to handle tokens depending on connector version (eg. lock or burn) if (!IERC20(token).approve(zetaConnector, amount)) revert ApprovalFailed(); diff --git a/v2/test/ZetaConnectorNative.t.sol b/v2/test/ZetaConnectorNative.t.sol index 287de8e3f..8e1cff4fe 100644 --- a/v2/test/ZetaConnectorNative.t.sol +++ b/v2/test/ZetaConnectorNative.t.sol @@ -239,75 +239,75 @@ contract ZetaConnectorNativeTest is zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); } - // function testWithdrawAndCallReceiveNoParams() public { - // uint256 amount = 100_000; - // bytes32 internalSendHash = ""; - // bytes memory data = abi.encodeWithSignature("receiveNoParams()"); - // uint256 balanceBefore = zetaToken.balanceOf(destination); - // assertEq(balanceBefore, 0); - // uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - - // bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); - // vm.expectCall(address(zetaToken), 0, transferData); - // vm.expectEmit(true, true, true, true, address(receiver)); - // emit ReceivedNoParams(address(gateway)); - // vm.expectEmit(true, true, true, true, address(zetaConnector)); - // emit WithdrawnAndCalled(address(receiver), amount, data); - // vm.prank(tssAddress); - // zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); - - // // Verify that the no tokens were transferred to the destination address - // uint256 balanceAfter = zetaToken.balanceOf(destination); - // assertEq(balanceAfter, 0); - - // // Verify that zeta connector doesn't get more tokens - // uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - // assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector); - - // // Verify that the approval was reset - // uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); - // assertEq(allowance, 0); - - // // Verify that gateway doesn't hold any tokens - // uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); - // assertEq(balanceGateway, 0); - // } - - // function testWithdrawAndCallReceiveERC20Partial() public { - // uint256 amount = 100_000; - // bytes32 internalSendHash = ""; - // bytes memory data = abi.encodeWithSignature( - // "receiveERC20Partial(uint256,address,address)", amount, address(zetaToken), destination - // ); - // uint256 balanceBefore = zetaToken.balanceOf(destination); - // assertEq(balanceBefore, 0); - // uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - - // bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); - // vm.expectCall(address(zetaToken), 0, transferData); - // vm.expectEmit(true, true, true, true, address(receiver)); - // emit ReceivedERC20(address(gateway), amount / 2, address(zetaToken), destination); - // vm.expectEmit(true, true, true, true, address(zetaConnector)); - // emit WithdrawnAndCalled(address(receiver), amount, data); - // vm.prank(tssAddress); - // zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); - - // // Verify that the tokens were transferred to the destination address - // uint256 balanceAfter = zetaToken.balanceOf(destination); - // assertEq(balanceAfter, amount / 2); - - // // Verify that zeta connector doesn't get more tokens - // uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - // assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector - amount / 2); - - // // Verify that the approval was reset - // uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); - // assertEq(allowance, 0); - - // // Verify that gateway doesn't hold any tokens - // uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); - // assertEq(balanceGateway, 0); - // } + function testWithdrawAndCallReceiveNoParams() public { + uint256 amount = 100_000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodeWithSignature("receiveNoParams()"); + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(zetaToken), 0, transferData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedNoParams(address(gateway)); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit WithdrawnAndCalled(address(receiver), amount, data); + vm.prank(tssAddress); + zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + + // Verify that the no tokens were transferred to the destination address + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, 0); + + // Verify that zeta connector doesn't get more tokens + uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector); + + // Verify that the approval was reset + uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testWithdrawAndCallReceiveERC20Partial() public { + uint256 amount = 100_000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodeWithSignature( + "receiveERC20Partial(uint256,address,address)", amount, address(zetaToken), destination + ); + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(zetaToken), 0, transferData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedERC20(address(gateway), amount / 2, address(zetaToken), destination); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit WithdrawnAndCalled(address(receiver), amount, data); + vm.prank(tssAddress); + zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + + // Verify that the tokens were transferred to the destination address + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, amount / 2); + + // Verify that zeta connector doesn't get more tokens + uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector - amount / 2); + + // Verify that the approval was reset + uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } function testWithdrawAndRevert() public { uint256 amount = 100_000; diff --git a/v2/test/ZetaConnectorNonNative.t.sol b/v2/test/ZetaConnectorNonNative.t.sol index bea5cfcac..739f89485 100644 --- a/v2/test/ZetaConnectorNonNative.t.sol +++ b/v2/test/ZetaConnectorNonNative.t.sol @@ -200,79 +200,79 @@ contract ZetaConnectorNonNativeTest is zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); } - // function testWithdrawAndCallReceiveNoParams() public { - // uint256 amount = 100_000; - // bytes32 internalSendHash = ""; - // bytes memory data = abi.encodeWithSignature("receiveNoParams()"); - // uint256 balanceBefore = zetaToken.balanceOf(destination); - // assertEq(balanceBefore, 0); - // uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - // assertEq(balanceBeforeZetaConnector, 0); - - // bytes memory mintData = - // abi.encodeWithSignature("mint(address,uint256,bytes32)", address(gateway), amount, internalSendHash); - // vm.expectCall(address(zetaToken), 0, mintData); - // vm.expectEmit(true, true, true, true, address(receiver)); - // emit ReceivedNoParams(address(gateway)); - // vm.expectEmit(true, true, true, true, address(zetaConnector)); - // emit WithdrawnAndCalled(address(receiver), amount, data); - // vm.prank(tssAddress); - // zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); - - // // Verify that the no tokens were transferred to the destination address - // uint256 balanceAfter = zetaToken.balanceOf(destination); - // assertEq(balanceAfter, 0); - - // // Verify that zeta connector doesn't hold any tokens - // uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - // assertEq(balanceAfterZetaConnector, 0); - - // // Verify that the approval was reset - // uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); - // assertEq(allowance, 0); - - // // Verify that gateway doesn't hold any tokens - // uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); - // assertEq(balanceGateway, 0); - // } - - // function testWithdrawAndCallReceiveERC20Partial() public { - // uint256 amount = 100_000; - // bytes32 internalSendHash = ""; - // bytes memory data = abi.encodeWithSignature( - // "receiveERC20Partial(uint256,address,address)", amount, address(zetaToken), destination - // ); - // uint256 balanceBefore = zetaToken.balanceOf(destination); - // assertEq(balanceBefore, 0); - // uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - // assertEq(balanceBeforeZetaConnector, 0); - - // bytes memory mintData = - // abi.encodeWithSignature("mint(address,uint256,bytes32)", address(gateway), amount, internalSendHash); - // vm.expectCall(address(zetaToken), 0, mintData); - // vm.expectEmit(true, true, true, true, address(receiver)); - // emit ReceivedERC20(address(gateway), amount / 2, address(zetaToken), destination); - // vm.expectEmit(true, true, true, true, address(zetaConnector)); - // emit WithdrawnAndCalled(address(receiver), amount, data); - // vm.prank(tssAddress); - // zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); - - // // Verify that the tokens were transferred to the destination address - // uint256 balanceAfter = zetaToken.balanceOf(destination); - // assertEq(balanceAfter, amount / 2); - - // // Verify that zeta connector doesn't hold any tokens - // uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); - // assertEq(balanceAfterZetaConnector, 0); - - // // Verify that the approval was reset - // uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); - // assertEq(allowance, 0); - - // // Verify that gateway doesn't hold any tokens - // uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); - // assertEq(balanceGateway, 0); - // } + function testWithdrawAndCallReceiveNoParams() public { + uint256 amount = 100_000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodeWithSignature("receiveNoParams()"); + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceBeforeZetaConnector, 0); + + bytes memory mintData = + abi.encodeWithSignature("mint(address,uint256,bytes32)", address(gateway), amount, internalSendHash); + vm.expectCall(address(zetaToken), 0, mintData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedNoParams(address(gateway)); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit WithdrawnAndCalled(address(receiver), amount, data); + vm.prank(tssAddress); + zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + + // Verify that the no tokens were transferred to the destination address + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, 0); + + // Verify that zeta connector doesn't hold any tokens + uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceAfterZetaConnector, 0); + + // Verify that the approval was reset + uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testWithdrawAndCallReceiveERC20Partial() public { + uint256 amount = 100_000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodeWithSignature( + "receiveERC20Partial(uint256,address,address)", amount, address(zetaToken), destination + ); + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceBeforeZetaConnector, 0); + + bytes memory mintData = + abi.encodeWithSignature("mint(address,uint256,bytes32)", address(gateway), amount, internalSendHash); + vm.expectCall(address(zetaToken), 0, mintData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedERC20(address(gateway), amount / 2, address(zetaToken), destination); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit WithdrawnAndCalled(address(receiver), amount, data); + vm.prank(tssAddress); + zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + + // Verify that the tokens were transferred to the destination address + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, amount / 2); + + // Verify that zeta connector doesn't hold any tokens + uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceAfterZetaConnector, 0); + + // Verify that the approval was reset + uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } function testWithdrawAndRevert() public { uint256 amount = 100_000; From c3cf7bd27dd8a1e29d9c8c0cf4a5b8b28d6fa7b3 Mon Sep 17 00:00:00 2001 From: skosito Date: Tue, 15 Oct 2024 20:01:29 +0200 Subject: [PATCH 11/16] generate --- v2/pkg/accesscontrol.sol/accesscontrol.go | 854 --- v2/pkg/erc165.sol/erc165.go | 212 - v2/pkg/erc20custody.sol/erc20custody.go | 429 +- v2/pkg/erc20custody.t.sol/erc20custodytest.go | 264 +- .../erc20custodyechidnatest.go | 2547 +------- .../erc20custodyupgradetest.go | 3180 ++++++++++ v2/pkg/gatewayevm.sol/gatewayevm.go | 55 +- .../gatewayevm.t.sol/gatewayevminboundtest.go | 106 +- v2/pkg/gatewayevm.t.sol/gatewayevmtest.go | 235 +- .../gatewayevmechidnatest.go | 2922 +-------- .../gatewayevmuupsupgradetest.go | 5342 ----------------- .../gatewayevmupgradetest.go | 107 +- .../gatewayevmzevmtest.go | 43 +- v2/pkg/gatewayzevm.sol/gatewayzevm.go | 30 +- .../gatewayzevminboundtest.go | 336 +- .../gatewayzevmoutboundtest.go | 18 +- .../gatewayzevmupgradetest.go | 2477 ++++++++ v2/pkg/ierc20custody.sol/ierc20custody.go | 41 +- .../ierc20custody.sol/ierc20custodyevents.go | 29 +- v2/pkg/igatewayevm.sol/igatewayevm.go | 53 +- v2/pkg/igatewayevm.sol/igatewayevmevents.go | 29 +- v2/pkg/igatewayzevm.sol/igatewayzevm.go | 28 +- v2/pkg/ireceiverevm.sol/ireceiverevmevents.go | 16 +- .../izetaconnectorevents.go | 29 +- v2/pkg/pausable.sol/pausable.go | 480 -- v2/pkg/receiverevm.sol/receiverevm.go | 30 +- v2/pkg/revert.sol/inotsupportedmethods.go | 181 + v2/pkg/revert.sol/revertable.go | 16 +- v2/pkg/senderzevm.sol/senderzevm.go | 2 +- v2/pkg/systemcontract.sol/systemcontract.go | 2 +- .../systemcontractmock.go | 2 +- .../testuniversalcontract.go | 30 +- .../universalcontract.go | 16 +- .../zetaconnectorbase.go | 423 +- .../zetaconnectornative.go | 429 +- .../zetaconnectornativetest.go | 234 +- .../zetaconnectornativeupgradetest.go | 2615 ++++++++ .../zetaconnectornonnative.go | 429 +- .../zetaconnectornonnativetest.go | 234 +- .../zetaconnectornonnativeupgradetest.go | 2801 +++++++++ v2/pkg/zrc20.t.sol/zrc20test.go | 2 +- v2/types/ERC20Custody.ts | 141 +- v2/types/ERC20CustodyUpgradeTest.ts | 1133 ++++ v2/types/GatewayEVM.ts | 10 +- v2/types/GatewayEVMUpgradeTest.ts | 42 +- v2/types/GatewayZEVMUpgradeTest.ts | 1169 ++++ v2/types/IERC20Custody.sol/IERC20Custody.ts | 10 +- .../IERC20Custody.sol/IERC20CustodyEvents.ts | 10 +- v2/types/IGatewayEVM.sol/IGatewayEVM.ts | 10 +- v2/types/IGatewayEVM.sol/IGatewayEVMEvents.ts | 10 +- .../IZetaConnectorEvents.ts | 10 +- v2/types/Revert.sol/INotSupportedMethods.ts | 69 + v2/types/Revert.sol/index.ts | 1 + v2/types/ZetaConnectorBase.ts | 151 +- v2/types/ZetaConnectorNative.ts | 151 +- v2/types/ZetaConnectorNativeUpgradeTest.ts | 937 +++ v2/types/ZetaConnectorNonNative.ts | 151 +- v2/types/ZetaConnectorNonNativeUpgradeTest.ts | 994 +++ .../ERC20CustodyUpgradeTest__factory.ts | 1043 ++++ v2/types/factories/ERC20Custody__factory.ts | 201 +- .../GatewayEVMUpgradeTest__factory.ts | 46 +- v2/types/factories/GatewayEVM__factory.ts | 30 +- .../GatewayZEVMUpgradeTest__factory.ts | 1444 +++++ v2/types/factories/GatewayZEVM__factory.ts | 20 +- .../IERC20CustodyEvents__factory.ts | 10 +- .../IERC20Custody__factory.ts | 14 +- .../IGatewayEVMEvents__factory.ts | 10 +- .../IGatewayEVM.sol/IGatewayEVM__factory.ts | 18 +- .../IGatewayZEVM.sol/IGatewayZEVM__factory.ts | 8 +- .../IReceiverEVMEvents__factory.ts | 4 +- .../IZetaConnectorEvents__factory.ts | 10 +- v2/types/factories/ReceiverEVM__factory.ts | 10 +- .../INotSupportedMethods__factory.ts | 39 + .../Revert.sol/Revertable__factory.ts | 4 +- v2/types/factories/Revert.sol/index.ts | 1 + v2/types/factories/SenderZEVM__factory.ts | 2 +- .../SystemContract__factory.ts | 2 +- .../SystemContractMock__factory.ts | 2 +- .../TestUniversalContract__factory.ts | 10 +- .../UniversalContract__factory.ts | 4 +- .../factories/ZetaConnectorBase__factory.ts | 170 +- ...ZetaConnectorNativeUpgradeTest__factory.ts | 884 +++ .../factories/ZetaConnectorNative__factory.ts | 217 +- ...aConnectorNonNativeUpgradeTest__factory.ts | 906 +++ .../ZetaConnectorNonNative__factory.ts | 233 +- v2/types/factories/index.ts | 9 +- v2/types/index.ts | 20 +- 87 files changed, 24354 insertions(+), 13324 deletions(-) delete mode 100644 v2/pkg/accesscontrol.sol/accesscontrol.go delete mode 100644 v2/pkg/erc165.sol/erc165.go create mode 100644 v2/pkg/erc20custodyupgradetest.sol/erc20custodyupgradetest.go delete mode 100644 v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go create mode 100644 v2/pkg/gatewayzevmupgradetest.sol/gatewayzevmupgradetest.go delete mode 100644 v2/pkg/pausable.sol/pausable.go create mode 100644 v2/pkg/revert.sol/inotsupportedmethods.go create mode 100644 v2/pkg/zetaconnectornativeupgradetest.sol/zetaconnectornativeupgradetest.go create mode 100644 v2/pkg/zetaconnectornonnativeupgradetest.sol/zetaconnectornonnativeupgradetest.go create mode 100644 v2/types/ERC20CustodyUpgradeTest.ts create mode 100644 v2/types/GatewayZEVMUpgradeTest.ts create mode 100644 v2/types/Revert.sol/INotSupportedMethods.ts create mode 100644 v2/types/ZetaConnectorNativeUpgradeTest.ts create mode 100644 v2/types/ZetaConnectorNonNativeUpgradeTest.ts create mode 100644 v2/types/factories/ERC20CustodyUpgradeTest__factory.ts create mode 100644 v2/types/factories/GatewayZEVMUpgradeTest__factory.ts create mode 100644 v2/types/factories/Revert.sol/INotSupportedMethods__factory.ts create mode 100644 v2/types/factories/ZetaConnectorNativeUpgradeTest__factory.ts create mode 100644 v2/types/factories/ZetaConnectorNonNativeUpgradeTest__factory.ts diff --git a/v2/pkg/accesscontrol.sol/accesscontrol.go b/v2/pkg/accesscontrol.sol/accesscontrol.go deleted file mode 100644 index 9e7c48d6e..000000000 --- a/v2/pkg/accesscontrol.sol/accesscontrol.go +++ /dev/null @@ -1,854 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package accesscontrol - -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 - _ = abi.ConvertType -) - -// AccessControlMetaData contains all meta data concerning the AccessControl contract. -var AccessControlMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}]", -} - -// AccessControlABI is the input ABI used to generate the binding from. -// Deprecated: Use AccessControlMetaData.ABI instead. -var AccessControlABI = AccessControlMetaData.ABI - -// AccessControl is an auto generated Go binding around an Ethereum contract. -type AccessControl struct { - AccessControlCaller // Read-only binding to the contract - AccessControlTransactor // Write-only binding to the contract - AccessControlFilterer // Log filterer for contract events -} - -// AccessControlCaller is an auto generated read-only Go binding around an Ethereum contract. -type AccessControlCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AccessControlTransactor is an auto generated write-only Go binding around an Ethereum contract. -type AccessControlTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AccessControlFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type AccessControlFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AccessControlSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type AccessControlSession struct { - Contract *AccessControl // 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 -} - -// AccessControlCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type AccessControlCallerSession struct { - Contract *AccessControlCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// AccessControlTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type AccessControlTransactorSession struct { - Contract *AccessControlTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// AccessControlRaw is an auto generated low-level Go binding around an Ethereum contract. -type AccessControlRaw struct { - Contract *AccessControl // Generic contract binding to access the raw methods on -} - -// AccessControlCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type AccessControlCallerRaw struct { - Contract *AccessControlCaller // Generic read-only contract binding to access the raw methods on -} - -// AccessControlTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type AccessControlTransactorRaw struct { - Contract *AccessControlTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewAccessControl creates a new instance of AccessControl, bound to a specific deployed contract. -func NewAccessControl(address common.Address, backend bind.ContractBackend) (*AccessControl, error) { - contract, err := bindAccessControl(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &AccessControl{AccessControlCaller: AccessControlCaller{contract: contract}, AccessControlTransactor: AccessControlTransactor{contract: contract}, AccessControlFilterer: AccessControlFilterer{contract: contract}}, nil -} - -// NewAccessControlCaller creates a new read-only instance of AccessControl, bound to a specific deployed contract. -func NewAccessControlCaller(address common.Address, caller bind.ContractCaller) (*AccessControlCaller, error) { - contract, err := bindAccessControl(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &AccessControlCaller{contract: contract}, nil -} - -// NewAccessControlTransactor creates a new write-only instance of AccessControl, bound to a specific deployed contract. -func NewAccessControlTransactor(address common.Address, transactor bind.ContractTransactor) (*AccessControlTransactor, error) { - contract, err := bindAccessControl(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &AccessControlTransactor{contract: contract}, nil -} - -// NewAccessControlFilterer creates a new log filterer instance of AccessControl, bound to a specific deployed contract. -func NewAccessControlFilterer(address common.Address, filterer bind.ContractFilterer) (*AccessControlFilterer, error) { - contract, err := bindAccessControl(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &AccessControlFilterer{contract: contract}, nil -} - -// bindAccessControl binds a generic wrapper to an already deployed contract. -func bindAccessControl(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := AccessControlMetaData.GetAbi() - 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 (_AccessControl *AccessControlRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _AccessControl.Contract.AccessControlCaller.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 (_AccessControl *AccessControlRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AccessControl.Contract.AccessControlTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_AccessControl *AccessControlRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _AccessControl.Contract.AccessControlTransactor.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 (_AccessControl *AccessControlCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _AccessControl.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 (_AccessControl *AccessControlTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AccessControl.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_AccessControl *AccessControlTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _AccessControl.Contract.contract.Transact(opts, method, params...) -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_AccessControl *AccessControlCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _AccessControl.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_AccessControl *AccessControlSession) DEFAULTADMINROLE() ([32]byte, error) { - return _AccessControl.Contract.DEFAULTADMINROLE(&_AccessControl.CallOpts) -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_AccessControl *AccessControlCallerSession) DEFAULTADMINROLE() ([32]byte, error) { - return _AccessControl.Contract.DEFAULTADMINROLE(&_AccessControl.CallOpts) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_AccessControl *AccessControlCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { - var out []interface{} - err := _AccessControl.contract.Call(opts, &out, "getRoleAdmin", role) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_AccessControl *AccessControlSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _AccessControl.Contract.GetRoleAdmin(&_AccessControl.CallOpts, role) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_AccessControl *AccessControlCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _AccessControl.Contract.GetRoleAdmin(&_AccessControl.CallOpts, role) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_AccessControl *AccessControlCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { - var out []interface{} - err := _AccessControl.contract.Call(opts, &out, "hasRole", role, account) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_AccessControl *AccessControlSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _AccessControl.Contract.HasRole(&_AccessControl.CallOpts, role, account) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_AccessControl *AccessControlCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _AccessControl.Contract.HasRole(&_AccessControl.CallOpts, role, account) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_AccessControl *AccessControlCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { - var out []interface{} - err := _AccessControl.contract.Call(opts, &out, "supportsInterface", interfaceId) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_AccessControl *AccessControlSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _AccessControl.Contract.SupportsInterface(&_AccessControl.CallOpts, interfaceId) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_AccessControl *AccessControlCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _AccessControl.Contract.SupportsInterface(&_AccessControl.CallOpts, interfaceId) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_AccessControl *AccessControlTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _AccessControl.contract.Transact(opts, "grantRole", role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_AccessControl *AccessControlSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _AccessControl.Contract.GrantRole(&_AccessControl.TransactOpts, role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_AccessControl *AccessControlTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _AccessControl.Contract.GrantRole(&_AccessControl.TransactOpts, role, account) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_AccessControl *AccessControlTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _AccessControl.contract.Transact(opts, "renounceRole", role, callerConfirmation) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_AccessControl *AccessControlSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _AccessControl.Contract.RenounceRole(&_AccessControl.TransactOpts, role, callerConfirmation) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_AccessControl *AccessControlTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _AccessControl.Contract.RenounceRole(&_AccessControl.TransactOpts, role, callerConfirmation) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_AccessControl *AccessControlTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _AccessControl.contract.Transact(opts, "revokeRole", role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_AccessControl *AccessControlSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _AccessControl.Contract.RevokeRole(&_AccessControl.TransactOpts, role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_AccessControl *AccessControlTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _AccessControl.Contract.RevokeRole(&_AccessControl.TransactOpts, role, account) -} - -// AccessControlRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the AccessControl contract. -type AccessControlRoleAdminChangedIterator struct { - Event *AccessControlRoleAdminChanged // 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 *AccessControlRoleAdminChangedIterator) 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(AccessControlRoleAdminChanged) - 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(AccessControlRoleAdminChanged) - 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 *AccessControlRoleAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AccessControlRoleAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AccessControlRoleAdminChanged represents a RoleAdminChanged event raised by the AccessControl contract. -type AccessControlRoleAdminChanged struct { - Role [32]byte - PreviousAdminRole [32]byte - NewAdminRole [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_AccessControl *AccessControlFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*AccessControlRoleAdminChangedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) - } - - logs, sub, err := _AccessControl.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) - if err != nil { - return nil, err - } - return &AccessControlRoleAdminChangedIterator{contract: _AccessControl.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil -} - -// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_AccessControl *AccessControlFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *AccessControlRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) - } - - logs, sub, err := _AccessControl.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) - 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(AccessControlRoleAdminChanged) - if err := _AccessControl.contract.UnpackLog(event, "RoleAdminChanged", 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 -} - -// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_AccessControl *AccessControlFilterer) ParseRoleAdminChanged(log types.Log) (*AccessControlRoleAdminChanged, error) { - event := new(AccessControlRoleAdminChanged) - if err := _AccessControl.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AccessControlRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the AccessControl contract. -type AccessControlRoleGrantedIterator struct { - Event *AccessControlRoleGranted // 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 *AccessControlRoleGrantedIterator) 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(AccessControlRoleGranted) - 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(AccessControlRoleGranted) - 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 *AccessControlRoleGrantedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AccessControlRoleGrantedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AccessControlRoleGranted represents a RoleGranted event raised by the AccessControl contract. -type AccessControlRoleGranted struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_AccessControl *AccessControlFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*AccessControlRoleGrantedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _AccessControl.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return &AccessControlRoleGrantedIterator{contract: _AccessControl.contract, event: "RoleGranted", logs: logs, sub: sub}, nil -} - -// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_AccessControl *AccessControlFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *AccessControlRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _AccessControl.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) - 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(AccessControlRoleGranted) - if err := _AccessControl.contract.UnpackLog(event, "RoleGranted", 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 -} - -// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_AccessControl *AccessControlFilterer) ParseRoleGranted(log types.Log) (*AccessControlRoleGranted, error) { - event := new(AccessControlRoleGranted) - if err := _AccessControl.contract.UnpackLog(event, "RoleGranted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AccessControlRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the AccessControl contract. -type AccessControlRoleRevokedIterator struct { - Event *AccessControlRoleRevoked // 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 *AccessControlRoleRevokedIterator) 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(AccessControlRoleRevoked) - 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(AccessControlRoleRevoked) - 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 *AccessControlRoleRevokedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AccessControlRoleRevokedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AccessControlRoleRevoked represents a RoleRevoked event raised by the AccessControl contract. -type AccessControlRoleRevoked struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_AccessControl *AccessControlFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*AccessControlRoleRevokedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _AccessControl.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return &AccessControlRoleRevokedIterator{contract: _AccessControl.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil -} - -// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_AccessControl *AccessControlFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *AccessControlRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _AccessControl.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) - 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(AccessControlRoleRevoked) - if err := _AccessControl.contract.UnpackLog(event, "RoleRevoked", 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 -} - -// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_AccessControl *AccessControlFilterer) ParseRoleRevoked(log types.Log) (*AccessControlRoleRevoked, error) { - event := new(AccessControlRoleRevoked) - if err := _AccessControl.contract.UnpackLog(event, "RoleRevoked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/v2/pkg/erc165.sol/erc165.go b/v2/pkg/erc165.sol/erc165.go deleted file mode 100644 index 425bf6e0f..000000000 --- a/v2/pkg/erc165.sol/erc165.go +++ /dev/null @@ -1,212 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package erc165 - -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 - _ = abi.ConvertType -) - -// ERC165MetaData contains all meta data concerning the ERC165 contract. -var ERC165MetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"}]", -} - -// ERC165ABI is the input ABI used to generate the binding from. -// Deprecated: Use ERC165MetaData.ABI instead. -var ERC165ABI = ERC165MetaData.ABI - -// ERC165 is an auto generated Go binding around an Ethereum contract. -type ERC165 struct { - ERC165Caller // Read-only binding to the contract - ERC165Transactor // Write-only binding to the contract - ERC165Filterer // Log filterer for contract events -} - -// ERC165Caller is an auto generated read-only Go binding around an Ethereum contract. -type ERC165Caller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ERC165Transactor is an auto generated write-only Go binding around an Ethereum contract. -type ERC165Transactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ERC165Filterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ERC165Filterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ERC165Session is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ERC165Session struct { - Contract *ERC165 // 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 -} - -// ERC165CallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ERC165CallerSession struct { - Contract *ERC165Caller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ERC165TransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ERC165TransactorSession struct { - Contract *ERC165Transactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ERC165Raw is an auto generated low-level Go binding around an Ethereum contract. -type ERC165Raw struct { - Contract *ERC165 // Generic contract binding to access the raw methods on -} - -// ERC165CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ERC165CallerRaw struct { - Contract *ERC165Caller // Generic read-only contract binding to access the raw methods on -} - -// ERC165TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ERC165TransactorRaw struct { - Contract *ERC165Transactor // Generic write-only contract binding to access the raw methods on -} - -// NewERC165 creates a new instance of ERC165, bound to a specific deployed contract. -func NewERC165(address common.Address, backend bind.ContractBackend) (*ERC165, error) { - contract, err := bindERC165(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ERC165{ERC165Caller: ERC165Caller{contract: contract}, ERC165Transactor: ERC165Transactor{contract: contract}, ERC165Filterer: ERC165Filterer{contract: contract}}, nil -} - -// NewERC165Caller creates a new read-only instance of ERC165, bound to a specific deployed contract. -func NewERC165Caller(address common.Address, caller bind.ContractCaller) (*ERC165Caller, error) { - contract, err := bindERC165(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ERC165Caller{contract: contract}, nil -} - -// NewERC165Transactor creates a new write-only instance of ERC165, bound to a specific deployed contract. -func NewERC165Transactor(address common.Address, transactor bind.ContractTransactor) (*ERC165Transactor, error) { - contract, err := bindERC165(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ERC165Transactor{contract: contract}, nil -} - -// NewERC165Filterer creates a new log filterer instance of ERC165, bound to a specific deployed contract. -func NewERC165Filterer(address common.Address, filterer bind.ContractFilterer) (*ERC165Filterer, error) { - contract, err := bindERC165(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ERC165Filterer{contract: contract}, nil -} - -// bindERC165 binds a generic wrapper to an already deployed contract. -func bindERC165(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ERC165MetaData.GetAbi() - 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 (_ERC165 *ERC165Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ERC165.Contract.ERC165Caller.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 (_ERC165 *ERC165Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ERC165.Contract.ERC165Transactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ERC165 *ERC165Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ERC165.Contract.ERC165Transactor.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 (_ERC165 *ERC165CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ERC165.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 (_ERC165 *ERC165TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ERC165.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ERC165 *ERC165TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ERC165.Contract.contract.Transact(opts, method, params...) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_ERC165 *ERC165Caller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { - var out []interface{} - err := _ERC165.contract.Call(opts, &out, "supportsInterface", interfaceId) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_ERC165 *ERC165Session) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _ERC165.Contract.SupportsInterface(&_ERC165.CallOpts, interfaceId) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_ERC165 *ERC165CallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _ERC165.Contract.SupportsInterface(&_ERC165.CallOpts, interfaceId) -} diff --git a/v2/pkg/erc20custody.sol/erc20custody.go b/v2/pkg/erc20custody.sol/erc20custody.go index 7251a7ca4..6c11e7d27 100644 --- a/v2/pkg/erc20custody.sol/erc20custody.go +++ b/v2/pkg/erc20custody.sol/erc20custody.go @@ -32,14 +32,14 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } // ERC20CustodyMetaData contains all meta data concerning the ERC20Custody contract. var ERC20CustodyMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setSupportsLegacy\",\"inputs\":[{\"name\":\"_supportsLegacy\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"supportsLegacy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unwhitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405234801561001057600080fd5b50604051611de7380380611de783398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611dc78339815191528261014c565b50610143600080516020611dc78339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611b50610277600039600081816101d501528181610574015281816105c9015281816107e6015261083b0152611b506000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638456cb59116100ee578063a217fddf11610097578063d9caed1211610071578063d9caed12146103e0578063e609055e146103f3578063e63ab1e914610406578063eab103df1461042d57600080fd5b8063a217fddf146103a2578063d547741f146103aa578063d936547e146103bd57600080fd5b8063950837aa116100c8578063950837aa146103695780639a5904271461037c5780639b19251a1461038f57600080fd5b80638456cb591461030157806385f438c11461030957806391d148541461033057600080fd5b806336568abe116101505780635b1125911161012a5780635b112591146102d05780635c975abb146102e35780637ab697e7146102ee57600080fd5b806336568abe1461028e5780633f4ba83a146102a1578063570618e1146102a957600080fd5b8063248a9ca311610181578063248a9ca314610224578063252f07bf146102565780632f2ff15d1461027b57600080fd5b806301ffc9a7146101a8578063116191b6146101d057806321fc65f21461020f575b600080fd5b6101bb6101b636600461155e565b610440565b60405190151581526020015b60405180910390f35b6101f77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c7565b61022261021d3660046115fe565b6104d9565b005b610248610232366004611671565b6000908152600160208190526040909120015490565b6040519081526020016101c7565b6004546101bb9074010000000000000000000000000000000000000000900460ff1681565b61022261028936600461168a565b610699565b61022261029c36600461168a565b6106c5565b610222610716565b6102487f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101f7906001600160a01b031681565b60025460ff166101bb565b6102226102fc3660046116ba565b61074b565b610222610910565b6102487f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101bb61033e36600461168a565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61022261037736600461175d565b610942565b61022261038a36600461175d565b610ac0565b61022261039d36600461175d565b610b74565b610248600081565b6102226103b836600461168a565b610c2b565b6101bb6103cb36600461175d565b60036020526000908152604090205460ff1681565b6102226103ee36600461177a565b610c51565b6102226104013660046117bb565b610d49565b6102487f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61022261043b36600461185a565b610f75565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104e1610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461050b8161100e565b610513611018565b6001600160a01b03851660009081526003602052604090205460ff16610565576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105996001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086611057565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106069088908a908990899089906004016118c0565b600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161067f93929190611903565b60405180910390a3506106926001600055565b5050505050565b600082815260016020819052604090912001546106b58161100e565b6106bf83836110cb565b50505050565b6001600160a01b0381163314610707576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610711828261115e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107408161100e565b6107486111e5565b50565b610753610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461077d8161100e565b610785611018565b6001600160a01b03861660009081526003602052604090205460ff166107d7576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61080b6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087611057565b6040517fece697b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ece697b39061087a9089908b908a908a908a908a906004016119bf565b600060405180830381600087803b15801561089457600080fd5b505af11580156108a8573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640878787876040516108f59493929190611a16565b60405180910390a3506109086001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61093a8161100e565b610748611237565b600061094d8161100e565b6001600160a01b03821661098d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546109c4907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661115e565b506004546109fc907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661115e565b50610a277f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836110cb565b50610a527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a836110cb565b50600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527f086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba9060200160405180910390a15050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610aea8161100e565b6001600160a01b038216610b2a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610b9e8161100e565b6001600160a01b038216610bde576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610c478161100e565b6106bf838361115e565b610c59610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610c838161100e565b610c8b611018565b6001600160a01b03831660009081526003602052604090205460ff16610cdd576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf16001600160a01b0384168584611057565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610d3691815260200190565b60405180910390a3506107116001600055565b610d51610fcb565b610d59611018565b60045474010000000000000000000000000000000000000000900460ff16610dad576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610dff576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a42565b9050610e9a6001600160a01b038616333087611274565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f459190611a42565b610f4f9190611a5b565b8787604051610f62959493929190611a95565b60405180910390a2506109086001600055565b6000610f808161100e565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403611007576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61074881336112ad565b60025460ff1615611055576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611324565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166111565760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104d3565b5060006104d3565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16156111565760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104d3565b6111ed6113a0565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61123f611018565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861121a3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106bf9186918216906323b872dd90608401611084565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611320576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b60006113396001600160a01b038416836113dc565b9050805160001415801561135e57508080602001905181019061135c9190611ace565b155b15610711576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611317565b60025460ff16611055576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606113ea838360006113f1565b9392505050565b60608147101561142f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611317565b600080856001600160a01b0316848660405161144b9190611aeb565b60006040518083038185875af1925050503d8060008114611488576040519150601f19603f3d011682016040523d82523d6000602084013e61148d565b606091505b509150915061149d8683836114a7565b9695505050505050565b6060826114bc576114b78261151c565b6113ea565b81511580156114d357506001600160a01b0384163b155b15611515576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611317565b50806113ea565b80511561152c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561157057600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113ea57600080fd5b6001600160a01b038116811461074857600080fd5b60008083601f8401126115c757600080fd5b50813567ffffffffffffffff8111156115df57600080fd5b6020830191508360208285010111156115f757600080fd5b9250929050565b60008060008060006080868803121561161657600080fd5b8535611621816115a0565b94506020860135611631816115a0565b935060408601359250606086013567ffffffffffffffff81111561165457600080fd5b611660888289016115b5565b969995985093965092949392505050565b60006020828403121561168357600080fd5b5035919050565b6000806040838503121561169d57600080fd5b8235915060208301356116af816115a0565b809150509250929050565b60008060008060008060a087890312156116d357600080fd5b86356116de816115a0565b955060208701356116ee816115a0565b945060408701359350606087013567ffffffffffffffff81111561171157600080fd5b61171d89828a016115b5565b909450925050608087013567ffffffffffffffff81111561173d57600080fd5b87016060818a03121561174f57600080fd5b809150509295509295509295565b60006020828403121561176f57600080fd5b81356113ea816115a0565b60008060006060848603121561178f57600080fd5b833561179a816115a0565b925060208401356117aa816115a0565b929592945050506040919091013590565b600080600080600080608087890312156117d457600080fd5b863567ffffffffffffffff8111156117eb57600080fd5b6117f789828a016115b5565b909750955050602087013561180b816115a0565b935060408701359250606087013567ffffffffffffffff81111561182e57600080fd5b61183a89828a016115b5565b979a9699509497509295939492505050565b801515811461074857600080fd5b60006020828403121561186c57600080fd5b81356113ea8161184c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b03851660208201528360408201526080606082015260006118f8608083018486611877565b979650505050505050565b83815260406020820152600061191d604083018486611877565b95945050505050565b60008135611933816115a0565b6001600160a01b03168352602082810135908401526040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261197e57600080fd5b820160208101903567ffffffffffffffff81111561199b57600080fd5b8036038213156119aa57600080fd5b6060604086015261191d606086018284611877565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006119f760a083018587611877565b8281036080840152611a098185611926565b9998505050505050505050565b848152606060208201526000611a30606083018587611877565b82810360408401526118f88185611926565b600060208284031215611a5457600080fd5b5051919050565b818103818111156104d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611aa9606083018789611877565b8560208401528281036040840152611ac2818587611877565b98975050505050505050565b600060208284031215611ae057600080fd5b81516113ea8161184c565b6000825160005b81811015611b0c5760208186018101518583015201611af2565b50600092019182525091905056fea2646970667358221220a57d389b60850bdfffcd53692f80a9c416ca5b9b4d1b7d58052beba77fb7a96b64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setSupportsLegacy\",\"inputs\":[{\"name\":\"_supportsLegacy\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"supportsLegacy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unwhitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052348015601357600080fd5b5060805161298d61003d600039600081816119610152818161198a0152611b60015261298d6000f3fe6080604052600436106101c25760003560e01c806385f438c1116100f7578063c0c53b8b11610095578063d9caed1211610064578063d9caed12146105f6578063e609055e14610616578063e63ab1e914610636578063eab103df1461066a57600080fd5b8063c0c53b8b14610566578063c709ab6e14610586578063d547741f146105a6578063d936547e146105c657600080fd5b80639a590427116100d15780639a590427146104bb5780639b19251a146104db578063a217fddf146104fb578063ad3cb1cc1461051057600080fd5b806385f438c11461040257806391d1485414610436578063950837aa1461049b57600080fd5b80633f4ba83a11610164578063570618e11161013e578063570618e1146103625780635b112591146103965780635c975abb146103b65780638456cb59146103ed57600080fd5b80633f4ba83a146103255780634f1ef2861461033a57806352d1902d1461034d57600080fd5b8063248a9ca3116101a0578063248a9ca314610256578063252f07bf146102b35780632f2ff15d146102e557806336568abe1461030557600080fd5b806301ffc9a7146101c7578063116191b6146101fc57806321fc65f214610234575b600080fd5b3480156101d357600080fd5b506101e76101e23660046121a7565b61068a565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5060005461021c906001600160a01b031681565b6040516001600160a01b0390911681526020016101f3565b34801561024057600080fd5b5061025461024f366004612247565b610723565b005b34801561026257600080fd5b506102a56102713660046122ba565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101f3565b3480156102bf57600080fd5b506002546101e79074010000000000000000000000000000000000000000900460ff1681565b3480156102f157600080fd5b506102546103003660046122d3565b6108cc565b34801561031157600080fd5b506102546103203660046122d3565b610916565b34801561033157600080fd5b50610254610967565b610254610348366004612332565b61099c565b34801561035957600080fd5b506102a56109bb565b34801561036e57600080fd5b506102a57f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b3480156103a257600080fd5b5060025461021c906001600160a01b031681565b3480156103c257600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101e7565b3480156103f957600080fd5b506102546109ea565b34801561040e57600080fd5b506102a57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561044257600080fd5b506101e76104513660046122d3565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104a757600080fd5b506102546104b636600461243b565b610a1c565b3480156104c757600080fd5b506102546104d636600461243b565b610baf565b3480156104e757600080fd5b506102546104f636600461243b565b610c63565b34801561050757600080fd5b506102a5600081565b34801561051c57600080fd5b506105596040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f3919061247c565b34801561057257600080fd5b506102546105813660046124cd565b610d1d565b34801561059257600080fd5b506102546105a1366004612518565b611042565b3480156105b257600080fd5b506102546105c13660046122d3565b6111f0565b3480156105d257600080fd5b506101e76105e136600461243b565b60016020526000908152604090205460ff1681565b34801561060257600080fd5b506102546106113660046125bb565b611234565b34801561062257600080fd5b506102546106313660046125fc565b61134b565b34801561064257600080fd5b506102a57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561067657600080fd5b5061025461068536600461269b565b611596565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061071d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61072b6115ec565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107558161166d565b61075d611677565b6001600160a01b03851660009081526001602052604090205460ff166107af576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546107c9906001600160a01b038781169116866116d5565b6000546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690635131ab599061081a9088908a90899089908990600401612701565b600060405180830381600087803b15801561083457600080fd5b505af1158015610848573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161089393929190612744565b60405180910390a3506108c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546109068161166d565b610910838361176f565b50505050565b6001600160a01b0381163314610958576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610962828261183e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109918161166d565b6109996118e4565b50565b6109a4611956565b6109ad82611a26565b6109b78282611a31565b5050565b60006109c5611b55565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a148161166d565b610999611bb7565b6000610a278161166d565b6001600160a01b038216610a67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610a9e907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661183e565b50600254610ad6907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661183e565b50610b017f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361176f565b50610b2c7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a8361176f565b50600254604080516001600160a01b03928316815291841660208301527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610bd98161166d565b6001600160a01b038216610c19576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260016020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610c8d8161166d565b6001600160a01b038216610ccd576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000818152600160208190526040808320805460ff1916909217909155517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d685750825b905060008267ffffffffffffffff166001148015610d855750303b155b905081158015610d93575080155b15610dca576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e2b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0388161580610e4857506001600160a01b038716155b80610e5a57506001600160a01b038616155b15610e91576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e99611c12565b610ea1611c1a565b610ea9611c12565b610eb1611c2a565b600080546001600160a01b03808b167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617835560028054918b1691909216179055610eff908761176f565b50610f2a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761176f565b50610f557f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8861176f565b50610f807f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48861176f565b50610fab7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a8761176f565b50610fd67f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a8861176f565b5083156110385784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61104a6115ec565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46110748161166d565b61107c611677565b6001600160a01b03861660009081526001602052604090205460ff166110ce576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546110e8906001600160a01b038881169116876116d5565b6000546040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063d0b492c39061113b9089908b908a908a908a908a9060040161280f565b600060405180830381600087803b15801561115557600080fd5b505af1158015611169573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b878787876040516111b69493929190612866565b60405180910390a3506111e860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461122a8161166d565b610910838361183e565b61123c6115ec565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46112668161166d565b61126e611677565b6001600160a01b03831660009081526001602052604090205460ff166112c0576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112d46001600160a01b03841685846116d5565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb8460405161131991815260200190565b60405180910390a35061096260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6113536115ec565b61135b611677565b60025474010000000000000000000000000000000000000000900460ff166113af576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526001602052604090205460ff16611401576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114859190612892565b905061149c6001600160a01b038616333087611c3a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190612892565b61155191906128ab565b87876040516115649594939291906128e5565b60405180910390a2506111e860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60006115a18161166d565b506002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611667576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109998133611c73565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156116d3576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261096291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d00565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611834576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556117ea3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061071d565b600091505061071d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611834576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061071d565b6118ec611d7c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119ef57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119e37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156116d3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109b78161166d565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611aa9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611aa691810190612892565b60015b611aef576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611b4b576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611ae6565b6109628383611dd7565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116d3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bbf611677565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611938565b6116d3611e2d565b611c22611e2d565b6116d3611e94565b611c32611e2d565b6116d3611e9c565b6040516001600160a01b0384811660248301528381166044830152606482018390526109109186918216906323b872dd90608401611702565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166109b7576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611ae6565b6000611d156001600160a01b03841683611ecf565b90508051600014158015611d3a575080806020019051810190611d38919061291e565b155b15610962576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611ae6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166116d3576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611de082611ee4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611e25576109628282611f8c565b6109b7612002565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166116d3576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611749611e2d565b611ea4611e2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b6060611edd8383600061203a565b9392505050565b806001600160a01b03163b600003611f33576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611ae6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611fa9919061293b565b600060405180830381855af49150503d8060008114611fe4576040519150601f19603f3d011682016040523d82523d6000602084013e611fe9565b606091505b5091509150611ff98583836120f0565b95945050505050565b34156116d3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015612078576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611ae6565b600080856001600160a01b03168486604051612094919061293b565b60006040518083038185875af1925050503d80600081146120d1576040519150601f19603f3d011682016040523d82523d6000602084013e6120d6565b606091505b50915091506120e68683836120f0565b9695505050505050565b6060826121055761210082612165565b611edd565b815115801561211c57506001600160a01b0384163b155b1561215e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611ae6565b5080611edd565b8051156121755780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156121b957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611edd57600080fd5b6001600160a01b038116811461099957600080fd5b60008083601f84011261221057600080fd5b50813567ffffffffffffffff81111561222857600080fd5b60208301915083602082850101111561224057600080fd5b9250929050565b60008060008060006080868803121561225f57600080fd5b853561226a816121e9565b9450602086013561227a816121e9565b935060408601359250606086013567ffffffffffffffff81111561229d57600080fd5b6122a9888289016121fe565b969995985093965092949392505050565b6000602082840312156122cc57600080fd5b5035919050565b600080604083850312156122e657600080fd5b8235915060208301356122f8816121e9565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561234557600080fd5b8235612350816121e9565b9150602083013567ffffffffffffffff81111561236c57600080fd5b8301601f8101851361237d57600080fd5b803567ffffffffffffffff81111561239757612397612303565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561240357612403612303565b60405281815282820160200187101561241b57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561244d57600080fd5b8135611edd816121e9565b60005b8381101561247357818101518382015260200161245b565b50506000910152565b602081526000825180602084015261249b816040850160208701612458565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156124e257600080fd5b83356124ed816121e9565b925060208401356124fd816121e9565b9150604084013561250d816121e9565b809150509250925092565b60008060008060008060a0878903121561253157600080fd5b863561253c816121e9565b9550602087013561254c816121e9565b945060408701359350606087013567ffffffffffffffff81111561256f57600080fd5b61257b89828a016121fe565b909450925050608087013567ffffffffffffffff81111561259b57600080fd5b87016060818a0312156125ad57600080fd5b809150509295509295509295565b6000806000606084860312156125d057600080fd5b83356125db816121e9565b925060208401356125eb816121e9565b929592945050506040919091013590565b6000806000806000806080878903121561261557600080fd5b863567ffffffffffffffff81111561262c57600080fd5b61263889828a016121fe565b909750955050602087013561264c816121e9565b935060408701359250606087013567ffffffffffffffff81111561266f57600080fd5b61267b89828a016121fe565b979a9699509497509295939492505050565b801515811461099957600080fd5b6000602082840312156126ad57600080fd5b8135611edd8161268d565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b03851660208201528360408201526080606082015260006127396080830184866126b8565b979650505050505050565b838152604060208201526000611ff96040830184866126b8565b6000813561276b816121e9565b6001600160a01b03168352602082013567ffffffffffffffff811680821461279257600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126127ce57600080fd5b820160208101903567ffffffffffffffff8111156127eb57600080fd5b8036038213156127fa57600080fd5b60606040860152611ff96060860182846126b8565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061284760a0830185876126b8565b8281036080840152612859818561275e565b9998505050505050505050565b8481526060602082015260006128806060830185876126b8565b8281036040840152612739818561275e565b6000602082840312156128a457600080fd5b5051919050565b8181038181111561071d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006128f96060830187896126b8565b85602084015282810360408401526129128185876126b8565b98975050505050505050565b60006020828403121561293057600080fd5b8151611edd8161268d565b6000825161294d818460208701612458565b919091019291505056fea26469706673582212208a1c62b10561b18d4814449cf12a3b5e97feb8b461b02a4edc800173b625855b64736f6c634300081a0033", } // ERC20CustodyABI is the input ABI used to generate the binding from. @@ -51,7 +51,7 @@ var ERC20CustodyABI = ERC20CustodyMetaData.ABI var ERC20CustodyBin = ERC20CustodyMetaData.Bin // DeployERC20Custody deploys a new Ethereum contract, binding an instance of ERC20Custody to it. -func DeployERC20Custody(auth *bind.TransactOpts, backend bind.ContractBackend, gateway_ common.Address, tssAddress_ common.Address, admin_ common.Address) (common.Address, *types.Transaction, *ERC20Custody, error) { +func DeployERC20Custody(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ERC20Custody, error) { parsed, err := ERC20CustodyMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -60,7 +60,7 @@ func DeployERC20Custody(auth *bind.TransactOpts, backend bind.ContractBackend, g return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC20CustodyBin), backend, gateway_, tssAddress_, admin_) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC20CustodyBin), backend) if err != nil { return common.Address{}, nil, nil, err } @@ -271,6 +271,37 @@ func (_ERC20Custody *ERC20CustodyCallerSession) PAUSERROLE() ([32]byte, error) { return _ERC20Custody.Contract.PAUSERROLE(&_ERC20Custody.CallOpts) } +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ERC20Custody *ERC20CustodyCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ERC20Custody.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ERC20Custody *ERC20CustodySession) UPGRADEINTERFACEVERSION() (string, error) { + return _ERC20Custody.Contract.UPGRADEINTERFACEVERSION(&_ERC20Custody.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ERC20Custody *ERC20CustodyCallerSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ERC20Custody.Contract.UPGRADEINTERFACEVERSION(&_ERC20Custody.CallOpts) +} + // WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. // // Solidity: function WHITELISTER_ROLE() view returns(bytes32) @@ -457,6 +488,37 @@ func (_ERC20Custody *ERC20CustodyCallerSession) Paused() (bool, error) { return _ERC20Custody.Contract.Paused(&_ERC20Custody.CallOpts) } +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC20Custody *ERC20CustodyCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20Custody.contract.Call(opts, &out, "proxiableUUID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC20Custody *ERC20CustodySession) ProxiableUUID() ([32]byte, error) { + return _ERC20Custody.Contract.ProxiableUUID(&_ERC20Custody.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC20Custody *ERC20CustodyCallerSession) ProxiableUUID() ([32]byte, error) { + return _ERC20Custody.Contract.ProxiableUUID(&_ERC20Custody.CallOpts) +} + // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) @@ -623,6 +685,27 @@ func (_ERC20Custody *ERC20CustodyTransactorSession) GrantRole(role [32]byte, acc return _ERC20Custody.Contract.GrantRole(&_ERC20Custody.TransactOpts, role, account) } +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address gateway_, address tssAddress_, address admin_) returns() +func (_ERC20Custody *ERC20CustodyTransactor) Initialize(opts *bind.TransactOpts, gateway_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ERC20Custody.contract.Transact(opts, "initialize", gateway_, tssAddress_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address gateway_, address tssAddress_, address admin_) returns() +func (_ERC20Custody *ERC20CustodySession) Initialize(gateway_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ERC20Custody.Contract.Initialize(&_ERC20Custody.TransactOpts, gateway_, tssAddress_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address gateway_, address tssAddress_, address admin_) returns() +func (_ERC20Custody *ERC20CustodyTransactorSession) Initialize(gateway_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ERC20Custody.Contract.Initialize(&_ERC20Custody.TransactOpts, gateway_, tssAddress_, admin_) +} + // Pause is a paid mutator transaction binding the contract method 0x8456cb59. // // Solidity: function pause() returns() @@ -770,6 +853,27 @@ func (_ERC20Custody *ERC20CustodyTransactorSession) UpdateTSSAddress(newTSSAddre return _ERC20Custody.Contract.UpdateTSSAddress(&_ERC20Custody.TransactOpts, newTSSAddress) } +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC20Custody *ERC20CustodyTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC20Custody.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC20Custody *ERC20CustodySession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC20Custody.Contract.UpgradeToAndCall(&_ERC20Custody.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC20Custody *ERC20CustodyTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC20Custody.Contract.UpgradeToAndCall(&_ERC20Custody.TransactOpts, newImplementation, data) +} + // Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. // // Solidity: function whitelist(address token) returns() @@ -833,23 +937,23 @@ func (_ERC20Custody *ERC20CustodyTransactorSession) WithdrawAndCall(to common.Ad return _ERC20Custody.Contract.WithdrawAndCall(&_ERC20Custody.TransactOpts, to, token, amount, data) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x7ab697e7. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. // -// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_ERC20Custody *ERC20CustodyTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _ERC20Custody.contract.Transact(opts, "withdrawAndRevert", to, token, amount, data, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x7ab697e7. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. // -// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_ERC20Custody *ERC20CustodySession) WithdrawAndRevert(to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _ERC20Custody.Contract.WithdrawAndRevert(&_ERC20Custody.TransactOpts, to, token, amount, data, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x7ab697e7. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. // -// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_ERC20Custody *ERC20CustodyTransactorSession) WithdrawAndRevert(to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _ERC20Custody.Contract.WithdrawAndRevert(&_ERC20Custody.TransactOpts, to, token, amount, data, revertContext) } @@ -1001,6 +1105,140 @@ func (_ERC20Custody *ERC20CustodyFilterer) ParseDeposited(log types.Log) (*ERC20 return event, nil } +// ERC20CustodyInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ERC20Custody contract. +type ERC20CustodyInitializedIterator struct { + Event *ERC20CustodyInitialized // 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 *ERC20CustodyInitializedIterator) 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(ERC20CustodyInitialized) + 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(ERC20CustodyInitialized) + 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 *ERC20CustodyInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyInitialized represents a Initialized event raised by the ERC20Custody contract. +type ERC20CustodyInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ERC20Custody *ERC20CustodyFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC20CustodyInitializedIterator, error) { + + logs, sub, err := _ERC20Custody.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ERC20CustodyInitializedIterator{contract: _ERC20Custody.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ERC20Custody *ERC20CustodyFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC20CustodyInitialized) (event.Subscription, error) { + + logs, sub, err := _ERC20Custody.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(ERC20CustodyInitialized) + if err := _ERC20Custody.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 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ERC20Custody *ERC20CustodyFilterer) ParseInitialized(log types.Log) (*ERC20CustodyInitialized, error) { + event := new(ERC20CustodyInitialized) + if err := _ERC20Custody.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ERC20CustodyPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ERC20Custody contract. type ERC20CustodyPausedIterator struct { Event *ERC20CustodyPaused // Event containing the contract specifics and raw log @@ -1968,13 +2206,14 @@ func (it *ERC20CustodyUpdatedCustodyTSSAddressIterator) Close() error { // ERC20CustodyUpdatedCustodyTSSAddress represents a UpdatedCustodyTSSAddress event raised by the ERC20Custody contract. type ERC20CustodyUpdatedCustodyTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedCustodyTSSAddress is a free log retrieval operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// FilterUpdatedCustodyTSSAddress is a free log retrieval operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ERC20Custody *ERC20CustodyFilterer) FilterUpdatedCustodyTSSAddress(opts *bind.FilterOpts) (*ERC20CustodyUpdatedCustodyTSSAddressIterator, error) { logs, sub, err := _ERC20Custody.contract.FilterLogs(opts, "UpdatedCustodyTSSAddress") @@ -1984,9 +2223,9 @@ func (_ERC20Custody *ERC20CustodyFilterer) FilterUpdatedCustodyTSSAddress(opts * return &ERC20CustodyUpdatedCustodyTSSAddressIterator{contract: _ERC20Custody.contract, event: "UpdatedCustodyTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedCustodyTSSAddress is a free log subscription operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// WatchUpdatedCustodyTSSAddress is a free log subscription operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ERC20Custody *ERC20CustodyFilterer) WatchUpdatedCustodyTSSAddress(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpdatedCustodyTSSAddress) (event.Subscription, error) { logs, sub, err := _ERC20Custody.contract.WatchLogs(opts, "UpdatedCustodyTSSAddress") @@ -2021,9 +2260,9 @@ func (_ERC20Custody *ERC20CustodyFilterer) WatchUpdatedCustodyTSSAddress(opts *b }), nil } -// ParseUpdatedCustodyTSSAddress is a log parse operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// ParseUpdatedCustodyTSSAddress is a log parse operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ERC20Custody *ERC20CustodyFilterer) ParseUpdatedCustodyTSSAddress(log types.Log) (*ERC20CustodyUpdatedCustodyTSSAddress, error) { event := new(ERC20CustodyUpdatedCustodyTSSAddress) if err := _ERC20Custody.contract.UnpackLog(event, "UpdatedCustodyTSSAddress", log); err != nil { @@ -2033,6 +2272,150 @@ func (_ERC20Custody *ERC20CustodyFilterer) ParseUpdatedCustodyTSSAddress(log typ return event, nil } +// ERC20CustodyUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the ERC20Custody contract. +type ERC20CustodyUpgradedIterator struct { + Event *ERC20CustodyUpgraded // 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 *ERC20CustodyUpgradedIterator) 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(ERC20CustodyUpgraded) + 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(ERC20CustodyUpgraded) + 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 *ERC20CustodyUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgraded represents a Upgraded event raised by the ERC20Custody contract. +type ERC20CustodyUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC20Custody *ERC20CustodyFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*ERC20CustodyUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ERC20Custody.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradedIterator{contract: _ERC20Custody.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC20Custody *ERC20CustodyFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ERC20Custody.contract.WatchLogs(opts, "Upgraded", implementationRule) + 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(ERC20CustodyUpgraded) + if err := _ERC20Custody.contract.UnpackLog(event, "Upgraded", 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 +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC20Custody *ERC20CustodyFilterer) ParseUpgraded(log types.Log) (*ERC20CustodyUpgraded, error) { + event := new(ERC20CustodyUpgraded) + if err := _ERC20Custody.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ERC20CustodyWhitelistedIterator is returned from FilterWhitelisted and is used to iterate over the raw logs and unpacked data for Whitelisted events raised by the ERC20Custody contract. type ERC20CustodyWhitelistedIterator struct { Event *ERC20CustodyWhitelisted // Event containing the contract specifics and raw log @@ -2563,9 +2946,9 @@ type ERC20CustodyWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ERC20Custody *ERC20CustodyFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -2584,9 +2967,9 @@ func (_ERC20Custody *ERC20CustodyFilterer) FilterWithdrawnAndReverted(opts *bind return &ERC20CustodyWithdrawnAndRevertedIterator{contract: _ERC20Custody.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ERC20Custody *ERC20CustodyFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyWithdrawnAndReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2630,9 +3013,9 @@ func (_ERC20Custody *ERC20CustodyFilterer) WatchWithdrawnAndReverted(opts *bind. }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ERC20Custody *ERC20CustodyFilterer) ParseWithdrawnAndReverted(log types.Log) (*ERC20CustodyWithdrawnAndReverted, error) { event := new(ERC20CustodyWithdrawnAndReverted) if err := _ERC20Custody.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/erc20custody.t.sol/erc20custodytest.go b/v2/pkg/erc20custody.t.sol/erc20custodytest.go index 0cf97cfe0..90b62fba0 100644 --- a/v2/pkg/erc20custody.t.sol/erc20custodytest.go +++ b/v2/pkg/erc20custody.t.sol/erc20custodytest.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -65,8 +65,8 @@ type StdInvariantFuzzSelector struct { // ERC20CustodyTestMetaData contains all meta data concerning the ERC20CustodyTest contract. var ERC20CustodyTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDepositLegacy\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositLegacyFailsIfNotSupported\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositLegacyFailsIfTokenNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testNewCustodyFailsIfAddressesAreZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgrade\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfSenderIsNotTSSUpdater\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelistFailsIfSenderIsNotWhitelister\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelistFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelistFailsIfSenderIsNotWhitelister\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelistFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b50620129c1806200003e6000396000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c806385226c81116101b2578063b5508aa9116100f9578063eb1ce7f9116100a2578063fa2a70741161007c578063fa2a7074146105b0578063fa7626d4146105b8578063fb176c12146105c5578063fe8e5f1b146105cd57600080fd5b8063eb1ce7f914610598578063f0c8e7e0146105a0578063f4221f08146105a857600080fd5b8063cbd57e2f116100d3578063cbd57e2f14610561578063e20c9f7114610569578063e63ab1e91461057157600080fd5b8063b5508aa914610539578063ba414fa614610541578063c713f8271461055957600080fd5b8063a217fddf1161015b578063a783c78911610135578063a783c78914610502578063b0464fdc14610529578063b421ca701461053157600080fd5b8063a217fddf146104ea578063a3f9d0e0146104f2578063a4943deb146104fa57600080fd5b8063916a17c61161018c578063916a17c6146104c55780639918c1c2146104da5780639fc7fd55146104e257600080fd5b806385226c811461048157806385f438c1146104965780639158c623146104bd57600080fd5b806349c783dd116102815780635d62c8601161022a5780637099d6f8116102045780637099d6f81461046157806371149c94146104695780637e91c50f1461047157806382c529921461047957600080fd5b80635d62c8601461041d57806366d9a9a0146104445780636a6218541461045957600080fd5b806351ecdf3c1161025b57806351ecdf3c146103d857806352ff5939146103e0578063570618e1146103e857600080fd5b806349c783dd146103c05780634b5838d2146103c85780634df42da1146103d057600080fd5b80632ade3880116102e35780633e73ecb4116102bd5780633e73ecb4146103a85780633ee92923146103b05780633f7286f4146103b857600080fd5b80632ade3880146103835780632be6a162146103985780633e5e3c23146103a057600080fd5b80631779672f116103145780631779672f146103555780631ed7831c1461035d578063284cb9291461037b57600080fd5b8063070f2ad01461033b5780630a9254e4146103455780630eee72a91461034d575b600080fd5b6103436105d5565b005b6103436107d6565b610343611212565b6103436114b7565b610365611608565b604051610372919061be49565b60405180910390f35b61034361166a565b61038b61194e565b604051610372919061bee5565b610343611a90565b610365611c52565b610343611cb2565b610343612227565b6103656122f6565b610343612356565b610343612693565b6103436129b1565b610343612b09565b610343612cda565b61040f7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b604051908152602001610372565b61040f7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b61044c6134ff565b604051610372919061c04b565b610343613681565b61034361374d565b6103436139fa565b61034361420f565b61034361439a565b61048961460e565b604051610372919061c0e9565b61040f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6103436146de565b6104cd6147ac565b604051610372919061c160565b6103436148a7565b610343614ba1565b61040f600081565b610343614c6f565b610343615277565b61040f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6104cd61549f565b61034361559a565b610489615acf565b610549615b9f565b6040519015158152602001610372565b610343615c73565b610343616916565b6103656169d7565b61040f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b610343616a37565b610343616b43565b610343616d05565b610343616f72565b601f546105499060ff1681565b610343617250565b6103436178ce565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561064757600080fd5b505af115801561065b573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250610727919060040161c1f7565b600060405180830381600087803b15801561074157600080fd5b505af1158015610755573d6000803e3d6000fd5b50506022546026546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063950837aa91506024015b600060405180830381600087803b1580156107bc57600080fd5b505af11580156107d0573d6000803e3d6000fd5b50505050565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516108289061bd58565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156108ad573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516108f29061bd58565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610976573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610a65919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052617abf565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602854602654604051929391821692911690610af19061bd66565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610b2d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546025546028546026546040519385169492831693918316921690610b889061bd74565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610bcc573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610c119061bd82565b604051809103906000f080158015610c2d573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610cd957600080fd5b505af1158015610ced573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610d6357600080fd5b505af1158015610d77573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610ddd57600080fd5b505af1158015610df1573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610e5757600080fd5b505af1158015610e6b573d6000803e3d6000fd5b5050602254602480546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639b19251a925001600060405180830381600087803b158015610ed057600080fd5b505af1158015610ee4573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f4657600080fd5b505af1158015610f5a573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610fcb57600080fd5b505af1158015610fdf573d6000803e3d6000fd5b50506025546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561104e57600080fd5b505af1158015611062573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156110d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fc919061c20a565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117d57600080fd5b505af1158015611191573d6000803e3d6000fd5b5050604080516060810182526024546001600160a01b0390811682526001602080840191825284519081018552600081529383018490528251602980547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190931617825551602a559093509150602b9061120d908261c2ef565b505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156112f757600080fd5b505af115801561130b573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506113f6919060040161c1f7565b600060405180830381600087803b15801561141057600080fd5b505af1158015611424573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506114819392831692909116908790879060040161c3ae565b600060405180830381600087803b15801561149b57600080fd5b505af11580156114af573d6000803e3d6000fd5b505050505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561159957600080fd5b505af11580156115ad573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016113f6565b6060601680548060200260200160405190810160405280929190818152602001828054801561166057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611642575b5050505050905090565b6022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600092919091169063d936547e90602401602060405180830381865afa1580156116d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f8919061c20a565b9050611705600082617ade565b6022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561177a57600080fd5b505af115801561178e573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561182357600080fd5b505af1158015611837573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b15801561189d57600080fd5b505af11580156118b1573d6000803e3d6000fd5b50506022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063d936547e9150602401602060405180830381865afa15801561191a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193e919061c20a565b905061194b600182617ade565b50565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611a8757600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611a705783829060005260206000200180546119e39061c25b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0f9061c25b565b8015611a5c5780601f10611a3157610100808354040283529160200191611a5c565b820191906000526020600020905b815481529060010190602001808311611a3f57829003601f168201915b5050505050815260200190600101906119c4565b505050508152505081526020019060010190611972565b50505050905090565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ade57600080fd5b505af1158015611af2573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611bd3919060040161c1f7565b600060405180830381600087803b158015611bed57600080fd5b505af1158015611c01573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a91506024016107a2565b60606018805480602002602001604051908101604052809291908181526020018280548015611660576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611642575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015611d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2b919061c3e5565b9050611d38816000617b60565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dac919061c3e5565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611e8f916001600160a01b039190911690600090869060040161c3fe565b600060405180830381600087803b158015611ea957600080fd5b505af1158015611ebd573d6000803e3d6000fd5b50506022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611f3657600080fd5b505af1158015611f4a573d6000803e3d6000fd5b50506024546027546040518881526001600160a01b039283169450911691507fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611fef57600080fd5b505af1158015612003573d6000803e3d6000fd5b5050602254602754602480546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015290831691810191909152604481018990529116925063d9caed129150606401600060405180830381600087803b15801561207e57600080fd5b505af1158015612092573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156120e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612108919061c3e5565b90506121148186617b60565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612164573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612188919061c3e5565b905061219d81612198888761c455565b617b60565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156121ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612211919061c3e5565b905061221e816000617b60565b50505050505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024016112dd565b60606017805480602002602001604051908101604052809291908181526020018280548015611660576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611642575050505050905090565b6022546040517feab103df000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169063eab103df90602401600060405180830381600087803b1580156123b557600080fd5b505af11580156123c9573d6000803e3d6000fd5b5050602480546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42409381019390935216925063095ea7b391506044016020604051808303816000875af115801561243f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612463919061c20a565b506025546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240602482015291169063095ea7b3906044016020604051808303816000875af11580156124d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f8919061c20a565b50604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025820192839052630618f58760e51b9092527f73cba663000000000000000000000000000000000000000000000000000000006029820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906049015b600060405180830381600087803b1580156125a057600080fd5b505af11580156125b4573d6000803e3d6000fd5b505060225460275460405160609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201526001600160a01b03909116925063e609055e915060340160408051601f19818403018152908290526024547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261265e926001600160a01b03909116906103e890879060040161c468565b600060405180830381600087803b15801561267857600080fd5b505af115801561268c573d6000803e3d6000fd5b5050505050565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156126ff57600080fd5b505af1158015612713573d6000803e3d6000fd5b5050602854602654604051600094508493506001600160a01b03928316929091169061273e9061bd66565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561277a573d6000803e3d6000fd5b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156127ea57600080fd5b505af11580156127fe573d6000803e3d6000fd5b50506020546026546040516001600160a01b039283169450600093509116906128269061bd66565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015612862573d6000803e3d6000fd5b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156128d257600080fd5b505af11580156128e6573d6000803e3d6000fd5b50506020546028546040516001600160a01b0392831694509116915060009061290e9061bd66565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561294a573d6000803e3d6000fd5b506020546028546026546040519394506001600160a01b03928316939183169216906129759061bd66565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561120d573d6000803e3d6000fd5b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612a2357600080fd5b505af1158015612a37573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612aa757600080fd5b505af1158015612abb573d6000803e3d6000fd5b50506022546040517f950837aa000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063950837aa91506024016107a2565b6024805460275460405160019381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612beb57600080fd5b505af1158015612bff573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612c6f57600080fd5b505af1158015612c83573d6000803e3d6000fd5b50506022546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321fc65f293506114819260009216908790879060040161c3ae565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4600482015261432160248201819052916000916001600160a01b03909116906391d1485490604401602060405180830381865afa158015612d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8d919061c20a565b9050612d9881617bb8565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b03848116602483015260009216906391d1485490604401602060405180830381865afa158015612e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e46919061c20a565b9050612e5181617bb8565b6022546028546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa158015612ee1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f05919061c20a565b9050612f1081617c32565b6022546028546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa158015612fa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc4919061c20a565b9050612fcf81617c32565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561304157600080fd5b505af1158015613055573d6000803e3d6000fd5b50506022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156130ce57600080fd5b505af11580156130e2573d6000803e3d6000fd5b50506040516001600160a01b03881681527f086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba9250602001905060405180910390a16022546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301529091169063950837aa90602401600060405180830381600087803b15801561318357600080fd5b505af1158015613197573d6000803e3d6000fd5b5050505061321b85602260009054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613216919061c4a2565b617c84565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa1580156132a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c8919061c20a565b93506132d384617c32565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa15801561335c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613380919061c20a565b925061338b83617c32565b6022546028546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa158015613416573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343a919061c20a565b915061344582617bb8565b6022546028546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa1580156134d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f4919061c20a565b905061268c81617bb8565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611a8757838290600052602060002090600202016040518060400160405290816000820180546135569061c25b565b80601f01602080910402602001604051908101604052809291908181526020018280546135829061c25b565b80156135cf5780601f106135a4576101008083540402835291602001916135cf565b820191906000526020600020905b8154815290600101906020018083116135b257829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561366957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116136165790505b50505050508152505081526020019060010190613523565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa79060240161157f565b6022546040517feab103df000000000000000000000000000000000000000000000000000000008152600160048201526001600160a01b039091169063eab103df90602401600060405180830381600087803b1580156137ac57600080fd5b505af11580156137c0573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561382557600080fd5b505af1158015613839573d6000803e3d6000fd5b5050602480546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42409381019390935216925063095ea7b391506044016020604051808303816000875af11580156138af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d3919061c20a565b506025546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240602482015291169063095ea7b3906044016020604051808303816000875af1158015613944573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613968919061c20a565b50604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025820192839052630618f58760e51b9092527f584a7938000000000000000000000000000000000000000000000000000000006029820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090604901612586565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015613a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab1919061c3e5565b9050613abe816000617b60565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b32919061c3e5565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613c15916001600160a01b039190911690600090869060040161c3fe565b600060405180830381600087803b158015613c2f57600080fd5b505af1158015613c43573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613cbc57600080fd5b505af1158015613cd0573d6000803e3d6000fd5b50506020546040517fcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e59350613d1492506001600160a01b039091169060299061c595565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613d9157600080fd5b505af1158015613da5573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507fbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c90613df3908990899060299061c5b7565b60405180910390a36022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613e7057600080fd5b505af1158015613e84573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab596055440564090613ed2908990899060299061c5b7565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f3357600080fd5b505af1158015613f47573d6000803e3d6000fd5b50506022546021546024546040517f7ab697e70000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550637ab697e79450613fa79392831692909116908a908a9060299060040161c5e2565b600060405180830381600087803b158015613fc157600080fd5b505af1158015613fd5573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015614028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061404c919061c3e5565b90506140588187617b60565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156140a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140cc919061c3e5565b90506140dc81612198898761c455565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015614152573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614176919061c3e5565b9050614183816000617b60565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156141d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f7919061c3e5565b9050614204816000617b60565b505050505050505050565b6040517f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260019060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156142a857600080fd5b505af11580156142bc573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561432c57600080fd5b505af1158015614340573d6000803e3d6000fd5b50506022546024546040517f7ab697e70000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450637ab697e793506114819260009216908790879060299060040161c5e2565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561440c57600080fd5b505af1158015614420573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561448557600080fd5b505af1158015614499573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561450957600080fd5b505af115801561451d573d6000803e3d6000fd5b5050602254602754602480546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015290831691810191909152600160448201529116925063d9caed129150606401600060405180830381600087803b15801561459857600080fd5b505af11580156145ac573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107bc57600080fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611a875783829060005260206000200180546146519061c25b565b80601f016020809104026020016040519081016040528092919081815260200182805461467d9061c25b565b80156146ca5780601f1061469f576101008083540402835291602001916146ca565b820191906000526020600020905b8154815290600101906020018083116146ad57829003601f168201915b505050505081526020019060010190614632565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561474a57600080fd5b505af115801561475e573d6000803e3d6000fd5b50506022546040517f9a590427000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639a59042791506024016107a2565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611a875760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561488f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161483c5790505b505050505081525050815260200190600101906147d0565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156149a257600080fd5b505af11580156149b6573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b158015614a1b57600080fd5b505af1158015614a2f573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614a9f57600080fd5b505af1158015614ab3573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450614b11939283169290911690600190879060040161c3ae565b600060405180830381600087803b158015614b2b57600080fd5b505af1158015614b3f573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561267857600080fd5b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614c0d57600080fd5b505af1158015614c21573d6000803e3d6000fd5b50506022546040517f9b19251a000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639b19251a91506024016107a2565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa158015614d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d3d919061c3e5565b9050614d4a816000617b60565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dbe919061c3e5565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614ea1916001600160a01b039190911690600090869060040161c3fe565b600060405180830381600087803b158015614ebb57600080fd5b505af1158015614ecf573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614f4857600080fd5b505af1158015614f5c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561501557600080fd5b505af1158015615029573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d590615074908990899061c637565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156150d557600080fd5b505af11580156150e9573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506151469392831692909116908a908a9060040161c3ae565b600060405180830381600087803b15801561516057600080fd5b505af1158015615174573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156151c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151ea919061c3e5565b90506151f7816000617b60565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015615247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061526b919061c3e5565b90506140dc8185617b60565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561531257600080fd5b505af1158015615326573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615411919060040161c1f7565b600060405180830381600087803b15801561542b57600080fd5b505af115801561543f573d6000803e3d6000fd5b50506022546021546024546040517f7ab697e70000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550637ab697e794506114819392831692909116908790879060299060040161c5e2565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611a875760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561558257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161552f5790505b505050505081525050815260200190600101906154c3565b6022546040517feab103df000000000000000000000000000000000000000000000000000000008152600160048201526103e8916001600160a01b03169063eab103df90602401600060405180830381600087803b1580156155fb57600080fd5b505af115801561560f573d6000803e3d6000fd5b5050602480546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42409381019390935216925063095ea7b391506044016020604051808303816000875af1158015615685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156a9919061c20a565b506025546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240602482015291169063095ea7b3906044016020604051808303816000875af115801561571a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061573e919061c20a565b50602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561578f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906157b3919061c3e5565b6025546028546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015615805573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615829919061c3e5565b90506000604051602001615860907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f19018152908290526022546381bad6f360e01b8352600160048401819052602484018190526044840181905260648401526001600160a01b031660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156158e357600080fd5b505af11580156158f7573d6000803e3d6000fd5b505060245460275460405160609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201526001600160a01b0390911692507f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae915060340160408051601f1981840301815290829052615980918890869061c650565b60405180910390a26022546027546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051808303601401815260348301918290526024547fe609055e000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363e609055e93615a1f9391909116908990879060380161c468565b600060405180830381600087803b158015615a3957600080fd5b505af1158015615a4d573d6000803e3d6000fd5b505050506107d08484615a60919061c67b565b602480546022546040516370a0823160e01b81526001600160a01b0391821660048201529116916370a082319101602060405180830381865afa158015615aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612198919061c3e5565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611a87578382906000526020600020018054615b129061c25b565b80601f0160208091040260200160405190810160405280929190818152602001828054615b3e9061c25b565b8015615b8b5780601f10615b6057610100808354040283529160200191615b8b565b820191906000526020600020905b815481529060010190602001808311615b6e57829003601f168201915b505050505081526020019060010190615af3565b60085460009060ff1615615bb7575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015615c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c6c919061c3e5565b1415905090565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615ccc57600080fd5b505af1158015615ce0573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615dcb919060040161c1f7565b600060405180830381600087803b158015615de557600080fd5b505af1158015615df9573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015615e4d57600080fd5b505af1158015615e61573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015615ebe57600080fd5b505af1158015615ed2573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615fbd919060040161c1f7565b600060405180830381600087803b158015615fd757600080fd5b505af1158015615feb573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561603f57600080fd5b505af1158015616053573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156160b057600080fd5b505af11580156160c4573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561611857600080fd5b505af115801561612c573d6000803e3d6000fd5b505060248054602754604051620186a09381018490526001600160a01b039283166044820152911660648201529092506000915060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527fd93c0665000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561622857600080fd5b505af115801561623c573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561629957600080fd5b505af11580156162ad573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f2945061630a9392831692909116908790879060040161c3ae565b600060405180830381600087803b15801561632457600080fd5b505af1158015616338573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561639557600080fd5b505af11580156163a9573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156163fd57600080fd5b505af1158015616411573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015616464573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616488919061c3e5565b9050616495816000617b60565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156164e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616509919061c3e5565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916165ec916001600160a01b039190911690600090869060040161c3fe565b600060405180830381600087803b15801561660657600080fd5b505af115801561661a573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561669357600080fd5b505af11580156166a7573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561677d57600080fd5b505af1158015616791573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5906167dc908990899061c637565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561683d57600080fd5b505af1158015616851573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506168ae9392831692909116908a908a9060040161c3ae565b600060405180830381600087803b1580156168c857600080fd5b505af11580156168dc573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a08231910161400b565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101616447565b60606015805480602002602001604051908101604052809291908181526020018280548015611660576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611642575050505050905090565b600080604051602001616a6d907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015616ad457600080fd5b505af1158015616ae8573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401615411565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015616b9157600080fd5b505af1158015616ba5573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250616c86919060040161c1f7565b600060405180830381600087803b158015616ca057600080fd5b505af1158015616cb4573d6000803e3d6000fd5b50506022546025546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a59042791506024016107a2565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015616e0057600080fd5b505af1158015616e14573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b158015616e7957600080fd5b505af1158015616e8d573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015616efd57600080fd5b505af1158015616f11573d6000803e3d6000fd5b50506022546021546024546040517f7ab697e70000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550637ab697e79450614b11939283169290911690600190879060299060040161c5e2565b602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600093919091169163d936547e9101602060405180830381865afa158015616fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616fff919061c20a565b905061700c600182617ade565b6022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561708157600080fd5b505af1158015617095573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561712a57600080fd5b505af115801561713e573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b1580156171a357600080fd5b505af11580156171b7573d6000803e3d6000fd5b5050602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529216935063d936547e925001602060405180830381865afa15801561721f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617243919061c20a565b905061194b600082617ade565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015617329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061734d919061c3e5565b905061735a816000617b60565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156173aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906173ce919061c3e5565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916174b1916001600160a01b039190911690600090869060040161c3fe565b600060405180830381600087803b1580156174cb57600080fd5b505af11580156174df573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561755857600080fd5b505af115801561756c573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b031690506175aa60028861c68e565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561765957600080fd5b505af115801561766d573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5906176b8908990899061c637565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561771957600080fd5b505af115801561772d573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f2945061778a9392831692909116908a908a9060040161c3ae565b600060405180830381600087803b1580156177a457600080fd5b505af11580156177b8573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561780a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061782e919061c3e5565b905061783f8161219860028961c68e565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561788f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906178b3919061c3e5565b90506140dc816178c460028a61c68e565b612198908761c455565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561792c57600080fd5b505af1158015617940573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250617a2b919060040161c1f7565b600060405180830381600087803b158015617a4557600080fd5b505af1158015617a59573d6000803e3d6000fd5b5050602254602754602480546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015290831691810191909152604481018690529116925063d9caed12915060640161265e565b6000617ac961bd90565b617ad4848483617ce5565b9150505b92915050565b6040517ff7fe347700000000000000000000000000000000000000000000000000000000815282151560048201528115156024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f7fe3477906044015b60006040518083038186803b158015617b4c57600080fd5b505afa1580156114af573d6000803e3d6000fd5b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c5490604401617b34565b6040517fa59828850000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a5982885906024015b60006040518083038186803b158015617c1e57600080fd5b505afa15801561268c573d6000803e3d6000fd5b6040517f0c9fd5810000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90630c9fd58190602401617c06565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401617b34565b600080617cf28584617d60565b9050617d556040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001617d4092919061c6c9565b60405160208183030381529060405285617d6c565b9150505b9392505050565b6000617d598383617d9a565b60c08101515160009015617d9057617d8984848460c00151617db5565b9050617d59565b617d898484617f5b565b6000617da68383618046565b617d5983836020015184617d6c565b600080617dc0618056565b90506000617dce8683618129565b90506000617de582606001518360200151856185cf565b90506000617df5838389896187e1565b90506000617e028261965e565b602081015181519192509060030b15617e7557898260400151604051602001617e2c92919061c6eb565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252617e6c9160040161c1f7565b60405180910390fd5b6000617eb86040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161982d565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90617f0b90849060040161c1f7565b602060405180830381865afa158015617f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617f4c919061c4a2565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590617fb090879060040161c1f7565b600060405180830381865afa158015617fcd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617ff5919081019061c825565b90506000618023828560405160200161800f92919061c85a565b604051602081830303815290604052619a2d565b90506001600160a01b038116617ad4578484604051602001617e2c92919061c889565b61805282826000619a40565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906180dd90849060040161c934565b600060405180830381865afa1580156180fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618122919081019061c97b565b9250505090565b61815b6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506181a66040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6181af85619b43565b602082015260006181bf86619f28565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015618201573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618229919081019061c97b565b86838560200151604051602001618243949392919061c9c4565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061829b90859060040161c1f7565b600060405180830381865afa1580156182b8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526182e0919081019061c97b565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061832890849060040161cac8565b602060405180830381865afa158015618345573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190618369919061c20a565b61837e5781604051602001617e2c919061cb1a565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906183c390849060040161cbac565b600060405180830381865afa1580156183e0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618408919081019061c97b565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061844f90849060040161cbfe565b602060405180830381865afa15801561846c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190618490919061c20a565b15618525576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906184da90849060040161cbfe565b600060405180830381865afa1580156184f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261851f919081019061c97b565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161854a919061cc50565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161857692919061ccbc565b600060405180830381865afa158015618593573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526185bb919081019061c97b565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816185eb5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061864b5761864b61cce1565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061869f5761869f61cce1565b6020026020010181905250846040516020016186bb919061cd10565b604051602081830303815290604052816002815181106186dd576186dd61cce1565b6020026020010181905250826040516020016186f9919061cd7c565b6040516020818303038152906040528160038151811061871b5761871b61cce1565b602002602001018190525060006187318261965e565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506187c2906040805180820182526000808252602091820152815180830190925284518252808501908201529061a1ab565b6187d75785604051602001617e2c919061cdbd565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015618831565b511590565b6189a5578260200151156188ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401617e6c565b8260c00151156189a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401617e6c565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816189be57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618a199061ce4e565b935060ff1681518110618a2e57618a2e61cce1565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001618a7f919061ce6d565b604051602081830303815290604052828280618a9a9061ce4e565b935060ff1681518110618aaf57618aaf61cce1565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280618afc9061ce4e565b935060ff1681518110618b1157618b1161cce1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280618b5e9061ce4e565b935060ff1681518110618b7357618b7361cce1565b60200260200101819052508760200151828280618b8f9061ce4e565b935060ff1681518110618ba457618ba461cce1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280618bf19061ce4e565b935060ff1681518110618c0657618c0661cce1565b602090810291909101015287518282618c1e8161ce4e565b935060ff1681518110618c3357618c3361cce1565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280618c809061ce4e565b935060ff1681518110618c9557618c9561cce1565b6020026020010181905250618ca94661a20c565b8282618cb48161ce4e565b935060ff1681518110618cc957618cc961cce1565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280618d169061ce4e565b935060ff1681518110618d2b57618d2b61cce1565b602002602001018190525086828280618d439061ce4e565b935060ff1681518110618d5857618d5861cce1565b6020908102919091010152855115618e7f5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282618da98161ce4e565b935060ff1681518110618dbe57618dbe61cce1565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90618e0e90899060040161c1f7565b600060405180830381865afa158015618e2b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618e53919081019061c97b565b8282618e5e8161ce4e565b935060ff1681518110618e7357618e7361cce1565b60200260200101819052505b846020015115618f4f5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282618ec88161ce4e565b935060ff1681518110618edd57618edd61cce1565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280618f2a9061ce4e565b935060ff1681518110618f3f57618f3f61cce1565b6020026020010181905250619116565b618f8761882c8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61901a5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282618fca8161ce4e565b935060ff1681518110618fdf57618fdf61cce1565b60200260200101819052508460a00151604051602001618fff919061cd10565b604051602081830303815290604052828280618f2a9061ce4e565b8460c0015115801561905d57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261905b90511590565b155b156191165760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826190a18161ce4e565b935060ff16815181106190b6576190b661cce1565b60200260200101819052506190ca8861a2ac565b6040516020016190da919061cd10565b6040516020818303038152906040528282806190f59061ce4e565b935060ff168151811061910a5761910a61cce1565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261914a90511590565b6191df5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261918d8161ce4e565b935060ff16815181106191a2576191a261cce1565b602002602001018190525084604001518282806191be9061ce4e565b935060ff16815181106191d3576191d361cce1565b60200260200101819052505b6060850151156193005760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826192288161ce4e565b935060ff168151811061923d5761923d61cce1565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156192ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526192d4919081019061c97b565b82826192df8161ce4e565b935060ff16815181106192f4576192f461cce1565b60200260200101819052505b60e085015151156193a75760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261934a8161ce4e565b935060ff168151811061935f5761935f61cce1565b602002602001018190525061937b8560e001516000015161a20c565b82826193868161ce4e565b935060ff168151811061939b5761939b61cce1565b60200260200101819052505b60e085015160200151156194515760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826193f48161ce4e565b935060ff16815181106194095761940961cce1565b60200260200101819052506194258560e001516020015161a20c565b82826194308161ce4e565b935060ff16815181106194455761944561cce1565b60200260200101819052505b60e085015160400151156194fb5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261949e8161ce4e565b935060ff16815181106194b3576194b361cce1565b60200260200101819052506194cf8560e001516040015161a20c565b82826194da8161ce4e565b935060ff16815181106194ef576194ef61cce1565b60200260200101819052505b60e085015160600151156195a55760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826195488161ce4e565b935060ff168151811061955d5761955d61cce1565b60200260200101819052506195798560e001516060015161a20c565b82826195848161ce4e565b935060ff16815181106195995761959961cce1565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156195c3576195c361c22c565b6040519080825280602002602001820160405280156195f657816020015b60608152602001906001900390816195e15790505b50905060005b8260ff168160ff16101561964f57838160ff168151811061961f5761961f61cce1565b6020026020010151828260ff168151811061963c5761963c61cce1565b60209081029190910101526001016195fc565b5093505050505b949350505050565b6196856040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161970b9186910161ced8565b600060405180830381865afa158015619728573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052619750919081019061c97b565b9050600061975e868361ad9b565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161978e919061c0e9565b6000604051808303816000875af11580156197ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526197d5919081019061cf1f565b805190915060030b158015906197ee5750602081015151155b80156197fd5750604081015151155b156187d757816000815181106198155761981561cce1565b6020026020010151604051602001617e2c919061cfd5565b606060006198628560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506198999082905b9061aef0565b156199f6576000619916826199108461990a6198dc8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061af17565b9061af79565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061997a90829061aef0565b156199e457604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526199e1905b829061affe565b90505b6199ed8161b024565b92505050617d59565b8215619a0f578484604051602001617e2c92919061d1c1565b5050604080516020810190915260008152617d59565b509392505050565b6000808251602084016000f09392505050565b8160a0015115619a4f57505050565b6000619a5c84848461b08d565b90506000619a698261965e565b602081015181519192509060030b158015619b055750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619b0590604080518082018252600080825260209182015281518083019092528451825280850190820152619893565b15619b1257505050505050565b60408201515115619b32578160400151604051602001617e2c919061d268565b80604051602001617e2c919061d2c6565b60606000619b788360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150619bdd905b829061a1ab565b15619c4c57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d5990619c4790839061b628565b61b024565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619cae905b829061b6b2565b600103619d7b57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619d14906199da565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d5990619c47905b839061affe565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619dda90619bd6565b15619f1157604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290619e4290839061b74c565b905060008160018351619e55919061c455565b81518110619e6557619e6561cce1565b60200260200101519050619f08619c47619edb6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061b628565b95945050505050565b82604051602001617e2c919061d331565b50919050565b60606000619f5d8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150619fbf90619bd6565b15619fcd57617d598161b024565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a02c90619ca7565b60010361a09657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d5990619c4790619d74565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a0f590619bd6565b15619f1157604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061a15d90839061b74c565b905060018151111561a19957806002825161a178919061c455565b8151811061a1885761a18861cce1565b602002602001015192505050919050565b5082604051602001617e2c919061d331565b80518251600091111561a1c057506000617ad8565b8151835160208501516000929161a1d69161c67b565b61a1e0919061c455565b90508260200151810361a1f7576001915050617ad8565b82516020840151819020912014905092915050565b6060600061a2198361b7f1565b600101905060008167ffffffffffffffff81111561a2395761a23961c22c565b6040519080825280601f01601f19166020018201604052801561a263576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461a26d57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161a338905b829061b8d3565b1561a37857505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a3d79061a331565b1561a41757505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a4769061a331565b1561a4b657505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a5159061a331565b8061a57a5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a57a9061a331565b1561a5ba57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a6199061a331565b8061a67e5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a67e9061a331565b1561a6be57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a71d9061a331565b8061a7825750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a7829061a331565b1561a7c257505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a8219061a331565b8061a8865750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a8869061a331565b1561a8c657505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a9259061a331565b1561a96557505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a9c49061a331565b1561aa0457505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261aa639061a331565b1561aaa357505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ab029061a331565b1561ab4257505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261aba19061a331565b1561abe157505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ac409061a331565b8061aca55750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261aca59061a331565b1561ace557505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ad449061a331565b1561ad8457505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151617e2c929060200161d40f565b60608060005b845181101561ae26578185828151811061adbd5761adbd61cce1565b602002602001015160405160200161add692919061c85a565b60405160208183030381529060405291506001855161adf5919061c455565b811461ae1e578160405160200161ae0c919061d578565b60405160208183030381529060405291505b60010161ada1565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161ae3f579050509050838160008151811061ae6a5761ae6a61cce1565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061aebe5761aebe61cce1565b6020026020010181905250818160028151811061aedd5761aedd61cce1565b6020908102919091010152949350505050565b602080830151835183519284015160009361af0e929184919061b8e7565b14159392505050565b6040805180820190915260008082526020820152600061af49846000015185602001518560000151866020015161b9f8565b905083602001518161af5b919061c455565b8451859061af6a90839061c455565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561af9e575081617ad8565b602080830151908401516001911461afc55750815160208481015190840151829020919020145b801561aff65782518451859061afdc90839061c455565b905250825160208501805161aff290839061c67b565b9052505b509192915050565b604080518082019091526000808252602082015261b01d83838361bb18565b5092915050565b60606000826000015167ffffffffffffffff81111561b0455761b04561c22c565b6040519080825280601f01601f19166020018201604052801561b06f576020820181803683370190505b509050600060208201905061b01d818560200151866000015161bbc3565b6060600061b099618056565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161b0b657905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061b1119061ce4e565b935060ff168151811061b1265761b12661cce1565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161b177919061d5b9565b60405160208183030381529060405282828061b1929061ce4e565b935060ff168151811061b1a75761b1a761cce1565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061b1f49061ce4e565b935060ff168151811061b2095761b20961cce1565b60200260200101819052508260405160200161b225919061cd7c565b60405160208183030381529060405282828061b2409061ce4e565b935060ff168151811061b2555761b25561cce1565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061b2a29061ce4e565b935060ff168151811061b2b75761b2b761cce1565b602002602001018190525061b2cc878461bc3d565b828261b2d78161ce4e565b935060ff168151811061b2ec5761b2ec61cce1565b60209081029190910101528551511561b3985760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261b33e8161ce4e565b935060ff168151811061b3535761b35361cce1565b602002602001018190525061b36c86600001518461bc3d565b828261b3778161ce4e565b935060ff168151811061b38c5761b38c61cce1565b60200260200101819052505b85608001511561b4065760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261b3e18161ce4e565b935060ff168151811061b3f65761b3f661cce1565b602002602001018190525061b46c565b841561b46c5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261b44b8161ce4e565b935060ff168151811061b4605761b46061cce1565b60200260200101819052505b6040860151511561b5085760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261b4b68161ce4e565b935060ff168151811061b4cb5761b4cb61cce1565b6020026020010181905250856040015182828061b4e79061ce4e565b935060ff168151811061b4fc5761b4fc61cce1565b60200260200101819052505b85606001511561b5725760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261b5518161ce4e565b935060ff168151811061b5665761b56661cce1565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561b5905761b59061c22c565b60405190808252806020026020018201604052801561b5c357816020015b606081526020019060019003908161b5ae5790505b50905060005b8260ff168160ff16101561b61c57838160ff168151811061b5ec5761b5ec61cce1565b6020026020010151828260ff168151811061b6095761b60961cce1565b602090810291909101015260010161b5c9565b50979650505050505050565b604080518082019091526000808252602082015281518351101561b64d575081617ad8565b8151835160208501516000929161b6639161c67b565b61b66d919061c455565b6020840151909150600190821461b68e575082516020840151819020908220145b801561b6a95783518551869061b6a590839061c455565b9052505b50929392505050565b600080826000015161b6d6856000015186602001518660000151876020015161b9f8565b61b6e0919061c67b565b90505b8351602085015161b6f4919061c67b565b811161b01d578161b7048161d5fe565b925050826000015161b73b85602001518361b71f919061c455565b865161b72b919061c455565b838660000151876020015161b9f8565b61b745919061c67b565b905061b6e3565b6060600061b75a848461b6b2565b61b76590600161c67b565b67ffffffffffffffff81111561b77d5761b77d61c22c565b60405190808252806020026020018201604052801561b7b057816020015b606081526020019060019003908161b79b5790505b50905060005b8151811015619a255761b7cc619c47868661affe565b82828151811061b7de5761b7de61cce1565b602090810291909101015260010161b7b6565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061b83a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061b866576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061b88457662386f26fc10000830492506010015b6305f5e100831061b89c576305f5e100830492506008015b612710831061b8b057612710830492506004015b6064831061b8c2576064830492506002015b600a8310617ad85760010192915050565b600061b8df838361bc7d565b159392505050565b60008085841161b9ee576020841161b99a576000841561b93257600161b90e86602061c455565b61b91990600861d618565b61b92490600261d716565b61b92e919061c455565b1990505b835181168561b941898961c67b565b61b94b919061c455565b805190935082165b81811461b9855787841161b96d5787945050505050619656565b8361b9778161d722565b94505082845116905061b953565b61b98f878561c67b565b945050505050619656565b83832061b9a7858861c455565b61b9b1908761c67b565b91505b85821061b9ec5784822080820361b9d95761b9cf868461c67b565b9350505050619656565b61b9e460018461c455565b92505061b9b4565b505b5092949350505050565b6000838186851161bb03576020851161bab2576000851561ba4457600161ba2087602061c455565b61ba2b90600861d618565b61ba3690600261d716565b61ba40919061c455565b1990505b8451811660008761ba558b8b61c67b565b61ba5f919061c455565b855190915083165b82811461baa45781861061ba8c5761ba7f8b8b61c67b565b9650505050505050619656565b8561ba968161d5fe565b96505083865116905061ba67565b859650505050505050619656565b508383206000905b61bac4868961c455565b821161bb015785832080820361bae05783945050505050619656565b61baeb60018561c67b565b935050818061baf99061d5fe565b92505061baba565b505b61bb0d878761c67b565b979650505050505050565b6040805180820190915260008082526020820152600061bb4a856000015186602001518660000151876020015161b9f8565b60208087018051918601919091525190915061bb66908261c455565b83528451602086015161bb79919061c67b565b810361bb88576000855261bbba565b8351835161bb96919061c67b565b8551869061bba590839061c455565b905250835161bbb4908261c67b565b60208601525b50909392505050565b6020811061bbfb578151835261bbda60208461c67b565b925061bbe760208361c67b565b915061bbf460208261c455565b905061bbc3565b600019811561bc2a57600161bc1183602061c455565b61bc1d9061010061d716565b61bc27919061c455565b90505b9151835183169219169190911790915250565b6060600061bc4b8484618129565b805160208083015160405193945061bc659390910161d739565b60405160208183030381529060405291505092915050565b815181516000919081111561bc90575081515b6020808501519084015160005b8381101561bd49578251825180821461bd1957600019602087101561bcf85760018461bcca89602061c455565b61bcd4919061c67b565b61bcdf90600861d618565b61bcea90600261d716565b61bcf4919061c455565b1990505b818116838216818103911461bd16579750617ad89650505050505050565b50505b61bd2460208661c67b565b945061bd3160208561c67b565b9350505060208161bd42919061c67b565b905061bc9d565b50845186516187d7919061d791565b610c9f806200d7b283390190565b611de7806200e45183390190565b611993806201023883390190565b610dc18062011bcb83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161bdd361bdd8565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161bdd36040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561be8a5783516001600160a01b031683526020938401939092019160010161be63565b509095945050505050565b60005b8381101561beb057818101518382015260200161be98565b50506000910152565b6000815180845261bed181602086016020860161be95565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561bfe1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561bfc7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261bfb184865161beb9565b602095860195909450929092019160010161bf77565b50919750505060209485019492909201915060010161bf0d565b50929695505050505050565b600081518084526020840193506020830160005b8281101561c0415781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161c001565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561bfe1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261c0b7604088018261beb9565b905060208201519150868103602088015261c0d2818361bfed565b96505050602093840193919091019060010161c073565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561bfe1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261c14b85835161beb9565b9450602093840193919091019060010161c111565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561bfe1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261c1e1604087018261bfed565b955050602093840193919091019060010161c188565b602081526000617d59602083018461beb9565b60006020828403121561c21c57600080fd5b81518015158114617d5957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061c26f57607f821691505b602082108103619f22577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561120d57806000526020600020601f840160051c8101602085101561c2cf5750805b601f840160051c820191505b8181101561268c576000815560010161c2db565b815167ffffffffffffffff81111561c3095761c30961c22c565b61c31d8161c317845461c25b565b8461c2a8565b6020601f82116001811461c351576000831561c3395750848201515b600019600385901b1c1916600184901b17845561268c565b600084815260208120601f198516915b8281101561c381578785015182556020948501946001909201910161c361565b508482101561c39f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03851681526001600160a01b03841660208201528260408201526080606082015260006187d7608083018461beb9565b60006020828403121561c3f757600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000619f08606083018461beb9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115617ad857617ad861c426565b60808152600061c47b608083018761beb9565b6001600160a01b0386166020840152846040840152828103606084015261bb0d818561beb9565b60006020828403121561c4b457600080fd5b81516001600160a01b0381168114617d5957600080fd5b6001600160a01b03815416825260018101546020830152600060028201606060408501526000815461c4fc8161c25b565b806060880152600182166000811461c51b576001811461c5555761c589565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b890101935061c589565b84600052602060002060005b8381101561c5805781548a82016080015260019091019060200161c561565b89016080019450505b50919695505050505050565b6001600160a01b0383168152604060208201526000619656604083018461c4cb565b83815260606020820152600061c5d0606083018561beb9565b82810360408401526187d7818561c4cb565b6001600160a01b03861681526001600160a01b038516602082015283604082015260a06060820152600061c61960a083018561beb9565b828103608084015261c62b818561c4cb565b98975050505050505050565b828152604060208201526000619656604083018461beb9565b60608152600061c663606083018661beb9565b84602084015282810360408401526187d7818561beb9565b80820180821115617ad857617ad861c426565b60008261c6c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000619656604083018461beb9565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161c72381601a85016020880161be95565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161c76081601c84016020880161be95565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561c78f5761c78f61c22c565b60405290565b60008067ffffffffffffffff84111561c7b05761c7b061c22c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561c7df5761c7df61c22c565b60405283815290508082840185101561c7f757600080fd5b619a2584602083018561be95565b600082601f83011261c81657600080fd5b617d598383516020850161c795565b60006020828403121561c83757600080fd5b815167ffffffffffffffff81111561c84e57600080fd5b617ad48482850161c805565b6000835161c86c81846020880161be95565b83519083019061c88081836020880161be95565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161c8c181601a85016020880161be95565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161c8fe81603384016020880161be95565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000617d59608083018461beb9565b60006020828403121561c98d57600080fd5b815167ffffffffffffffff81111561c9a457600080fd5b8201601f8101841361c9b557600080fd5b617ad48482516020840161c795565b6000855161c9d6818460208a0161be95565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161ca10816001840160208a0161be95565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161ca4e81600284016020890161be95565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161ca9081600284016020880161be95565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061cadb604083018461beb9565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161cb5281601f85016020870161be95565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061cbbf604083018461beb9565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061cc11604083018461beb9565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161cc8881601485016020870161be95565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061cccf604083018561beb9565b8281036020840152617d55818561beb9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161cd4881600185016020870161be95565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161cd8e81846020870161be95565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161ce4181604b85016020870161be95565b91909101604b0192915050565b600060ff821660ff810361ce645761ce6461c426565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161cecb81602985016020870161be95565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000617d59608083018461beb9565b60006020828403121561cf3157600080fd5b815167ffffffffffffffff81111561cf4857600080fd5b82016060818503121561cf5a57600080fd5b61cf6261c76c565b81518060030b811461cf7357600080fd5b8152602082015167ffffffffffffffff81111561cf8f57600080fd5b61cf9b8682850161c805565b602083015250604082015167ffffffffffffffff81111561cfbb57600080fd5b61cfc78682850161c805565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161d03381602185016020870161be95565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161d21f81602185016020880161be95565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161d25c81602e84016020880161be95565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161cecb81602985016020870161be95565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161d32481602285016020870161be95565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161d36981600e85016020870161be95565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161d44781601885016020880161be95565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161d48481601c84016020880161be95565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161d58a81846020870161be95565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161d5f181601c85016020870161be95565b91909101601c0192915050565b6000600019820361d6115761d61161c426565b5060010190565b8082028115828204841417617ad857617ad861c426565b6001815b600184111561d66a5780850481111561d64e5761d64e61c426565b600184161561d65c57908102905b60019390931c92800261d633565b935093915050565b60008261d68157506001617ad8565b8161d68e57506000617ad8565b816001811461d6a4576002811461d6ae5761d6ca565b6001915050617ad8565b60ff84111561d6bf5761d6bf61c426565b50506001821b617ad8565b5060208310610133831016604e8410600b841016171561d6ed575081810a617ad8565b61d6fa600019848461d62f565b806000190482111561d70e5761d70e61c426565b029392505050565b6000617d59838361d672565b60008161d7315761d73161c426565b506000190190565b6000835161d74b81846020880161be95565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161d78581600184016020880161be95565b01600101949350505050565b818103600083128015838313168383128216171561b01d5761b01d61c42656fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611de7380380611de783398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611dc78339815191528261014c565b50610143600080516020611dc78339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611b50610277600039600081816101d501528181610574015281816105c9015281816107e6015261083b0152611b506000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638456cb59116100ee578063a217fddf11610097578063d9caed1211610071578063d9caed12146103e0578063e609055e146103f3578063e63ab1e914610406578063eab103df1461042d57600080fd5b8063a217fddf146103a2578063d547741f146103aa578063d936547e146103bd57600080fd5b8063950837aa116100c8578063950837aa146103695780639a5904271461037c5780639b19251a1461038f57600080fd5b80638456cb591461030157806385f438c11461030957806391d148541461033057600080fd5b806336568abe116101505780635b1125911161012a5780635b112591146102d05780635c975abb146102e35780637ab697e7146102ee57600080fd5b806336568abe1461028e5780633f4ba83a146102a1578063570618e1146102a957600080fd5b8063248a9ca311610181578063248a9ca314610224578063252f07bf146102565780632f2ff15d1461027b57600080fd5b806301ffc9a7146101a8578063116191b6146101d057806321fc65f21461020f575b600080fd5b6101bb6101b636600461155e565b610440565b60405190151581526020015b60405180910390f35b6101f77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c7565b61022261021d3660046115fe565b6104d9565b005b610248610232366004611671565b6000908152600160208190526040909120015490565b6040519081526020016101c7565b6004546101bb9074010000000000000000000000000000000000000000900460ff1681565b61022261028936600461168a565b610699565b61022261029c36600461168a565b6106c5565b610222610716565b6102487f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101f7906001600160a01b031681565b60025460ff166101bb565b6102226102fc3660046116ba565b61074b565b610222610910565b6102487f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101bb61033e36600461168a565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61022261037736600461175d565b610942565b61022261038a36600461175d565b610ac0565b61022261039d36600461175d565b610b74565b610248600081565b6102226103b836600461168a565b610c2b565b6101bb6103cb36600461175d565b60036020526000908152604090205460ff1681565b6102226103ee36600461177a565b610c51565b6102226104013660046117bb565b610d49565b6102487f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61022261043b36600461185a565b610f75565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104e1610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461050b8161100e565b610513611018565b6001600160a01b03851660009081526003602052604090205460ff16610565576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105996001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086611057565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106069088908a908990899089906004016118c0565b600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161067f93929190611903565b60405180910390a3506106926001600055565b5050505050565b600082815260016020819052604090912001546106b58161100e565b6106bf83836110cb565b50505050565b6001600160a01b0381163314610707576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610711828261115e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107408161100e565b6107486111e5565b50565b610753610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461077d8161100e565b610785611018565b6001600160a01b03861660009081526003602052604090205460ff166107d7576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61080b6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087611057565b6040517fece697b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ece697b39061087a9089908b908a908a908a908a906004016119bf565b600060405180830381600087803b15801561089457600080fd5b505af11580156108a8573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640878787876040516108f59493929190611a16565b60405180910390a3506109086001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61093a8161100e565b610748611237565b600061094d8161100e565b6001600160a01b03821661098d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546109c4907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661115e565b506004546109fc907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661115e565b50610a277f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836110cb565b50610a527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a836110cb565b50600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527f086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba9060200160405180910390a15050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610aea8161100e565b6001600160a01b038216610b2a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610b9e8161100e565b6001600160a01b038216610bde576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610c478161100e565b6106bf838361115e565b610c59610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610c838161100e565b610c8b611018565b6001600160a01b03831660009081526003602052604090205460ff16610cdd576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf16001600160a01b0384168584611057565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610d3691815260200190565b60405180910390a3506107116001600055565b610d51610fcb565b610d59611018565b60045474010000000000000000000000000000000000000000900460ff16610dad576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610dff576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a42565b9050610e9a6001600160a01b038616333087611274565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f459190611a42565b610f4f9190611a5b565b8787604051610f62959493929190611a95565b60405180910390a2506109086001600055565b6000610f808161100e565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403611007576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61074881336112ad565b60025460ff1615611055576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611324565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166111565760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104d3565b5060006104d3565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16156111565760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104d3565b6111ed6113a0565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61123f611018565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861121a3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106bf9186918216906323b872dd90608401611084565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611320576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b60006113396001600160a01b038416836113dc565b9050805160001415801561135e57508080602001905181019061135c9190611ace565b155b15610711576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611317565b60025460ff16611055576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606113ea838360006113f1565b9392505050565b60608147101561142f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611317565b600080856001600160a01b0316848660405161144b9190611aeb565b60006040518083038185875af1925050503d8060008114611488576040519150601f19603f3d011682016040523d82523d6000602084013e61148d565b606091505b509150915061149d8683836114a7565b9695505050505050565b6060826114bc576114b78261151c565b6113ea565b81511580156114d357506001600160a01b0384163b155b15611515576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611317565b50806113ea565b80511561152c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561157057600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113ea57600080fd5b6001600160a01b038116811461074857600080fd5b60008083601f8401126115c757600080fd5b50813567ffffffffffffffff8111156115df57600080fd5b6020830191508360208285010111156115f757600080fd5b9250929050565b60008060008060006080868803121561161657600080fd5b8535611621816115a0565b94506020860135611631816115a0565b935060408601359250606086013567ffffffffffffffff81111561165457600080fd5b611660888289016115b5565b969995985093965092949392505050565b60006020828403121561168357600080fd5b5035919050565b6000806040838503121561169d57600080fd5b8235915060208301356116af816115a0565b809150509250929050565b60008060008060008060a087890312156116d357600080fd5b86356116de816115a0565b955060208701356116ee816115a0565b945060408701359350606087013567ffffffffffffffff81111561171157600080fd5b61171d89828a016115b5565b909450925050608087013567ffffffffffffffff81111561173d57600080fd5b87016060818a03121561174f57600080fd5b809150509295509295509295565b60006020828403121561176f57600080fd5b81356113ea816115a0565b60008060006060848603121561178f57600080fd5b833561179a816115a0565b925060208401356117aa816115a0565b929592945050506040919091013590565b600080600080600080608087890312156117d457600080fd5b863567ffffffffffffffff8111156117eb57600080fd5b6117f789828a016115b5565b909750955050602087013561180b816115a0565b935060408701359250606087013567ffffffffffffffff81111561182e57600080fd5b61183a89828a016115b5565b979a9699509497509295939492505050565b801515811461074857600080fd5b60006020828403121561186c57600080fd5b81356113ea8161184c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b03851660208201528360408201526080606082015260006118f8608083018486611877565b979650505050505050565b83815260406020820152600061191d604083018486611877565b95945050505050565b60008135611933816115a0565b6001600160a01b03168352602082810135908401526040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261197e57600080fd5b820160208101903567ffffffffffffffff81111561199b57600080fd5b8036038213156119aa57600080fd5b6060604086015261191d606086018284611877565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006119f760a083018587611877565b8281036080840152611a098185611926565b9998505050505050505050565b848152606060208201526000611a30606083018587611877565b82810360408401526118f88185611926565b600060208284031215611a5457600080fd5b5051919050565b818103818111156104d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611aa9606083018789611877565b8560208401528281036040840152611ac2818587611877565b98975050505050505050565b600060208284031215611ae057600080fd5b81516113ea8161184c565b6000825160005b81811015611b0c5760208186018101518583015201611af2565b50600092019182525091905056fea2646970667358221220a57d389b60850bdfffcd53692f80a9c416ca5b9b4d1b7d58052beba77fb7a96b64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960045534801561001657600080fd5b5060405161199338038061199383398101604081905261003591610238565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100dd60008261016c565b506101087f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361016c565b506101337f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361016c565b5061015e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261016c565b50505050505050505061028c565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166102125760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610216565b5060005b92915050565b80516001600160a01b038116811461023357600080fd5b919050565b6000806000806080858703121561024e57600080fd5b6102578561021c565b93506102656020860161021c565b92506102736040860161021c565b91506102816060860161021c565b905092959194509250565b60805160a0516116a36102f060003960008181610220015281816106d80152818161084a01528181610b6301528181610ce40152610e060152600081816101d401528181610648015281816106ab01528181610ad30152610b3601526116a36000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80636f8b44b0116100e3578063a217fddf1161008c578063d547741f11610066578063d547741f146103cf578063d5abeb01146103e2578063e63ab1e9146103eb57600080fd5b8063a217fddf1461038d578063a783c78914610395578063afd2dce4146103bc57600080fd5b806385f438c1116100bd57806385f438c11461030d57806391d1485414610334578063950837aa1461037a57600080fd5b80636f8b44b0146102df578063743e0c9b146102f25780638456cb591461030557600080fd5b80632f2ff15d116101455780635b1125911161011f5780635b112591146102a15780635c975abb146102c15780635e3e9fef146102cc57600080fd5b80632f2ff15d1461027357806336568abe146102865780633f4ba83a1461029957600080fd5b8063116191b611610176578063116191b6146101cf57806321e093b11461021b578063248a9ca31461024257600080fd5b806301ffc9a714610192578063106e6290146101ba575b600080fd5b6101a56101a03660046111c8565b610412565b60405190151581526020015b60405180910390f35b6101cd6101c836600461123a565b6104ab565b005b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b61026561025036600461126d565b60009081526002602052604090206001015490565b6040519081526020016101b1565b6101cd610281366004611286565b610550565b6101cd610294366004611286565b61057b565b6101cd6105d4565b6003546101f69073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff166101a5565b6101cd6102da3660046112fb565b610609565b6101cd6102ed36600461126d565b61079e565b6101cd61030036600461126d565b61080d565b6101cd6108b7565b6102657f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a5610342366004611286565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cd61038836600461135d565b6108e9565b610265600081565b6102657f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101cd6103ca366004611378565b610a94565b6101cd6103dd366004611286565b610c2e565b61026560045481565b6102657f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104a557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104b3610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104dd81610c96565b6104e5610ca0565b6104f0848484610cdf565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161053891815260200190565b60405180910390a25061054b6001600055565b505050565b60008281526002602052604090206001015461056b81610c96565b6105758383610e67565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146105ca576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61054b8282610f67565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fe81610c96565b610606611026565b50565b610611610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461063b81610c96565b610643610ca0565b61066e7f00000000000000000000000000000000000000000000000000000000000000008684610cdf565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610708907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611459565b600060405180830381600087803b15801561072257600080fd5b505af1158015610736573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610784939291906114b6565b60405180910390a2506107976001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c881610c96565b6107d0610ca0565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c906020015b60405180910390a15050565b610815610ca0565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156108a357600080fd5b505af1158015610797573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108e181610c96565b6106066110a3565b60006108f481610c96565b73ffffffffffffffffffffffffffffffffffffffff8216610941576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354610985907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e49073ffffffffffffffffffffffffffffffffffffffff16610f67565b506003546109ca907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb9073ffffffffffffffffffffffffffffffffffffffff16610f67565b506109f57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610e67565b50610a207f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610e67565b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f190602001610801565b610a9c610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ac681610c96565b610ace610ca0565b610af97f00000000000000000000000000000000000000000000000000000000000000008785610cdf565b6040517fece697b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ece697b390610b95907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161157d565b600060405180830381600087803b158015610baf57600080fd5b505af1158015610bc3573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac87878786604051610c1394939291906115ee565b60405180910390a250610c266001600055565b505050505050565b600082815260026020526040902060010154610c4981610c96565b6105758383610f67565b600260005403610c8f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61060681336110fc565b60015460ff1615610cdd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d71919061161a565b610d7b9084611633565b1115610db3576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610e4a57600080fd5b505af1158015610e5e573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610efd3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016104a5565b5060006104a5565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104a5565b61102e61118c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6110ab610ca0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611079565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611188576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610cdd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156111da57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461120a57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461123557600080fd5b919050565b60008060006060848603121561124f57600080fd5b61125884611211565b95602085013595506040909401359392505050565b60006020828403121561127f57600080fd5b5035919050565b6000806040838503121561129957600080fd5b823591506112a960208401611211565b90509250929050565b60008083601f8401126112c457600080fd5b50813567ffffffffffffffff8111156112dc57600080fd5b6020830191508360208285010111156112f457600080fd5b9250929050565b60008060008060006080868803121561131357600080fd5b61131c86611211565b945060208601359350604086013567ffffffffffffffff81111561133f57600080fd5b61134b888289016112b2565b96999598509660600135949350505050565b60006020828403121561136f57600080fd5b61120a82611211565b60008060008060008060a0878903121561139157600080fd5b61139a87611211565b955060208701359450604087013567ffffffffffffffff8111156113bd57600080fd5b6113c989828a016112b2565b90955093505060608701359150608087013567ffffffffffffffff8111156113f057600080fd5b87016060818a03121561140257600080fd5b809150509295509295509295565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114ab608083018486611410565b979650505050505050565b8381526040602082015260006114d0604083018486611410565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff6114f782611211565b1682526020818101359083015260006040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261153c57600080fd5b820160208101903567ffffffffffffffff81111561155957600080fd5b80360382131561156857600080fd5b606060408601526114d0606086018284611410565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a0606082015260006115cf60a083018587611410565b82810360808401526115e181856114d9565b9998505050505050505050565b848152606060208201526000611608606083018587611410565b82810360408401526114ab81856114d9565b60006020828403121561162c57600080fd5b5051919050565b808201808211156104a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206fa68043397322d1636dba3251c7e40948706562c8e08173e2df059302eb268d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d9d806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c578063a9b0a73c146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106f9565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7fcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e53382604051610210929190610a2f565b60405180910390a150565b61022361036f565b6000610230600285610b38565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610be1565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c6b565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d2e565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d4b565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610a6d83610694565b166040820152600080602084013590508060608401525060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ab957600080fd5b830160208101903567ffffffffffffffff811115610ad657600080fd5b803603821315610ae557600080fd5b606060808501528060a0850152808260c0860137600060c0828601015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509392505050565b600082610b6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b8e578181015183820152602001610b76565b50506000910152565b60008151808452610baf816020860160208601610b73565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c1660a0830186610b97565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c61578151865260209586019590910190600101610c43565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610cfe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610ce9858351610b97565b94506020938401939190910190600101610caf565b505050508281036040840152610d148186610c2f565b915050610d25606083018415159052565b95945050505050565b600060208284031215610d4057600080fd5b81516104f681610840565b60008251610d5d818460208701610b73565b919091019291505056fea264697066735822122098725982494f2e15151404f3fbfc80b0517e09c0b3e8ae0e6602ac62c5ba8d0d64736f6c634300081a0033a26469706673582212206c71b9f27589e13ecce6a2e023f734911ee19c20448cc674488a1c0d102be76564736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDepositLegacy\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositLegacyFailsIfNotSupported\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositLegacyFailsIfTokenNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgrade\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfSenderIsNotTSSUpdater\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelistFailsIfSenderIsNotWhitelister\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelistFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelistFailsIfSenderIsNotWhitelister\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelistFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f93a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c806385f438c1116101b2578063b5508aa9116100f9578063eb1ce7f9116100a2578063fa2a70741161007c578063fa2a7074146105b0578063fa7626d4146105b8578063fb176c12146105c5578063fe8e5f1b146105cd57600080fd5b8063eb1ce7f914610598578063f0c8e7e0146105a0578063f4221f08146105a857600080fd5b8063cbd57e2f116100d3578063cbd57e2f14610561578063e20c9f7114610569578063e63ab1e91461057157600080fd5b8063b5508aa914610539578063ba414fa614610541578063c713f8271461055957600080fd5b8063a3f9d0e01161015b578063af298bb111610135578063af298bb114610521578063b0464fdc14610529578063b421ca701461053157600080fd5b8063a3f9d0e0146104ea578063a4943deb146104f2578063a783c789146104fa57600080fd5b80639918c1c21161018c5780639918c1c2146104d25780639fc7fd55146104da578063a217fddf146104e257600080fd5b806385f438c11461048e5780639158c623146104b5578063916a17c6146104bd57600080fd5b806349c783dd1161028157806366d9a9a01161022a57806371149c941161020457806371149c94146104615780637e91c50f1461046957806382c529921461047157806385226c811461047957600080fd5b806366d9a9a01461043c5780636a621854146104515780637099d6f81461045957600080fd5b806352ff59391161025b57806352ff5939146103d8578063570618e1146103e05780635d62c8601461041557600080fd5b806349c783dd146103c05780634df42da1146103c857806351ecdf3c146103d057600080fd5b80632ade3880116102e35780633e73ecb4116102bd5780633e73ecb4146103a85780633ee92923146103b05780633f7286f4146103b857600080fd5b80632ade3880146103835780632be6a162146103985780633e5e3c23146103a057600080fd5b80631779672f116103145780631779672f146103555780631ed7831c1461035d578063284cb9291461037b57600080fd5b8063070f2ad01461033b5780630a9254e4146103455780630eee72a91461034d575b600080fd5b6103436105d5565b005b6103436107c1565b61034361124a565b6103436114c7565b610365611605565b604051610372919061c4c0565b60405180910390f35b610343611667565b61038b611948565b604051610372919061c55c565b610343611a8a565b610365611c36565b610343611c96565b6103436121e9565b6103656122a5565b610343612305565b610343612642565b61034361279a565b610343612958565b6104077f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b604051908152602001610372565b6104077f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b610444613188565b604051610372919061c6c2565b6103436132f5565b6103436133ae565b61034361365c565b610343613e69565b610343613ff4565b610481614266565b604051610372919061c760565b6104077f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610343614336565b6104c5614404565b604051610372919061c7d7565b6103436144ea565b6103436147ce565b610407600081565b61034361489c565b610343614e7b565b6104077f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61034361508e565b6104c5615632565b610343615718565b610481615c4e565b610549615d1e565b6040519015158152602001610372565b610343615df2565b610343616a43565b610365616ae1565b6104077f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b610343616b41565b610343616c4d565b610343616df9565b610343617050565b601f546105499060ff1681565b610343617331565b610343617988565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561064757600080fd5b505af115801561065b573d6000803e3d6000fd5b5050602754604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250610712919060040161c86e565b600060405180830381600087803b15801561072c57600080fd5b505af1158015610740573d6000803e3d6000fd5b50506021546025546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063950837aa91506024015b600060405180830381600087803b1580156107a757600080fd5b505af11580156107bb573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805482166156781790556028805490911661987617905560405161081f9061c3ed565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156108a4573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516108e99061c3ed565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561096d573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152600091610a4c916084015b60408051601f198184030181529190526020810180516001600160e01b03167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052617b61565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c0000000000000000000000000000000060208201526027546025549251939095048416602484015293831660448301529091166064820152919250610aef91608401610a04565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691909117909155604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c0000000000006020820152601f546024805460275460255495516101009094048716928401929092528516604483015284166064820152919092166084820152919250610be19160a40160408051601f198184030181529190526020810180516001600160e01b03167ff8c8765e00000000000000000000000000000000000000000000000000000000179052617b61565b602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316179055604051909150610c239061c3fa565b604051809103906000f080158015610c3f573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610ceb57600080fd5b505af1158015610cff573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610d7557600080fd5b505af1158015610d89573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b158015610df457600080fd5b505af1158015610e08573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b158015610e7357600080fd5b505af1158015610e87573d6000803e3d6000fd5b50506021546023546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b158015610eed57600080fd5b505af1158015610f01573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b50506023546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b158015610fe657600080fd5b505af1158015610ffa573d6000803e3d6000fd5b5050602480546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156110f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611117919061c881565b506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b5050604080516060810182526023546001600160a01b039081168252600160208084019182528451908101855260008152938301849052825160298054925167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931691909316171781559093509150602a906107bb908261c96b565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561131c57600080fd5b505af1158015611330573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611406919060040161c86e565b600060405180830381600087803b15801561142057600080fd5b505af1158015611434573d6000803e3d6000fd5b50506021546020546023546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506114919392831692909116908790879060040161ca2a565b600060405180830381600087803b1580156114ab57600080fd5b505af11580156114bf573d6000803e3d6000fd5b505050505050565b6023546026546040516000602482018190526001600160a01b039384166044830152929091166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602754905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561159657600080fd5b505af11580156115aa573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401611406565b6060601680548060200260200160405190810160405280929190818152602001828054801561165d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161163f575b5050505050905090565b602154602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600093919091169163d936547e9101602060405180830381865afa1580156116d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f4919061c881565b9050611701600082617b80565b6021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561177657600080fd5b505af115801561178a573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549150600090a260255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561181f57600080fd5b505af1158015611833573d6000803e3d6000fd5b5050602154602480546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639b19251a925001600060405180830381600087803b15801561189857600080fd5b505af11580156118ac573d6000803e3d6000fd5b5050602154602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529216935063d936547e925001602060405180830381865afa158015611914573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611938919061c881565b9050611945600182617b80565b50565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611a8157600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611a6a5783829060005260206000200180546119dd9061c8d2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a099061c8d2565b8015611a565780601f10611a2b57610100808354040283529160200191611a56565b820191906000526020600020905b815481529060010190602001808311611a3957829003601f168201915b5050505050815260200190600101906119be565b50505050815250508152602001906001019061196c565b50505050905090565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ad857600080fd5b505af1158015611aec573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180516001600160e01b03167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611bb8919060040161c86e565b600060405180830381600087803b158015611bd257600080fd5b505af1158015611be6573d6000803e3d6000fd5b5050602154602480546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639b19251a92500161078d565b6060601880548060200260200160405190810160405280929190818152602001828054801561165d576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161163f575050505050905090565b6023546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015611ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0d919061ca61565b9050611d1a816000617c02565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8f919061ca61565b602654604080516001600160a01b039283166024820152604480820188905282518083039091018152606490910182526020810180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611e4e92911690600090869060040161ca7a565b600060405180830381600087803b158015611e6857600080fd5b505af1158015611e7c573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611ef557600080fd5b505af1158015611f09573d6000803e3d6000fd5b50506023546026546040518881526001600160a01b039283169450911691507fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9060200160405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611fae57600080fd5b505af1158015611fc2573d6000803e3d6000fd5b50506021546026546023546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152604481018990529116925063d9caed129150606401600060405180830381600087803b15801561203a57600080fd5b505af115801561204e573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156120a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c5919061ca61565b90506120d18186617c02565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612146919061ca61565b905061215b81612156888761cad1565b617c02565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa1580156121af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d3919061ca61565b90506121e0816000617c02565b50505050505050565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611302565b6060601780548060200260200160405190810160405280929190818152602001828054801561165d576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161163f575050505050905090565b6021546040517feab103df000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169063eab103df90602401600060405180830381600087803b15801561236457600080fd5b505af1158015612378573d6000803e3d6000fd5b50506023546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156123ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612410919061c881565b50602480546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424093810193909352169063095ea7b3906044016020604051808303816000875af1158015612483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a7919061c881565b50604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025820192839052630618f58760e51b9092527f73cba663000000000000000000000000000000000000000000000000000000006029820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906049015b600060405180830381600087803b15801561254f57600080fd5b505af1158015612563573d6000803e3d6000fd5b505060215460265460405160609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201526001600160a01b03909116925063e609055e915060340160408051601f19818403018152908290526023547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261260d926001600160a01b03909116906103e890879060040161cae4565b600060405180830381600087803b15801561262757600080fd5b505af115801561263b573d6000803e3d6000fd5b5050505050565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156126b457600080fd5b505af11580156126c8573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561273857600080fd5b505af115801561274c573d6000803e3d6000fd5b50506021546040517f950837aa000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063950837aa915060240161078d565b6023546026546040516001602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602754905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561286957600080fd5b505af115801561287d573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156128ed57600080fd5b505af1158015612901573d6000803e3d6000fd5b50506021546023546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321fc65f293506114919260009216908790879060040161ca2a565b6021546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4600482015261432160248201819052916000916001600160a01b03909116906391d1485490604401602060405180830381865afa1580156129e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0b919061c881565b9050612a1681617c5a565b6021546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b03848116602483015260009216906391d1485490604401602060405180830381865afa158015612aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac4919061c881565b9050612acf81617c5a565b6021546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa158015612b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b83919061c881565b9050612b8e81617cd4565b6021546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa158015612c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c42919061c881565b9050612c4d81617cd4565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612cbf57600080fd5b505af1158015612cd3573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612d4c57600080fd5b505af1158015612d60573d6000803e3d6000fd5b5050602754604080516001600160a01b03928316815291891660208301527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6935001905060405180910390a16021546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301529091169063950837aa90602401600060405180830381600087803b158015612e0c57600080fd5b505af1158015612e20573d6000803e3d6000fd5b50505050612ea485602160009054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9f919061cb1e565b617d26565b6021546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa158015612f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f51919061c881565b9350612f5c84617cd4565b6021546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa158015612fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613009919061c881565b925061301483617cd4565b6021546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa15801561309f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130c3919061c881565b91506130ce82617c5a565b6021546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa158015613159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317d919061c881565b905061263b81617c5a565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611a8157838290600052602060002090600202016040518060400160405290816000820180546131df9061c8d2565b80601f016020809104026020016040519081016040528092919081815260200182805461320b9061c8d2565b80156132585780601f1061322d57610100808354040283529160200191613258565b820191906000526020600020905b81548152906001019060200180831161323b57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156132dd57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841161329f5790505b505050505081525050815260200190600101906131ac565b6023546026546040516000602482018190526001600160a01b039384166044830152929091166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602754905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa79060240161157c565b6021546040517feab103df000000000000000000000000000000000000000000000000000000008152600160048201526001600160a01b039091169063eab103df90602401600060405180830381600087803b15801561340d57600080fd5b505af1158015613421573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b15801561348757600080fd5b505af115801561349b573d6000803e3d6000fd5b50506023546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af115801561350f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613533919061c881565b50602480546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424093810193909352169063095ea7b3906044016020604051808303816000875af11580156135a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ca919061c881565b50604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025820192839052630618f58760e51b9092527f584a7938000000000000000000000000000000000000000000000000000000006029820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090604901612535565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f19018152908290526023546020546370a0823160e01b84526001600160a01b0390811660048501529193506000929116906370a0823190602401602060405180830381865afa1580156136f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613714919061ca61565b9050613721816000617c02565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015613772573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613796919061ca61565b601f54604080516001600160a01b0361010090930483166024820152604480820189905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000006001600160e01b0390911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba39261385c92911690600090869060040161ca7a565b600060405180830381600087803b15801561387657600080fd5b505af115801561388a573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561390357600080fd5b505af1158015613917573d6000803e3d6000fd5b505050507f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e601f60019054906101000a90046001600160a01b0316602960405161396292919061cc1c565b60405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156139e357600080fd5b505af11580156139f7573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143690613a45908990899060299061cc3e565b60405180910390a36021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613ac257600080fd5b505af1158015613ad6573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b90613b24908990899060299061cc3e565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b8557600080fd5b505af1158015613b99573d6000803e3d6000fd5b50506021546020546023546040517fc709ab6e0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c709ab6e9450613bf99392831692909116908a908a9060299060040161cc69565b600060405180830381600087803b158015613c1357600080fd5b505af1158015613c27573d6000803e3d6000fd5b50506023546020546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015613c7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c9f919061ca61565b9050613cab8187617c02565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015613cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d20919061ca61565b9050613d3081612156898761cad1565b602354601f546020546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b0390811660048401529081166024830152600092169063dd62ed3e90604401602060405180830381865afa158015613da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dcc919061ca61565b9050613dd9816000617c02565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa158015613e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e51919061ca61565b9050613e5e816000617c02565b505050505050505050565b6040517f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260019060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f0257600080fd5b505af1158015613f16573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613f8657600080fd5b505af1158015613f9a573d6000803e3d6000fd5b50506021546023546040517fc709ab6e0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c709ab6e93506114919260009216908790879060299060040161cc69565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561406657600080fd5b505af115801561407a573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b1580156140e057600080fd5b505af11580156140f4573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561416457600080fd5b505af1158015614178573d6000803e3d6000fd5b50506021546026546023546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152600160448201529116925063d9caed129150606401600060405180830381600087803b1580156141f057600080fd5b505af1158015614204573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a757600080fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611a815783829060005260206000200180546142a99061c8d2565b80601f01602080910402602001604051908101604052809291908181526020018280546142d59061c8d2565b80156143225780601f106142f757610100808354040283529160200191614322565b820191906000526020600020905b81548152906001019060200180831161430557829003601f168201915b50505050508152602001906001019061428a565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b50506021546040517f9a590427000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639a590427915060240161078d565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611a815760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156144d257602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116144945790505b50505050508152505081526020019060010190614428565b602354602654604051600160248201526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a20000000000000000000000000000000000000000000000000000000017905260275490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156145ce57600080fd5b505af11580156145e2573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b15801561464857600080fd5b505af115801561465c573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156146cc57600080fd5b505af11580156146e0573d6000803e3d6000fd5b50506021546020546023546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f2945061473e939283169290911690600190879060040161ca2a565b600060405180830381600087803b15801561475857600080fd5b505af115801561476c573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561262757600080fd5b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561483a57600080fd5b505af115801561484e573d6000803e3d6000fd5b50506021546040517f9b19251a000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639b19251a915060240161078d565b604080516004808252602480830184526020830180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905260235460265494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa158015614932573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614956919061ca61565b9050614963816000617c02565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156149b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149d8919061ca61565b601f54604080516001600160a01b0361010090930483166024820152604480820189905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000006001600160e01b0390911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392614a9e92911690600090869060040161ca7a565b600060405180830381600087803b158015614ab857600080fd5b505af1158015614acc573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614b4557600080fd5b505af1158015614b59573d6000803e3d6000fd5b5050601f546040516101009091046001600160a01b031681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09250602001905060405180910390a16021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614c1757600080fd5b505af1158015614c2b573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d590614c76908990899061ccbe565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614cd757600080fd5b505af1158015614ceb573d6000803e3d6000fd5b50506021546020546023546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450614d489392831692909116908a908a9060040161ca2a565b600060405180830381600087803b158015614d6257600080fd5b505af1158015614d76573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ded919061ca61565b9050614dfa816000617c02565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e6f919061ca61565b9050613d308185617c02565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614f1657600080fd5b505af1158015614f2a573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615000919060040161c86e565b600060405180830381600087803b15801561501a57600080fd5b505af115801561502e573d6000803e3d6000fd5b50506021546020546023546040517fc709ab6e0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c709ab6e94506114919392831692909116908790879060299060040161cc69565b602154604080518082018252601b81527f4552433230437573746f647955706772616465546573742e736f6c00000000006020808301919091528251908101909252600082526025546150ee936001600160a01b03908116939116617d87565b6021546023546026546040516370a0823160e01b81526001600160a01b03918216600482015292811692620186a09260009216906370a0823190602401602060405180830381865afa158015615148573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061516c919061ca61565b9050615179816000617c02565b6023546040516370a0823160e01b81526001600160a01b03858116600483015260009216906370a0823190602401602060405180830381865afa1580156151c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151e8919061ca61565b602654604080516001600160a01b039283166024820152604480820188905282518083039091018152606490910182526020810180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926152a792911690600090869060040161ca7a565b600060405180830381600087803b1580156152c157600080fd5b505af11580156152d5573d6000803e3d6000fd5b50506040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b0388166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561534a57600080fd5b505af115801561535e573d6000803e3d6000fd5b50506023546026546040518881526001600160a01b039283169450911691507fd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a49060200160405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561540357600080fd5b505af1158015615417573d6000803e3d6000fd5b50506026546023546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216602482015260448101889052908816925063d9caed129150606401600060405180830381600087803b15801561548d57600080fd5b505af11580156154a1573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156154f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615518919061ca61565b90506155248186617c02565b6023546040516370a0823160e01b81526001600160a01b03888116600483015260009216906370a0823190602401602060405180830381865afa15801561556f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615593919061ca61565b90506155a381612156888761cad1565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa1580156155f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061561b919061ca61565b9050615628816000617c02565b5050505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611a815760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561570057602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116156c25790505b50505050508152505081526020019060010190615656565b6021546040517feab103df000000000000000000000000000000000000000000000000000000008152600160048201526103e8916001600160a01b03169063eab103df90602401600060405180830381600087803b15801561577957600080fd5b505af115801561578d573d6000803e3d6000fd5b50506023546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af1158015615801573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615825919061c881565b50602480546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424093810193909352169063095ea7b3906044016020604051808303816000875af1158015615898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906158bc919061c881565b506023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561590e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615932919061ca61565b602480546027546040516370a0823160e01b81526001600160a01b0391821660048201529394506000939116916370a082319101602060405180830381865afa158015615983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906159a7919061ca61565b905060006040516020016159de907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f19018152908290526021546381bad6f360e01b8352600160048401819052602484018190526044840181905260648401526001600160a01b031660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615a6157600080fd5b505af1158015615a75573d6000803e3d6000fd5b505060235460265460405160609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201526001600160a01b0390911692507f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae915060340160408051601f1981840301815290829052615afe918890869061ccd7565b60405180910390a26021546026546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051808303601401815260348301918290526023547fe609055e000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363e609055e93615b9d9391909116908990879060380161cae4565b600060405180830381600087803b158015615bb757600080fd5b505af1158015615bcb573d6000803e3d6000fd5b505050506107bb8484615bde919061cd02565b6023546021546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015615c2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612156919061ca61565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611a81578382906000526020600020018054615c919061c8d2565b80601f0160208091040260200160405190810160405280929190818152602001828054615cbd9061c8d2565b8015615d0a5780601f10615cdf57610100808354040283529160200191615d0a565b820191906000526020600020905b815481529060010190602001808311615ced57829003601f168201915b505050505081526020019060010190615c72565b60085460009060ff1615615d36575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015615dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615deb919061ca61565b1415905090565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615e4b57600080fd5b505af1158015615e5f573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615f35919060040161c86e565b600060405180830381600087803b158015615f4f57600080fd5b505af1158015615f63573d6000803e3d6000fd5b50505050602160009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015615fb757600080fd5b505af1158015615fcb573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561602857600080fd5b505af115801561603c573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250616112919060040161c86e565b600060405180830381600087803b15801561612c57600080fd5b505af1158015616140573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561619457600080fd5b505af11580156161a8573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561620557600080fd5b505af1158015616219573d6000803e3d6000fd5b50505050602160009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561626d57600080fd5b505af1158015616281573d6000803e3d6000fd5b5050602354602654604051620186a0602482018190526001600160a01b0393841660448301529290911660648201529092506000915060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a20000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527fd93c0665000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561636a57600080fd5b505af115801561637e573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156163db57600080fd5b505af11580156163ef573d6000803e3d6000fd5b50506021546020546023546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f2945061644c9392831692909116908790879060040161ca2a565b600060405180830381600087803b15801561646657600080fd5b505af115801561647a573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156164d757600080fd5b505af11580156164eb573d6000803e3d6000fd5b50505050602160009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561653f57600080fd5b505af1158015616553573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa1580156165a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906165cb919061ca61565b90506165d8816000617c02565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015616629573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061664d919061ca61565b601f54604080516001600160a01b0361010090930483166024820152604480820189905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000006001600160e01b0390911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba39261671392911690600090869060040161ca7a565b600060405180830381600087803b15801561672d57600080fd5b505af1158015616741573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156167ba57600080fd5b505af11580156167ce573d6000803e3d6000fd5b5050601f54602354602654604080516101009094046001600160a01b039081168552602085018c9052928316908401521660608201527f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609250608001905060405180910390a16021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156168a957600080fd5b505af11580156168bd573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d590616908908990899061ccbe565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561696957600080fd5b505af115801561697d573d6000803e3d6000fd5b50506021546020546023546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506169da9392831692909116908a908a9060040161ca2a565b600060405180830381600087803b1580156169f457600080fd5b505af1158015616a08573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401613c5e565b60235460265460408051620186a060248083018290526001600160a01b039586166044840181905295909416606480840182905284518085039091018152608490930184526020830180516001600160e01b03167f357fc5a20000000000000000000000000000000000000000000000000000000017905292516370a0823160e01b815260048101939093529390926000926370a08231910161658a565b6060601580548060200260200160405190810160405280929190818152602001828054801561165d576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161163f575050505050905090565b600080604051602001616b77907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015616bde57600080fd5b505af1158015616bf2573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401615000565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015616c9b57600080fd5b505af1158015616caf573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180516001600160e01b03167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250616d7b919060040161c86e565b600060405180830381600087803b158015616d9557600080fd5b505af1158015616da9573d6000803e3d6000fd5b5050602154602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a59042792500161078d565b602354602654604051600160248201526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a20000000000000000000000000000000000000000000000000000000017905260275490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015616edd57600080fd5b505af1158015616ef1573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b158015616f5757600080fd5b505af1158015616f6b573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015616fdb57600080fd5b505af1158015616fef573d6000803e3d6000fd5b50506021546020546023546040517fc709ab6e0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c709ab6e945061473e939283169290911690600190879060299060040161cc69565b6021546023546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600092919091169063d936547e90602401602060405180830381865afa1580156170ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906170de919061c881565b90506170eb600182617b80565b6021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561716057600080fd5b505af1158015617174573d6000803e3d6000fd5b50506023546040516001600160a01b0390911692507f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919150600090a260255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561720957600080fd5b505af115801561721d573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b15801561728357600080fd5b505af1158015617297573d6000803e3d6000fd5b50506021546023546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063d936547e9150602401602060405180830381865afa158015617300573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617324919061c881565b9050611945600082617b80565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc51316910000000000000000000000000000000000000000000000000000000017905260235460265491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa1580156173f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061741c919061ca61565b9050617429816000617c02565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561747a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061749e919061ca61565b601f54604080516001600160a01b0361010090930483166024820152604480820189905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000006001600160e01b0390911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba39261756492911690600090869060040161ca7a565b600060405180830381600087803b15801561757e57600080fd5b505af1158015617592573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561760b57600080fd5b505af115801561761f573d6000803e3d6000fd5b5050601f547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60925061010090046001600160a01b0316905061766260028861cd15565b602354602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561771157600080fd5b505af1158015617725573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d590617770908990899061ccbe565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156177d157600080fd5b505af11580156177e5573d6000803e3d6000fd5b50506021546020546023546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506178429392831692909116908a908a9060040161ca2a565b600060405180830381600087803b15801561785c57600080fd5b505af1158015617870573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156178c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906178e7919061ca61565b90506178f88161215660028961cd15565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015617949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061796d919061ca61565b9050613d308161797e60028a61cd15565b612156908761cad1565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156179e657600080fd5b505af11580156179fa573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250617ad0919060040161c86e565b600060405180830381600087803b158015617aea57600080fd5b505af1158015617afe573d6000803e3d6000fd5b50506021546026546023546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152604481018690529116925063d9caed12915060640161260d565b6000617b6b61c407565b617b76848483617d9c565b9150505b92915050565b6040517ff7fe347700000000000000000000000000000000000000000000000000000000815282151560048201528115156024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f7fe3477906044015b60006040518083038186803b158015617bee57600080fd5b505afa1580156114bf573d6000803e3d6000fd5b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c5490604401617bd6565b6040517fa59828850000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a5982885906024015b60006040518083038186803b158015617cc057600080fd5b505afa15801561263b573d6000803e3d6000fd5b6040517f0c9fd5810000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90630c9fd58190602401617ca8565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401617bd6565b617d8f61c407565b61263b8585858486617e17565b600080617da98584617f17565b9050617e0c6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001617df792919061cd50565b60405160208183030381529060405285617f23565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015617e8957600080fd5b505af1925050508015617e9a575060015b617eaf57617eaa87878787617f51565b6121e0565b617ebb87878787617f51565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015617ef657600080fd5b505af1158015617f0a573d6000803e3d6000fd5b5050505050505050505050565b6000617e108383617f6a565b60c08101515160009015617f4757617f4084848460c00151617f85565b9050617e10565b617f40848461812b565b6000617f5d8483618216565b905061263b858285618222565b6000617f7683836185ec565b617e1083836020015184617f23565b600080617f906185fc565b90506000617f9e86836186cf565b90506000617fb58260600151836020015185618b75565b90506000617fc583838989618d87565b90506000617fd282619c04565b602081015181519192509060030b1561804557898260400151604051602001617ffc92919061cd72565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261803c9160040161c86e565b60405180910390fd5b60006180886040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001619dd3565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906180db90849060040161c86e565b602060405180830381865afa1580156180f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061811c919061cb1e565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061818090879060040161c86e565b600060405180830381865afa15801561819d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526181c5919081019061ceac565b905060006181f382856040516020016181df92919061cee1565b604051602081830303815290604052619fd3565b90506001600160a01b038116617b76578484604051602001617ffc92919061cf10565b6000617f768383619fe6565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa1580156182be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906182e2919061ca61565b9050806184895760006182f486619ff2565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061837f905b6040805180820182526000808252602091820152815180830190925284518252808501908201529061a0d5565b8061838b575060008451115b1561840e576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906183d7908890889060040161cd50565b600060405180830381600087803b1580156183f157600080fd5b505af1158015618405573d6000803e3d6000fd5b50505050618483565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561846a57600080fd5b505af115801561847e573d6000803e3d6000fd5b505050505b5061263b565b80600061849582619ff2565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506184f790618352565b80618503575060008551115b15618588576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90618551908a908a908a9060040161cfbb565b600060405180830381600087803b15801561856b57600080fd5b505af115801561857f573d6000803e3d6000fd5b505050506121e0565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015617ef657600080fd5b6185f88282600061a0e9565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061868390849060040161cfec565b600060405180830381865afa1580156186a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526186c8919081019061d033565b9250505090565b6187016040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061874c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6187558561a1ec565b602082015260006187658661a5d1565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156187a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526187cf919081019061d033565b868385602001516040516020016187e9949392919061d07c565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061884190859060040161c86e565b600060405180830381865afa15801561885e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618886919081019061d033565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906188ce90849060040161d180565b602060405180830381865afa1580156188eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061890f919061c881565b6189245781604051602001617ffc919061d1d2565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061896990849060040161d264565b600060405180830381865afa158015618986573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526189ae919081019061d033565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906189f590849060040161d2b6565b602060405180830381865afa158015618a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190618a36919061c881565b15618acb576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890618a8090849060040161d2b6565b600060405180830381865afa158015618a9d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618ac5919081019061d033565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001618af0919061d308565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401618b1c92919061d374565b600060405180830381865afa158015618b39573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618b61919081019061d033565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081618b915790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110618bf157618bf161d399565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110618c4557618c4561d399565b602002602001018190525084604051602001618c61919061d3c8565b60405160208183030381529060405281600281518110618c8357618c8361d399565b602002602001018190525082604051602001618c9f919061d434565b60405160208183030381529060405281600381518110618cc157618cc161d399565b60200260200101819052506000618cd782619c04565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250618d68906040805180820182526000808252602091820152815180830190925284518252808501908201529061a854565b618d7d5785604051602001617ffc919061d475565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015618dd7565b511590565b618f4b57826020015115618e93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161803c565b8260c0015115618f4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161803c565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081618f6457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618fbf9061d506565b935060ff1681518110618fd457618fd461d399565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001619025919061d525565b6040516020818303038152906040528282806190409061d506565b935060ff16815181106190555761905561d399565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806190a29061d506565b935060ff16815181106190b7576190b761d399565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806191049061d506565b935060ff16815181106191195761911961d399565b602002602001018190525087602001518282806191359061d506565b935060ff168151811061914a5761914a61d399565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806191979061d506565b935060ff16815181106191ac576191ac61d399565b6020908102919091010152875182826191c48161d506565b935060ff16815181106191d9576191d961d399565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806192269061d506565b935060ff168151811061923b5761923b61d399565b602002602001018190525061924f4661a8b5565b828261925a8161d506565b935060ff168151811061926f5761926f61d399565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806192bc9061d506565b935060ff16815181106192d1576192d161d399565b6020026020010181905250868282806192e99061d506565b935060ff16815181106192fe576192fe61d399565b60209081029190910101528551156194255760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261934f8161d506565b935060ff16815181106193645761936461d399565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906193b490899060040161c86e565b600060405180830381865afa1580156193d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526193f9919081019061d033565b82826194048161d506565b935060ff16815181106194195761941961d399565b60200260200101819052505b8460200151156194f55760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261946e8161d506565b935060ff16815181106194835761948361d399565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806194d09061d506565b935060ff16815181106194e5576194e561d399565b60200260200101819052506196bc565b61952d618dd28660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6195c05760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826195708161d506565b935060ff16815181106195855761958561d399565b60200260200101819052508460a001516040516020016195a5919061d3c8565b6040516020818303038152906040528282806194d09061d506565b8460c0015115801561960357506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261960190511590565b155b156196bc5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826196478161d506565b935060ff168151811061965c5761965c61d399565b60200260200101819052506196708861a955565b604051602001619680919061d3c8565b60405160208183030381529060405282828061969b9061d506565b935060ff16815181106196b0576196b061d399565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526196f090511590565b6197855760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826197338161d506565b935060ff16815181106197485761974861d399565b602002602001018190525084604001518282806197649061d506565b935060ff16815181106197795761977961d399565b60200260200101819052505b6060850151156198a65760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826197ce8161d506565b935060ff16815181106197e3576197e361d399565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015619852573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261987a919081019061d033565b82826198858161d506565b935060ff168151811061989a5761989a61d399565b60200260200101819052505b60e0850151511561994d5760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826198f08161d506565b935060ff16815181106199055761990561d399565b60200260200101819052506199218560e001516000015161a8b5565b828261992c8161d506565b935060ff16815181106199415761994161d399565b60200260200101819052505b60e085015160200151156199f75760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261999a8161d506565b935060ff16815181106199af576199af61d399565b60200260200101819052506199cb8560e001516020015161a8b5565b82826199d68161d506565b935060ff16815181106199eb576199eb61d399565b60200260200101819052505b60e08501516040015115619aa15760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282619a448161d506565b935060ff1681518110619a5957619a5961d399565b6020026020010181905250619a758560e001516040015161a8b5565b8282619a808161d506565b935060ff1681518110619a9557619a9561d399565b60200260200101819052505b60e08501516060015115619b4b5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282619aee8161d506565b935060ff1681518110619b0357619b0361d399565b6020026020010181905250619b1f8560e001516060015161a8b5565b8282619b2a8161d506565b935060ff1681518110619b3f57619b3f61d399565b60200260200101819052505b60008160ff1667ffffffffffffffff811115619b6957619b6961c8a3565b604051908082528060200260200182016040528015619b9c57816020015b6060815260200190600190039081619b875790505b50905060005b8260ff168160ff161015619bf557838160ff1681518110619bc557619bc561d399565b6020026020010151828260ff1681518110619be257619be261d399565b6020908102919091010152600101619ba2565b5093505050505b949350505050565b619c2b6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91619cb19186910161d590565b600060405180830381865afa158015619cce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052619cf6919081019061d033565b90506000619d04868361b444565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401619d34919061c760565b6000604051808303816000875af1158015619d53573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052619d7b919081019061d5d7565b805190915060030b15801590619d945750602081015151155b8015619da35750604081015151155b15618d7d5781600081518110619dbb57619dbb61d399565b6020026020010151604051602001617ffc919061d68d565b60606000619e088560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150619e3f9082905b9061b599565b15619f9c576000619ebc82619eb684619eb0619e828a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061b5c0565b9061b622565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150619f2090829061b599565b15619f8a57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619f87905b829061b6a7565b90505b619f938161b6cd565b92505050617e10565b8215619fb5578484604051602001617ffc92919061d879565b5050604080516020810190915260008152617e10565b509392505050565b6000808251602084016000f09392505050565b6185f88282600161a0e9565b60408051600481526024810182526020810180516001600160e01b03167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b0386169161a052919061d920565b600060405180830381855afa9150503d806000811461a08d576040519150601f19603f3d011682016040523d82523d6000602084013e61a092565b606091505b509150915081801561a0a5575060208151115b1561a0be5780806020019051810190619bfc919061d033565b505060408051602081019091526000815292915050565b600061a0e1838361b736565b159392505050565b8160a001511561a0f857505050565b600061a10584848461b811565b9050600061a11282619c04565b602081015181519192509060030b15801561a1ae5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a1ae90604080518082018252600080825260209182015281518083019092528451825280850190820152619e39565b1561a1bb57505050505050565b6040820151511561a1db578160400151604051602001617ffc919061d93c565b80604051602001617ffc919061d99a565b6060600061a2218360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061a286905b829061a854565b1561a2f557604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e109061a2f090839061bdac565b61b6cd565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a357905b829061be36565b60010361a42457604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a3bd90619f80565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e109061a2f0905b839061b6a7565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a4839061a27f565b1561a5ba57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061a4eb90839061bed0565b90506000816001835161a4fe919061cad1565b8151811061a50e5761a50e61d399565b6020026020010151905061a5b161a2f061a5846040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061bdac565b95945050505050565b82604051602001617ffc919061da05565b50919050565b6060600061a6068360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061a6689061a27f565b1561a67657617e108161b6cd565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a6d59061a350565b60010361a73f57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e109061a2f09061a41d565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a79e9061a27f565b1561a5ba57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061a80690839061bed0565b905060018151111561a84257806002825161a821919061cad1565b8151811061a8315761a83161d399565b602002602001015192505050919050565b5082604051602001617ffc919061da05565b80518251600091111561a86957506000617b7a565b8151835160208501516000929161a87f9161cd02565b61a889919061cad1565b90508260200151810361a8a0576001915050617b7a565b82516020840151819020912014905092915050565b6060600061a8c28361bf75565b600101905060008167ffffffffffffffff81111561a8e25761a8e261c8a3565b6040519080825280601f01601f19166020018201604052801561a90c576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461a91657509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161a9e1905b829061a0d5565b1561aa2157505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261aa809061a9da565b1561aac057505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ab1f9061a9da565b1561ab5f57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261abbe9061a9da565b8061ac235750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ac239061a9da565b1561ac6357505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261acc29061a9da565b8061ad275750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ad279061a9da565b1561ad6757505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261adc69061a9da565b8061ae2b5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ae2b9061a9da565b1561ae6b57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261aeca9061a9da565b8061af2f5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261af2f9061a9da565b1561af6f57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261afce9061a9da565b1561b00e57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b06d9061a9da565b1561b0ad57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b10c9061a9da565b1561b14c57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b1ab9061a9da565b1561b1eb57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b24a9061a9da565b1561b28a57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b2e99061a9da565b8061b34e5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b34e9061a9da565b1561b38e57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b3ed9061a9da565b1561b42d57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151617ffc929060200161dae3565b60608060005b845181101561b4cf578185828151811061b4665761b46661d399565b602002602001015160405160200161b47f92919061cee1565b60405160208183030381529060405291506001855161b49e919061cad1565b811461b4c7578160405160200161b4b5919061dc4c565b60405160208183030381529060405291505b60010161b44a565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161b4e8579050509050838160008151811061b5135761b51361d399565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061b5675761b56761d399565b6020026020010181905250818160028151811061b5865761b58661d399565b6020908102919091010152949350505050565b602080830151835183519284015160009361b5b7929184919061c057565b14159392505050565b6040805180820190915260008082526020820152600061b5f2846000015185602001518560000151866020015161c168565b905083602001518161b604919061cad1565b8451859061b61390839061cad1565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561b647575081617b7a565b602080830151908401516001911461b66e5750815160208481015190840151829020919020145b801561b69f5782518451859061b68590839061cad1565b905250825160208501805161b69b90839061cd02565b9052505b509192915050565b604080518082019091526000808252602082015261b6c683838361c288565b5092915050565b60606000826000015167ffffffffffffffff81111561b6ee5761b6ee61c8a3565b6040519080825280601f01601f19166020018201604052801561b718576020820181803683370190505b509050600060208201905061b6c6818560200151866000015161c333565b815181516000919081111561b749575081515b6020808501519084015160005b8381101561b802578251825180821461b7d257600019602087101561b7b15760018461b78389602061cad1565b61b78d919061cd02565b61b79890600861dc8d565b61b7a390600261dd8b565b61b7ad919061cad1565b1990505b818116838216818103911461b7cf579750617b7a9650505050505050565b50505b61b7dd60208661cd02565b945061b7ea60208561cd02565b9350505060208161b7fb919061cd02565b905061b756565b5084518651618d7d919061dd97565b6060600061b81d6185fc565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161b83a57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061b8959061d506565b935060ff168151811061b8aa5761b8aa61d399565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161b8fb919061ddb7565b60405160208183030381529060405282828061b9169061d506565b935060ff168151811061b92b5761b92b61d399565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061b9789061d506565b935060ff168151811061b98d5761b98d61d399565b60200260200101819052508260405160200161b9a9919061d434565b60405160208183030381529060405282828061b9c49061d506565b935060ff168151811061b9d95761b9d961d399565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061ba269061d506565b935060ff168151811061ba3b5761ba3b61d399565b602002602001018190525061ba50878461c3ad565b828261ba5b8161d506565b935060ff168151811061ba705761ba7061d399565b60209081029190910101528551511561bb1c5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261bac28161d506565b935060ff168151811061bad75761bad761d399565b602002602001018190525061baf086600001518461c3ad565b828261bafb8161d506565b935060ff168151811061bb105761bb1061d399565b60200260200101819052505b85608001511561bb8a5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261bb658161d506565b935060ff168151811061bb7a5761bb7a61d399565b602002602001018190525061bbf0565b841561bbf05760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261bbcf8161d506565b935060ff168151811061bbe45761bbe461d399565b60200260200101819052505b6040860151511561bc8c5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261bc3a8161d506565b935060ff168151811061bc4f5761bc4f61d399565b6020026020010181905250856040015182828061bc6b9061d506565b935060ff168151811061bc805761bc8061d399565b60200260200101819052505b85606001511561bcf65760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261bcd58161d506565b935060ff168151811061bcea5761bcea61d399565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561bd145761bd1461c8a3565b60405190808252806020026020018201604052801561bd4757816020015b606081526020019060019003908161bd325790505b50905060005b8260ff168160ff16101561bda057838160ff168151811061bd705761bd7061d399565b6020026020010151828260ff168151811061bd8d5761bd8d61d399565b602090810291909101015260010161bd4d565b50979650505050505050565b604080518082019091526000808252602082015281518351101561bdd1575081617b7a565b8151835160208501516000929161bde79161cd02565b61bdf1919061cad1565b6020840151909150600190821461be12575082516020840151819020908220145b801561be2d5783518551869061be2990839061cad1565b9052505b50929392505050565b600080826000015161be5a856000015186602001518660000151876020015161c168565b61be64919061cd02565b90505b8351602085015161be78919061cd02565b811161b6c6578161be888161ddfc565b925050826000015161bebf85602001518361bea3919061cad1565b865161beaf919061cad1565b838660000151876020015161c168565b61bec9919061cd02565b905061be67565b6060600061bede848461be36565b61bee990600161cd02565b67ffffffffffffffff81111561bf015761bf0161c8a3565b60405190808252806020026020018201604052801561bf3457816020015b606081526020019060019003908161bf1f5790505b50905060005b8151811015619fcb5761bf5061a2f0868661b6a7565b82828151811061bf625761bf6261d399565b602090810291909101015260010161bf3a565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061bfbe577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061bfea576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061c00857662386f26fc10000830492506010015b6305f5e100831061c020576305f5e100830492506008015b612710831061c03457612710830492506004015b6064831061c046576064830492506002015b600a8310617b7a5760010192915050565b60008085841161c15e576020841161c10a576000841561c0a257600161c07e86602061cad1565b61c08990600861dc8d565b61c09490600261dd8b565b61c09e919061cad1565b1990505b835181168561c0b1898961cd02565b61c0bb919061cad1565b805190935082165b81811461c0f55787841161c0dd5787945050505050619bfc565b8361c0e78161de16565b94505082845116905061c0c3565b61c0ff878561cd02565b945050505050619bfc565b83832061c117858861cad1565b61c121908761cd02565b91505b85821061c15c5784822080820361c1495761c13f868461cd02565b9350505050619bfc565b61c15460018461cad1565b92505061c124565b505b5092949350505050565b6000838186851161c273576020851161c222576000851561c1b457600161c19087602061cad1565b61c19b90600861dc8d565b61c1a690600261dd8b565b61c1b0919061cad1565b1990505b8451811660008761c1c58b8b61cd02565b61c1cf919061cad1565b855190915083165b82811461c2145781861061c1fc5761c1ef8b8b61cd02565b9650505050505050619bfc565b8561c2068161ddfc565b96505083865116905061c1d7565b859650505050505050619bfc565b508383206000905b61c234868961cad1565b821161c2715785832080820361c2505783945050505050619bfc565b61c25b60018561cd02565b935050818061c2699061ddfc565b92505061c22a565b505b61c27d878761cd02565b979650505050505050565b6040805180820190915260008082526020820152600061c2ba856000015186602001518660000151876020015161c168565b60208087018051918601919091525190915061c2d6908261cad1565b83528451602086015161c2e9919061cd02565b810361c2f8576000855261c32a565b8351835161c306919061cd02565b8551869061c31590839061cad1565b905250835161c324908261cd02565b60208601525b50909392505050565b6020811061c36b578151835261c34a60208461cd02565b925061c35760208361cd02565b915061c36460208261cad1565b905061c333565b600019811561c39a57600161c38183602061cad1565b61c38d9061010061dd8b565b61c397919061cad1565b90505b9151835183169219169190911790915250565b6060600061c3bb84846186cf565b805160208083015160405193945061c3d59390910161de2d565b60405160208183030381529060405291505092915050565b610c9f8061de8683390190565b610de08061eb2583390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161c44a61c44f565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161c44a6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561c5015783516001600160a01b031683526020938401939092019160010161c4da565b509095945050505050565b60005b8381101561c52757818101518382015260200161c50f565b50506000910152565b6000815180845261c54881602086016020860161c50c565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561c658577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561c63e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261c62884865161c530565b602095860195909450929092019160010161c5ee565b50919750505060209485019492909201915060010161c584565b50929695505050505050565b600081518084526020840193506020830160005b8281101561c6b85781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161c678565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561c658577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261c72e604088018261c530565b905060208201519150868103602088015261c749818361c664565b96505050602093840193919091019060010161c6ea565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561c658577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261c7c285835161c530565b9450602093840193919091019060010161c788565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561c658577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261c858604087018261c664565b955050602093840193919091019060010161c7ff565b602081526000617e10602083018461c530565b60006020828403121561c89357600080fd5b81518015158114617e1057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061c8e657607f821691505b60208210810361a5cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561c96657806000526020600020601f840160051c8101602085101561c9465750805b601f840160051c820191505b8181101561263b576000815560010161c952565b505050565b815167ffffffffffffffff81111561c9855761c98561c8a3565b61c9998161c993845461c8d2565b8461c91f565b6020601f82116001811461c9cd576000831561c9b55750848201515b600019600385901b1c1916600184901b17845561263b565b600084815260208120601f198516915b8281101561c9fd578785015182556020948501946001909201910161c9dd565b508482101561ca1b5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000618d7d608083018461c530565b60006020828403121561ca7357600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061a5b1606083018461c530565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115617b7a57617b7a61caa2565b60808152600061caf7608083018761c530565b6001600160a01b0386166020840152846040840152828103606084015261c27d818561c530565b60006020828403121561cb3057600080fd5b81516001600160a01b0381168114617e1057600080fd5b600081546001600160a01b038116845267ffffffffffffffff8160a01c1660208501525060018201606060408501526000815461cb838161c8d2565b806060880152600182166000811461cba2576001811461cbdc5761cc10565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b890101935061cc10565b84600052602060002060005b8381101561cc075781548a82016080015260019091019060200161cbe8565b89016080019450505b50919695505050505050565b6001600160a01b0383168152604060208201526000619bfc604083018461cb47565b83815260606020820152600061cc57606083018561c530565b8281036040840152618d7d818561cb47565b6001600160a01b03861681526001600160a01b038516602082015283604082015260a06060820152600061cca060a083018561c530565b828103608084015261ccb2818561cb47565b98975050505050505050565b828152604060208201526000619bfc604083018461c530565b60608152600061ccea606083018661c530565b8460208401528281036040840152618d7d818561c530565b80820180821115617b7a57617b7a61caa2565b60008261cd4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000619bfc604083018461c530565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161cdaa81601a85016020880161c50c565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161cde781601c84016020880161c50c565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561ce165761ce1661c8a3565b60405290565b60008067ffffffffffffffff84111561ce375761ce3761c8a3565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561ce665761ce6661c8a3565b60405283815290508082840185101561ce7e57600080fd5b619fcb84602083018561c50c565b600082601f83011261ce9d57600080fd5b617e108383516020850161ce1c565b60006020828403121561cebe57600080fd5b815167ffffffffffffffff81111561ced557600080fd5b617b768482850161ce8c565b6000835161cef381846020880161c50c565b83519083019061cf0781836020880161c50c565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161cf4881601a85016020880161c50c565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161cf8581603384016020880161c50c565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b038316602082015260606040820152600061a5b1606083018461c530565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000617e10608083018461c530565b60006020828403121561d04557600080fd5b815167ffffffffffffffff81111561d05c57600080fd5b8201601f8101841361d06d57600080fd5b617b768482516020840161ce1c565b6000855161d08e818460208a0161c50c565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161d0c8816001840160208a0161c50c565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161d10681600284016020890161c50c565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161d14881600284016020880161c50c565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061d193604083018461c530565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161d20a81601f85016020870161c50c565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061d277604083018461c530565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061d2c9604083018461c530565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161d34081601485016020870161c50c565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061d387604083018561c530565b8281036020840152617e0c818561c530565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161d40081600185016020870161c50c565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161d44681846020870161c50c565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161d4f981604b85016020870161c50c565b91909101604b0192915050565b600060ff821660ff810361d51c5761d51c61caa2565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161d58381602985016020870161c50c565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000617e10608083018461c530565b60006020828403121561d5e957600080fd5b815167ffffffffffffffff81111561d60057600080fd5b82016060818503121561d61257600080fd5b61d61a61cdf3565b81518060030b811461d62b57600080fd5b8152602082015167ffffffffffffffff81111561d64757600080fd5b61d6538682850161ce8c565b602083015250604082015167ffffffffffffffff81111561d67357600080fd5b61d67f8682850161ce8c565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161d6eb81602185016020870161c50c565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161d8d781602185016020880161c50c565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161d91481602e84016020880161c50c565b01602e01949350505050565b6000825161d93281846020870161c50c565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161d58381602985016020870161c50c565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161d9f881602285016020870161c50c565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161da3d81600e85016020870161c50c565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161db1b81601885016020880161c50c565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161db5881601c84016020880161c50c565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161dc5e81846020870161c50c565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417617b7a57617b7a61caa2565b6001815b600184111561dcdf5780850481111561dcc35761dcc361caa2565b600184161561dcd157908102905b60019390931c92800261dca8565b935093915050565b60008261dcf657506001617b7a565b8161dd0357506000617b7a565b816001811461dd19576002811461dd235761dd3f565b6001915050617b7a565b60ff84111561dd345761dd3461caa2565b50506001821b617b7a565b5060208310610133831016604e8410600b841016171561dd62575081810a617b7a565b61dd6f600019848461dca4565b806000190482111561dd835761dd8361caa2565b029392505050565b6000617e10838361dce7565b818103600083128015838313168383128216171561b6c65761b6c661caa2565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161ddef81601c85016020870161c50c565b91909101601c0192915050565b6000600019820361de0f5761de0f61caa2565b5060010190565b60008161de255761de2561caa2565b506000190190565b6000835161de3f81846020880161c50c565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161de7981600184016020880161c50c565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610dbc806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c578063660b9de01461008c5780636ed70169146100ac57005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6100a73660046106f9565b6101aa565b3480156100b857600080fd5b5061006a6101e6565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e33826040516101db929190610a78565b60405180910390a150565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61022361036f565b6000610230600285610b57565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610c00565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c8a565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d4d565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d6a565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610ab683610694565b1660408201526000602083013567ffffffffffffffff8116808214610ada57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610b1657600080fd5b830160208101903567ffffffffffffffff811115610b3357600080fd5b803603821315610b4257600080fd5b606060808501526105b660a085018284610a2f565b600082610b8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610bad578181015183820152602001610b95565b50506000910152565b60008151808452610bce816020860160208601610b92565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c3560a0830186610bb6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c80578151865260209586019590910190600101610c62565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610d1d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610d08858351610bb6565b94506020938401939190910190600101610cce565b505050508281036040840152610d338186610c4e565b915050610d44606083018415159052565b95945050505050565b600060208284031215610d5f57600080fd5b81516104f681610840565b60008251610d7c818460208701610b92565b919091019291505056fea2646970667358221220084d92a79207d5024a4431b52d5d0038017908edb40aae1ce1d94a5ec3de914064736f6c634300081a0033a26469706673582212204dcacafc6be4305cc3ad991dfc9225748bb446e7db3c6d834433abce2a2547b364736f6c634300081a0033", } // ERC20CustodyTestABI is the input ABI used to generate the binding from. @@ -1067,27 +1067,6 @@ func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestForwardCallToRec return _ERC20CustodyTest.Contract.TestForwardCallToReceiveNoParamsThroughCustody(&_ERC20CustodyTest.TransactOpts) } -// TestNewCustodyFailsIfAddressesAreZero is a paid mutator transaction binding the contract method 0x4b5838d2. -// -// Solidity: function testNewCustodyFailsIfAddressesAreZero() returns() -func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestNewCustodyFailsIfAddressesAreZero(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ERC20CustodyTest.contract.Transact(opts, "testNewCustodyFailsIfAddressesAreZero") -} - -// TestNewCustodyFailsIfAddressesAreZero is a paid mutator transaction binding the contract method 0x4b5838d2. -// -// Solidity: function testNewCustodyFailsIfAddressesAreZero() returns() -func (_ERC20CustodyTest *ERC20CustodyTestSession) TestNewCustodyFailsIfAddressesAreZero() (*types.Transaction, error) { - return _ERC20CustodyTest.Contract.TestNewCustodyFailsIfAddressesAreZero(&_ERC20CustodyTest.TransactOpts) -} - -// TestNewCustodyFailsIfAddressesAreZero is a paid mutator transaction binding the contract method 0x4b5838d2. -// -// Solidity: function testNewCustodyFailsIfAddressesAreZero() returns() -func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestNewCustodyFailsIfAddressesAreZero() (*types.Transaction, error) { - return _ERC20CustodyTest.Contract.TestNewCustodyFailsIfAddressesAreZero(&_ERC20CustodyTest.TransactOpts) -} - // TestTSSUpgrade is a paid mutator transaction binding the contract method 0x52ff5939. // // Solidity: function testTSSUpgrade() returns() @@ -1214,6 +1193,27 @@ func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestUnwhitelistFails return _ERC20CustodyTest.Contract.TestUnwhitelistFailsIfZeroAddress(&_ERC20CustodyTest.TransactOpts) } +// TestUpgradeAndWithdraw is a paid mutator transaction binding the contract method 0xaf298bb1. +// +// Solidity: function testUpgradeAndWithdraw() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestUpgradeAndWithdraw(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testUpgradeAndWithdraw") +} + +// TestUpgradeAndWithdraw is a paid mutator transaction binding the contract method 0xaf298bb1. +// +// Solidity: function testUpgradeAndWithdraw() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestUpgradeAndWithdraw() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestUpgradeAndWithdraw(&_ERC20CustodyTest.TransactOpts) +} + +// TestUpgradeAndWithdraw is a paid mutator transaction binding the contract method 0xaf298bb1. +// +// Solidity: function testUpgradeAndWithdraw() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestUpgradeAndWithdraw() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestUpgradeAndWithdraw(&_ERC20CustodyTest.TransactOpts) +} + // TestWhitelist is a paid mutator transaction binding the contract method 0x284cb929. // // Solidity: function testWhitelist() returns() @@ -2846,9 +2846,9 @@ type ERC20CustodyTestReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*ERC20CustodyTestReceivedRevertIterator, error) { logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "ReceivedRevert") @@ -2858,9 +2858,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReceivedRevert(opts *bi return &ERC20CustodyTestReceivedRevertIterator{contract: _ERC20CustodyTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestReceivedRevert) (event.Subscription, error) { logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "ReceivedRevert") @@ -2895,9 +2895,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReceivedRevert(opts *bin }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseReceivedRevert(log types.Log) (*ERC20CustodyTestReceivedRevert, error) { event := new(ERC20CustodyTestReceivedRevert) if err := _ERC20CustodyTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { @@ -2984,9 +2984,9 @@ type ERC20CustodyTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyTestRevertedIterator, error) { var toRule []interface{} @@ -3005,9 +3005,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReverted(opts *bind.Fil return &ERC20CustodyTestRevertedIterator{contract: _ERC20CustodyTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -3051,9 +3051,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReverted(opts *bind.Watc }), nil } -// ParseReverted is a log parse operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseReverted(log types.Log) (*ERC20CustodyTestReverted, error) { event := new(ERC20CustodyTestReverted) if err := _ERC20CustodyTest.contract.UnpackLog(event, "Reverted", log); err != nil { @@ -3276,13 +3276,14 @@ func (it *ERC20CustodyTestUpdatedCustodyTSSAddressIterator) Close() error { // ERC20CustodyTestUpdatedCustodyTSSAddress represents a UpdatedCustodyTSSAddress event raised by the ERC20CustodyTest contract. type ERC20CustodyTestUpdatedCustodyTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedCustodyTSSAddress is a free log retrieval operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// FilterUpdatedCustodyTSSAddress is a free log retrieval operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterUpdatedCustodyTSSAddress(opts *bind.FilterOpts) (*ERC20CustodyTestUpdatedCustodyTSSAddressIterator, error) { logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "UpdatedCustodyTSSAddress") @@ -3292,9 +3293,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterUpdatedCustodyTSSAddres return &ERC20CustodyTestUpdatedCustodyTSSAddressIterator{contract: _ERC20CustodyTest.contract, event: "UpdatedCustodyTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedCustodyTSSAddress is a free log subscription operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// WatchUpdatedCustodyTSSAddress is a free log subscription operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchUpdatedCustodyTSSAddress(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestUpdatedCustodyTSSAddress) (event.Subscription, error) { logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "UpdatedCustodyTSSAddress") @@ -3329,9 +3330,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchUpdatedCustodyTSSAddress }), nil } -// ParseUpdatedCustodyTSSAddress is a log parse operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// ParseUpdatedCustodyTSSAddress is a log parse operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseUpdatedCustodyTSSAddress(log types.Log) (*ERC20CustodyTestUpdatedCustodyTSSAddress, error) { event := new(ERC20CustodyTestUpdatedCustodyTSSAddress) if err := _ERC20CustodyTest.contract.UnpackLog(event, "UpdatedCustodyTSSAddress", log); err != nil { @@ -3410,13 +3411,14 @@ func (it *ERC20CustodyTestUpdatedGatewayTSSAddressIterator) Close() error { // ERC20CustodyTestUpdatedGatewayTSSAddress represents a UpdatedGatewayTSSAddress event raised by the ERC20CustodyTest contract. type ERC20CustodyTestUpdatedGatewayTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterUpdatedGatewayTSSAddress(opts *bind.FilterOpts) (*ERC20CustodyTestUpdatedGatewayTSSAddressIterator, error) { logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "UpdatedGatewayTSSAddress") @@ -3426,9 +3428,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterUpdatedGatewayTSSAddres return &ERC20CustodyTestUpdatedGatewayTSSAddressIterator{contract: _ERC20CustodyTest.contract, event: "UpdatedGatewayTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchUpdatedGatewayTSSAddress(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestUpdatedGatewayTSSAddress) (event.Subscription, error) { logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "UpdatedGatewayTSSAddress") @@ -3463,9 +3465,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchUpdatedGatewayTSSAddress }), nil } -// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseUpdatedGatewayTSSAddress(log types.Log) (*ERC20CustodyTestUpdatedGatewayTSSAddress, error) { event := new(ERC20CustodyTestUpdatedGatewayTSSAddress) if err := _ERC20CustodyTest.contract.UnpackLog(event, "UpdatedGatewayTSSAddress", log); err != nil { @@ -4005,9 +4007,9 @@ type ERC20CustodyTestWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyTestWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -4026,9 +4028,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterWithdrawnAndReverted(op return &ERC20CustodyTestWithdrawnAndRevertedIterator{contract: _ERC20CustodyTest.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestWithdrawnAndReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -4072,9 +4074,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchWithdrawnAndReverted(opt }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseWithdrawnAndReverted(log types.Log) (*ERC20CustodyTestWithdrawnAndReverted, error) { event := new(ERC20CustodyTestWithdrawnAndReverted) if err := _ERC20CustodyTest.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { @@ -4084,6 +4086,160 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseWithdrawnAndReverted(log return event, nil } +// ERC20CustodyTestWithdrawnV2Iterator is returned from FilterWithdrawnV2 and is used to iterate over the raw logs and unpacked data for WithdrawnV2 events raised by the ERC20CustodyTest contract. +type ERC20CustodyTestWithdrawnV2Iterator struct { + Event *ERC20CustodyTestWithdrawnV2 // 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 *ERC20CustodyTestWithdrawnV2Iterator) 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(ERC20CustodyTestWithdrawnV2) + 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(ERC20CustodyTestWithdrawnV2) + 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 *ERC20CustodyTestWithdrawnV2Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyTestWithdrawnV2Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyTestWithdrawnV2 represents a WithdrawnV2 event raised by the ERC20CustodyTest contract. +type ERC20CustodyTestWithdrawnV2 struct { + To common.Address + Token common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnV2 is a free log retrieval operation binding the contract event 0xd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a4. +// +// Solidity: event WithdrawnV2(address indexed to, address indexed token, uint256 amount) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterWithdrawnV2(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyTestWithdrawnV2Iterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "WithdrawnV2", toRule, tokenRule) + if err != nil { + return nil, err + } + return &ERC20CustodyTestWithdrawnV2Iterator{contract: _ERC20CustodyTest.contract, event: "WithdrawnV2", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnV2 is a free log subscription operation binding the contract event 0xd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a4. +// +// Solidity: event WithdrawnV2(address indexed to, address indexed token, uint256 amount) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchWithdrawnV2(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestWithdrawnV2, to []common.Address, token []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "WithdrawnV2", toRule, tokenRule) + 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(ERC20CustodyTestWithdrawnV2) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "WithdrawnV2", 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 +} + +// ParseWithdrawnV2 is a log parse operation binding the contract event 0xd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a4. +// +// Solidity: event WithdrawnV2(address indexed to, address indexed token, uint256 amount) +func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseWithdrawnV2(log types.Log) (*ERC20CustodyTestWithdrawnV2, error) { + event := new(ERC20CustodyTestWithdrawnV2) + if err := _ERC20CustodyTest.contract.UnpackLog(event, "WithdrawnV2", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ERC20CustodyTestLogIterator is returned from FilterLog and is used to iterate over the raw logs and unpacked data for Log events raised by the ERC20CustodyTest contract. type ERC20CustodyTestLogIterator struct { Event *ERC20CustodyTestLog // Event containing the contract specifics and raw log diff --git a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go index 737bc2d3e..fda271ddf 100644 --- a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go +++ b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go @@ -29,44 +29,15 @@ var ( _ = abi.ConvertType ) -// RevertContext is an auto generated low-level Go binding around an user-defined struct. -type RevertContext struct { - Asset common.Address - Amount *big.Int - RevertMessage []byte -} - // ERC20CustodyEchidnaTestMetaData contains all meta data concerning the ERC20CustodyEchidnaTest contract. var ERC20CustodyEchidnaTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setSupportsLegacy\",\"inputs\":[{\"name\":\"_supportsLegacy\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"supportsLegacy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unwhitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x600680546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b179091526100799291906102a816565b600780546001600160a01b03929092166001600160a01b03199283168117909155600880549092161790553480156100b057600080fd5b5060085460065460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556101486000826102c7565b506101737f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102c7565b5061019e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102c7565b506101b7600080516020617419833981519152826102c7565b506101d0600080516020617419833981519152836102c7565b505050506040516101e090613853565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f080158015610232573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b0392831617905560085460405163ae7a3a6f60e01b815230600482015291169063ae7a3a6f90602401600060405180830381600087803b15801561028b57600080fd5b505af115801561029f573d6000803e3d6000fd5b505050506148d4565b60006102b2613860565b6102bd84848361035a565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166103525760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102c1565b5060006102c1565b60008061036785846103d6565b90506103cb6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103b5929190613969565b60408051601f19818403018152919052856103e2565b9150505b9392505050565b60006103cf8383610416565b60c0810151516000901561040c5761040584848460c0015161043760201b60201c565b90506103cf565b61040584846105b0565b6000610422838361067d565b6103cf838360200151846103e260201b60201c565b60008061044261068d565b905060006104508683610727565b9050600061046d8260600151836020015185610b4a60201b60201c565b9050600061047d83838989610cff565b9050600061048a8261197b565b602081015181519192509060030b156104e3578982604001516040516020016104b492919061398d565b60408051601f198184030181529082905262461bcd60e51b82526104da916004016139f3565b60405180910390fd5b600061052c6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611b1260201b60201c565b60405163c6ce059d60e01b81529091506000805160206173f98339815191529063c6ce059d906105609084906004016139f3565b602060405180830381865afa15801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190613a06565b9b9a5050505050505050505050565b604051638d1cc92560e01b815260009081906000805160206173f983398151915290638d1cc925906105e69087906004016139f3565b600060405180830381865afa158015610603573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261062b9190810190613afb565b9050600061065a8285604051602001610645929190613b2f565b60408051601f19818403018152919052611cb2565b90506001600160a01b0381166102bd5784846040516020016104b4929190613b5e565b61068982826000611cc5565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b81526060916000805160206173f983398151915291829063d145736c906106db908490600401613bed565b600060405180830381865afa1580156106f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107209190810190613c22565b9250505090565b6107596040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b60006000805160206173f9833981519152905061079e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6107a785611d9f565b602082015260006107b786611ff4565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108219190810190613c22565b8683856020015160405160200161083b9493929190613c6a565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb119061087a9085906004016139f3565b600060405180830381865afa158015610897573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108bf9190810190613c22565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108ee908490600401613d02565b602060405180830381865afa15801561090b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092f9190613d3b565b61094457816040516020016104b49190613d5d565b6040516309389f5960e31b81526001600160a01b038616906349c4fac890610970908490600401613dd4565b600060405180830381865afa15801561098d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109b59190810190613c22565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109e3908490600401613e1a565b602060405180830381865afa158015610a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a249190613d3b565b15610aa0576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a55908490600401613e1a565b600060405180830381865afa158015610a72573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a9a9190810190613c22565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ac59190613e5b565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610af1929190613eb6565b600060405180830381865afa158015610b0e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b369190810190613c22565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b66579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610bad57610bad613edb565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610be757610be7613edb565b602002602001018190525084604051602001610c039190613ef1565b60405160208183030381529060405281600281518110610c2557610c25613edb565b602002602001018190525082604051602001610c419190613f26565b60405160208183030381529060405281600381518110610c6357610c63613edb565b60209081029190910101526000610c798261197b565b9050600081602001519050610ce0610cb360405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152906121a4565b610cf557856040516020016104b49190613f55565b9695505050505050565b60a08101516040805180820182526000808252602091820152815180830190925282518083529281019101526060906000805160206173f98339815191529015610d49565b511590565b610e6557826020015115610dd95760405162461bcd60e51b8152602060048201526058602482015260008051602061743983398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104da565b8260c0015115610e655760405162461bcd60e51b8152602060048201526053602482015260008051602061743983398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104da565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e7e5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610ebf90613fea565b935060ff1681518110610ed457610ed4613edb565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f159190614009565b604051602081830303815290604052828280610f3090613fea565b935060ff1681518110610f4557610f45613edb565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f7b90613fea565b935060ff1681518110610f9057610f90613edb565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fce90613fea565b935060ff1681518110610fe357610fe3613edb565b60200260200101819052508760200151828280610fff90613fea565b935060ff168151811061101457611014613edb565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061105290613fea565b935060ff168151811061106757611067613edb565b60209081029190910101528751828261107f81613fea565b935060ff168151811061109457611094613edb565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110cd90613fea565b935060ff16815181106110e2576110e2613edb565b60209081029190910101526110f646612205565b828261110181613fea565b935060ff168151811061111657611116613edb565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061115590613fea565b935060ff168151811061116a5761116a613edb565b60200260200101819052508682828061118290613fea565b935060ff168151811061119757611197613edb565b60209081029190910101528551156112a55760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111e881613fea565b935060ff16815181106111fd576111fd613edb565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d906112349089906004016139f3565b600060405180830381865afa158015611251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112799190810190613c22565b828261128481613fea565b935060ff168151811061129957611299613edb565b60200260200101819052505b846020015115611352576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112e381613fea565b935060ff16815181106112f8576112f8613edb565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061132d90613fea565b935060ff168151811061134257611342613edb565b60200260200101819052506114b9565b611368610d448660a0015161217760201b60201c565b6113eb5760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261139b81613fea565b935060ff16815181106113b0576113b0613edb565b60200260200101819052508460a001516040516020016113d09190613ef1565b60405160208183030381529060405282828061132d90613fea565b8460c00151158015611410575061140e610d44896040015161217760201b60201c565b155b156114b95760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261144481613fea565b935060ff168151811061145957611459613edb565b602090810291909101015261146d88612297565b60405160200161147d9190613ef1565b60405160208183030381529060405282828061149890613fea565b935060ff16815181106114ad576114ad613edb565b60200260200101819052505b6114cf610d44866040015161217760201b60201c565b6115525760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b6020820152828261150081613fea565b935060ff168151811061151557611515613edb565b6020026020010181905250846040015182828061153190613fea565b935060ff168151811061154657611546613edb565b60200260200101819052505b606085015115611643576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261158481613fea565b935060ff168151811061159957611599613edb565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116179190810190613c22565b828261162281613fea565b935060ff168151811061163757611637613edb565b60200260200101819052505b60e085015151156116d55760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261167a81613fea565b935060ff168151811061168f5761168f613edb565b602090810291909101015260e0850151516116a990612205565b82826116b481613fea565b935060ff16815181106116c9576116c9613edb565b60200260200101819052505b60e085015160200151156117725760408051808201909152600a8152692d2d676173507269636560b01b6020820152828261170f81613fea565b935060ff168151811061172457611724613edb565b60200260200101819052506117468560e001516020015161220560201b60201c565b828261175181613fea565b935060ff168151811061176657611766613edb565b60200260200101819052505b60e085015160400151156118135760408051808201909152600e81526d2d2d6d617846656550657247617360901b602082015282826117b081613fea565b935060ff16815181106117c5576117c5613edb565b60200260200101819052506117e78560e001516040015161220560201b60201c565b82826117f281613fea565b935060ff168151811061180757611807613edb565b60200260200101819052505b60e085015160600151156118c35760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261186081613fea565b935060ff168151811061187557611875613edb565b60200260200101819052506118978560e001516060015161220560201b60201c565b82826118a281613fea565b935060ff16815181106118b7576118b7613edb565b60200260200101819052505b60008160ff166001600160401b038111156118e0576118e0613a2f565b60405190808252806020026020018201604052801561191357816020015b60608152602001906001900390816118fe5790505b50905060005b8260ff168160ff16101561196c57838160ff168151811061193c5761193c613edb565b6020026020010151828260ff168151811061195957611959613edb565b6020908102919091010152600101611919565b5093505050505b949350505050565b6119a26040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b81526000805160206173f983398151915292600091849163d145736c916119f091869101614060565b600060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a359190810190613c22565b90506000611a43868361294d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a7391906140a7565b6000604051808303816000875af1158015611a92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aba919081019061410c565b805190915060030b15801590611ad35750602081015151155b8015611ae25750604081015151155b15610cf55781600081518110611afa57611afa613edb565b60200260200101516040516020016104b491906141bf565b60606000611b478560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b7e9082905b90612a87565b15611c7b576000611bfb82611bf581611bef611bc18a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612aae565b90612b0b565b9050611c2f611c28604051806040016040528060018152602001600560f91b81525061217760201b60201c565b8290612a87565b15611c6957611c66611c5f604051806040016040528060018152602001600560f91b81525061217760201b60201c565b8290612b90565b90505b611c7281612bb6565b925050506103cf565b8215611c945784846040516020016104b492919061438f565b50506040805160208101909152600081526103cf565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cd457505050565b6000611ce1848484612c1b565b90506000611cee8261197b565b602081015181519192509060030b158015611d615750611d61611d35604051806040016040528060078152602001665355434345535360c81b81525061217760201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b78565b15611d6e57505050505050565b60408201515115611d8e5781604001516040516020016104b4919061440a565b806040516020016104b49190614454565b60606000611dd48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611e0b611e04604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b82906121a4565b15611e4d576103cf611e48611e41604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b839061312e565b612bb6565b611e7f611e78604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b82906131b8565b600103611ee757611eb1611c5f604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b506103cf611e48611ee0604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b8390612b90565b611f16611e0460405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b15611fe3576000611f4e82611f49604051806040016040528060018152602001602f60f81b81525061217760201b60201c565b61324d565b905060008160018351611f6191906144a4565b81518110611f7157611f71613edb565b60200260200101519050611fda611e48611fad60405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061312e565b95945050505050565b826040516020016104b491906144b7565b606060006120298360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612059611e04604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b15612067576103cf81612bb6565b612092611e78604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b6001036120c7576103cf611e48611ee0604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b6120f6611e0460405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b15611fe357600061212982611f49604051806040016040528060018152602001602f60f81b81525061217760201b60201c565b905060018151111561216557806002825161214491906144a4565b8151811061215457612154613edb565b602002602001015192505050919050565b50826040516020016104b491906144b7565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121b9575060006102c1565b815183516020850151600092916121cf91614571565b6121d991906144a4565b9050826020015181036121f05760019150506102c1565b82516020840151819020912014905092915050565b60606000612212836132f1565b60010190506000816001600160401b0381111561223157612231613a2f565b6040519080825280601f01601f19166020018201604052801561225b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461226557509392505050565b606060006122ae836040015161217760201b60201c565b90506122eb6122e46040518060400160405280600a8152602001691553931250d15394d15160b21b81525061217760201b60201c565b82906133d3565b156123125750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123456122e460405180604001604052806009815260200168556e6c6963656e736560b81b81525061217760201b60201c565b15612371575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b61239e6122e46040518060400160405280600381526020016213525560ea1b81525061217760201b60201c565b156123c457505060408051808201909152600381526213525560ea1b6020820152919050565b6123fa6122e46040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061217760201b60201c565b8061243a575061243a6122e46040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061217760201b60201c565b1561246657505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b61249c6122e46040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061217760201b60201c565b806124dc57506124dc6122e46040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061217760201b60201c565b15612508575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61253f6122e46040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061217760201b60201c565b8061258057506125806122e4604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061217760201b60201c565b156125af57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125e66122e46040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061217760201b60201c565b8061262757506126276122e4604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061217760201b60201c565b1561265457505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b61268a6122e46040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061217760201b60201c565b156126b957505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126ef6122e46040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061217760201b60201c565b1561271e57505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61274f6122e46040518060400160405280600781526020016604d504c2d322e360cc1b81525061217760201b60201c565b1561277957505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127aa6122e46040518060400160405280600781526020016604f534c2d332e360cc1b81525061217760201b60201c565b156127d457505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6128086122e46040518060400160405280600a81526020016904170616368652d322e360b41b81525061217760201b60201c565b1561283557505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b61286c6122e46040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061217760201b60201c565b806128ad57506128ad6122e46040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061217760201b60201c565b156128da57505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b61290c6122e4604051806040016040528060088152602001674255534c2d312e3160c01b81525061217760201b60201c565b1561293657505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b604080840151845191516104b49290602001614584565b60608060005b84518110156129d8578185828151811061296f5761296f613edb565b6020026020010151604051602001612988929190613b2f565b6040516020818303038152906040529150600185516129a791906144a4565b81146129d057816040516020016129be91906146d4565b60405160208183030381529060405291505b600101612953565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129f15790505090508381600081518110612a1c57612a1c613edb565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a5557612a55613edb565b60200260200101819052508181600281518110612a7457612a74613edb565b6020908102919091010152949350505050565b6020808301518351835192840151600093612aa592918491906133e7565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612adb93906134f8565b9050836020015181612aed91906144a4565b84518590612afc9083906144a4565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b305750816102c1565b6020808301519084015160019114612b575750815160208481015190840151829020919020145b8015612b8857825184518590612b6e9083906144a4565b9052508251602085018051612b84908390614571565b9052505b509192915050565b6040805180820190915260008082526020820152612baf838383613618565b5092915050565b6060600082600001516001600160401b03811115612bd657612bd6613a2f565b6040519080825280601f01601f191660200182016040528015612c00576020820181803683370190505b50602084810151855192935090830191612baf9183916136be565b60606000612c2761068d565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c445790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c8590613fea565b935060ff1681518110612c9a57612c9a613edb565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cd591906146f9565b604051602081830303815290604052828280612cf090613fea565b935060ff1681518110612d0557612d05613edb565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d3d90613fea565b935060ff1681518110612d5257612d52613edb565b602002602001018190525082604051602001612d6e9190613f26565b604051602081830303815290604052828280612d8990613fea565b935060ff1681518110612d9e57612d9e613edb565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dd890613fea565b935060ff1681518110612ded57612ded613edb565b6020908102919091010152612e028784613738565b8282612e0d81613fea565b935060ff1681518110612e2257612e22613edb565b602090810291909101015285515115612eba5760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e6281613fea565b935060ff1681518110612e7757612e77613edb565b60209081029190910101528551612e8e9084613738565b8282612e9981613fea565b935060ff1681518110612eae57612eae613edb565b60200260200101819052505b856080015115612f285760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612f0381613fea565b935060ff1681518110612f1857612f18613edb565b6020026020010181905250612f83565b8415612f83576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f6281613fea565b935060ff1681518110612f7757612f77613edb565b60200260200101819052505b6040860151511561300f5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fbd81613fea565b935060ff1681518110612fd257612fd2613edb565b60200260200101819052508560400151828280612fee90613fea565b935060ff168151811061300357613003613edb565b60200260200101819052505b8560600151156130795760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261305881613fea565b935060ff168151811061306d5761306d613edb565b60200260200101819052505b60008160ff166001600160401b0381111561309657613096613a2f565b6040519080825280602002602001820160405280156130c957816020015b60608152602001906001900390816130b45790505b50905060005b8260ff168160ff16101561312257838160ff16815181106130f2576130f2613edb565b6020026020010151828260ff168151811061310f5761310f613edb565b60209081029190910101526001016130cf565b50979650505050505050565b60408051808201909152600080825260208201528151835110156131535750816102c1565b8151835160208501516000929161316991614571565b61317391906144a4565b60208401519091506001908214613194575082516020840151819020908220145b80156131af578351855186906131ab9083906144a4565b9052505b50929392505050565b8051825160208085015190840151600093849390926131d89284906134f8565b6131e29190614571565b90505b835160208501516131f69190614571565b8111612baf57816132068161473e565b925050826000015161323c85602001518361322191906144a4565b865161322d91906144a4565b855160208701518591906134f8565b6132469190614571565b90506131e5565b6060600061325b84846131b8565b613266906001614571565b6001600160401b0381111561327d5761327d613a2f565b6040519080825280602002602001820160405280156132b057816020015b606081526020019060019003908161329b5790505b50905060005b8151811015611caa576132cc611e488686612b90565b8282815181106132de576132de613edb565b60209081029190910101526001016132b6565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061333a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613366576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061338457662386f26fc10000830492506010015b6305f5e100831061339c576305f5e100830492506008015b61271083106133b057612710830492506004015b606483106133c2576064830492506002015b600a83106102c15760010192915050565b60006133df8383613778565b159392505050565b6000808584116134ee576020841161349a576000841561343257600161340e8660206144a4565b613419906008614757565b613424906002614855565b61342e91906144a4565b1990505b83518116856134418989614571565b61344b91906144a4565b805190935082165b8181146134855787841161346d5787945050505050611973565b8361347781614861565b945050828451169050613453565b61348f8785614571565b945050505050611973565b8383206134a785886144a4565b6134b19087614571565b91505b8582106134ec578482208082036134d9576134cf8684614571565b9350505050611973565b6134e46001846144a4565b9250506134b4565b505b5092949350505050565b6000838186851161360357602085116135b257600085156135445760016135208760206144a4565b61352b906008614757565b613536906002614855565b61354091906144a4565b1990505b845181166000876135558b8b614571565b61355f91906144a4565b855190915083165b8281146135a45781861061358c5761357f8b8b614571565b9650505050505050611973565b856135968161473e565b965050838651169050613567565b859650505050505050611973565b508383206000905b6135c486896144a4565b8211613601578583208082036135e05783945050505050611973565b6135eb600185614571565b93505081806135f99061473e565b9250506135ba565b505b61360d8787614571565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161364593906134f8565b60208087018051918601919091525190915061366190826144a4565b8352845160208601516136749190614571565b810361368357600085526136b5565b835183516136919190614571565b855186906136a09083906144a4565b90525083516136af9082614571565b60208601525b50909392505050565b602081106136f657815183526136d5602084614571565b92506136e2602083614571565b91506136ef6020826144a4565b90506136be565b600019811561372557600161370c8360206144a4565b61371890610100614855565b61372291906144a4565b90505b9151835183169219169190911790915250565b606060006137468484610727565b805160208083015160405193945061376093909101614878565b60405160208183030381529060405291505092915050565b815181516000919081111561378b575081515b6020808501519084015160005b8381101561384457825182518082146138145760001960208710156137f3576001846137c58960206144a4565b6137cf9190614571565b6137da906008614757565b6137e5906002614855565b6137ef91906144a4565b1990505b81811683821681810391146138115797506102c19650505050505050565b50505b61381f602086614571565b945061382c602085614571565b9350505060208161383d9190614571565b9050613798565b5084518651610cf591906148b4565b610c9f8061675a83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016138a36138a8565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016138a36040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561393457818101518382015260200161391c565b50506000910152565b60008151808452613955816020860160208601613919565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082018190526000906119739083018461393d565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139c581601a850160208801613919565b6101d160f51b601a9184019182015283516139e781601c840160208801613919565b01601c01949350505050565b6020815260006103cf602083018461393d565b600060208284031215613a1857600080fd5b81516001600160a01b03811681146103cf57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a6757613a67613a2f565b60405290565b6000806001600160401b03841115613a8757613a87613a2f565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613ab557613ab5613a2f565b604052838152905080828401851015613acd57600080fd5b611caa846020830185613919565b600082601f830112613aec57600080fd5b6103cf83835160208501613a6d565b600060208284031215613b0d57600080fd5b81516001600160401b03811115613b2357600080fd5b6102bd84828501613adb565b60008351613b41818460208801613919565b835190830190613b55818360208801613919565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b9681601a850160208801613919565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bd3816033840160208801613919565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103cf608083018461393d565b600060208284031215613c3457600080fd5b81516001600160401b03811115613c4a57600080fd5b8201601f81018413613c5b57600080fd5b6102bd84825160208401613a6d565b60008551613c7c818460208a01613919565b602f60f81b9083019081528551613c9a816001840160208a01613919565b602f60f81b600192909101918201528451613cbc816002840160208901613919565b600181830101915050602f60f81b60018201528351613ce2816002840160208801613919565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d15604083018461393d565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d4d57600080fd5b815180151581146103cf57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d9581601f850160208701613919565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613de7604083018461393d565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e2d604083018461393d565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e93816014850160208701613919565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613ec9604083018561393d565b82810360208401526103cb818561393d565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613f0e816001850160208701613919565b601160f91b6001939091019283015250600201919050565b60008251613f38818460208701613919565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fc781604b850160208701613919565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff810361400057614000613fd4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b602082015260008251614053816029850160208701613919565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103cf608083018461393d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561410057603f198786030184526140eb85835161393d565b945060209384019391909101906001016140cf565b50929695505050505050565b60006020828403121561411e57600080fd5b81516001600160401b0381111561413457600080fd5b82016060818503121561414657600080fd5b61414e613a45565b81518060030b811461415f57600080fd5b815260208201516001600160401b0381111561417a57600080fd5b61418686828501613adb565b60208301525060408201516001600160401b038111156141a557600080fd5b6141b186828501613adb565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b602082015260008251614201816021850160208701613919565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143d1816021850160208801613919565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143fe81602e840160208801613919565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b602082015260008251614053816029850160208701613919565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614497816022850160208701613919565b9190910160220192915050565b818103818111156102c1576102c1613fd4565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144e081600e850160208701613919565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102c1576102c1613fd4565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145bc816018850160208801613919565b6301034b7160e51b60189184019182015283516145e081601c840160208801613919565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146e6818460208701613919565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161473181601c850160208701613919565b91909101601c0192915050565b60006001820161475057614750613fd4565b5060010190565b80820281158282048414176102c1576102c1613fd4565b6001815b60018411156147a95780850481111561478d5761478d613fd4565b600184161561479b57908102905b60019390931c928002614772565b935093915050565b6000826147c0575060016102c1565b816147cd575060006102c1565b81600181146147e357600281146147ed57614809565b60019150506102c1565b60ff8411156147fe576147fe613fd4565b50506001821b6102c1565b5060208310610133831016604e8410600b841016171561482c575081810a6102c1565b614839600019848461476e565b806000190482111561484d5761484d613fd4565b029392505050565b60006103cf83836147b1565b60008161487057614870613fd4565b506000190190565b6000835161488a818460208801613919565b601d60f91b90830190815283516148a8816001840160208801613919565b01600101949350505050565b8181036000831280158383131683831282161715612baf57612baf613fd4565b608051611e48614912600039600081816101f6015281816105ce015281816106230152818161091c01528181610a380152610a8d0152611e486000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806381100bf0116100f9578063a217fddf11610097578063d9caed1211610071578063d9caed121461043a578063e609055e1461044d578063e63ab1e914610460578063eab103df1461048757600080fd5b8063a217fddf146103fc578063d547741f14610404578063d936547e1461041757600080fd5b806391d14854116100d357806391d148541461038a578063950837aa146103c35780639a590427146103d65780639b19251a146103e957600080fd5b806381100bf0146103485780638456cb591461035b57806385f438c11461036357600080fd5b80633c2f05a8116101665780635b112591116101405780635b112591146103045780635c975abb146103175780636133b4bb146103225780637ab697e71461033557600080fd5b80633c2f05a8146102c25780633f4ba83a146102d5578063570618e1146102dd57600080fd5b8063248a9ca3116101a2578063248a9ca314610245578063252f07bf146102775780632f2ff15d1461029c57806336568abe146102af57600080fd5b806301ffc9a7146101c9578063116191b6146101f157806321fc65f214610230575b600080fd5b6101dc6101d73660046117b0565b61049a565b60405190151581526020015b60405180910390f35b6102187f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e8565b61024361023e366004611850565b610533565b005b6102696102533660046118c3565b6000908152600160208190526040909120015490565b6040519081526020016101e8565b6004546101dc9074010000000000000000000000000000000000000000900460ff1681565b6102436102aa3660046118dc565b6106f3565b6102436102bd3660046118dc565b61071f565b600554610218906001600160a01b031681565b610243610770565b6102697f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b600454610218906001600160a01b031681565b60025460ff166101dc565b61024361033036600461190c565b6107a5565b610243610343366004611968565b61099d565b600654610218906001600160a01b031681565b610243610b62565b6102697f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101dc6103983660046118dc565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6102436103d1366004611a0b565b610b94565b6102436103e4366004611a0b565b610d12565b6102436103f7366004611a0b565b610dc6565b610269600081565b6102436104123660046118dc565b610e7d565b6101dc610425366004611a0b565b60036020526000908152604090205460ff1681565b610243610448366004611a28565b610ea3565b61024361045b366004611a69565b610f9b565b6102697f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b610243610495366004611b08565b6111c7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061052d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61053b61121d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461056581611260565b61056d61126a565b6001600160a01b03851660009081526003602052604090205460ff166105bf576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105f36001600160a01b0386167f0000000000000000000000000000000000000000000000000000000000000000866112a9565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106609088908a90899089908990600401611b6e565b600060405180830381600087803b15801561067a57600080fd5b505af115801561068e573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106d993929190611bb1565b60405180910390a3506106ec6001600055565b5050505050565b6000828152600160208190526040909120015461070f81611260565b610719838361131d565b50505050565b6001600160a01b0381163314610761576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61076b82826113b0565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61079a81611260565b6107a2611437565b50565b600580546001600160a01b0316906340c10f199030906107c6908790611c03565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b5050600580546008546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481019390935216925063a9059cbb91506044016020604051808303816000875af11580156108ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cf9190611c16565b506005546108e9906001600160a01b031685858585610533565b6005546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152909116906370a0823190602401602060405180830381865afa15801561096c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109909190611c33565b1561071957610719611c4c565b6109a561121d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109cf81611260565b6109d761126a565b6001600160a01b03861660009081526003602052604090205460ff16610a29576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a5d6001600160a01b0387167f0000000000000000000000000000000000000000000000000000000000000000876112a9565b6040517fece697b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ece697b390610acc9089908b908a908a908a908a90600401611d14565b600060405180830381600087803b158015610ae657600080fd5b505af1158015610afa573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab596055440564087878787604051610b479493929190611d6b565b60405180910390a350610b5a6001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b8c81611260565b6107a2611489565b6000610b9f81611260565b6001600160a01b038216610bdf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600454610c16907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166113b0565b50600454610c4e907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b03166113b0565b50610c797f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361131d565b50610ca47f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a8361131d565b50600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527f086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba9060200160405180910390a15050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610d3c81611260565b6001600160a01b038216610d7c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610df081611260565b6001600160a01b038216610e30576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610e9981611260565b61071983836113b0565b610eab61121d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ed581611260565b610edd61126a565b6001600160a01b03831660009081526003602052604090205460ff16610f2f576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f436001600160a01b03841685846112a9565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610f8891815260200190565b60405180910390a35061076b6001600055565b610fa361121d565b610fab61126a565b60045474010000000000000000000000000000000000000000900460ff16610fff576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16611051576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d59190611c33565b90506110ec6001600160a01b0386163330876114c6565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015611173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111979190611c33565b6111a19190611d97565b87876040516111b4959493929190611daa565b60405180910390a250610b5a6001600055565b60006111d281611260565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403611259576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107a281336114ff565b60025460ff16156112a7576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261076b91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611576565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166113a85760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161052d565b50600061052d565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16156113a85760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161052d565b61143f6115f2565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61149161126a565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861146c3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526107199186918216906323b872dd906084016112d6565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611572576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b600061158b6001600160a01b0384168361162e565b905080516000141580156115b05750808060200190518101906115ae9190611c16565b155b1561076b576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611569565b60025460ff166112a7576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061163c83836000611643565b9392505050565b606081471015611681576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611569565b600080856001600160a01b0316848660405161169d9190611de3565b60006040518083038185875af1925050503d80600081146116da576040519150601f19603f3d011682016040523d82523d6000602084013e6116df565b606091505b50915091506116ef8683836116f9565b9695505050505050565b60608261170e576117098261176e565b61163c565b815115801561172557506001600160a01b0384163b155b15611767576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611569565b508061163c565b80511561177e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156117c257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461163c57600080fd5b6001600160a01b03811681146107a257600080fd5b60008083601f84011261181957600080fd5b50813567ffffffffffffffff81111561183157600080fd5b60208301915083602082850101111561184957600080fd5b9250929050565b60008060008060006080868803121561186857600080fd5b8535611873816117f2565b94506020860135611883816117f2565b935060408601359250606086013567ffffffffffffffff8111156118a657600080fd5b6118b288828901611807565b969995985093965092949392505050565b6000602082840312156118d557600080fd5b5035919050565b600080604083850312156118ef57600080fd5b823591506020830135611901816117f2565b809150509250929050565b6000806000806060858703121561192257600080fd5b843561192d816117f2565b935060208501359250604085013567ffffffffffffffff81111561195057600080fd5b61195c87828801611807565b95989497509550505050565b60008060008060008060a0878903121561198157600080fd5b863561198c816117f2565b9550602087013561199c816117f2565b945060408701359350606087013567ffffffffffffffff8111156119bf57600080fd5b6119cb89828a01611807565b909450925050608087013567ffffffffffffffff8111156119eb57600080fd5b87016060818a0312156119fd57600080fd5b809150509295509295509295565b600060208284031215611a1d57600080fd5b813561163c816117f2565b600080600060608486031215611a3d57600080fd5b8335611a48816117f2565b92506020840135611a58816117f2565b929592945050506040919091013590565b60008060008060008060808789031215611a8257600080fd5b863567ffffffffffffffff811115611a9957600080fd5b611aa589828a01611807565b9097509550506020870135611ab9816117f2565b935060408701359250606087013567ffffffffffffffff811115611adc57600080fd5b611ae889828a01611807565b979a9699509497509295939492505050565b80151581146107a257600080fd5b600060208284031215611b1a57600080fd5b813561163c81611afa565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b0385166020820152836040820152608060608201526000611ba6608083018486611b25565b979650505050505050565b838152604060208201526000611bcb604083018486611b25565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561052d5761052d611bd4565b600060208284031215611c2857600080fd5b815161163c81611afa565b600060208284031215611c4557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008135611c88816117f2565b6001600160a01b03168352602082810135908401526040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611cd357600080fd5b820160208101903567ffffffffffffffff811115611cf057600080fd5b803603821315611cff57600080fd5b60606040860152611bcb606086018284611b25565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a060608201526000611d4c60a083018587611b25565b8281036080840152611d5e8185611c7b565b9998505050505050505050565b848152606060208201526000611d85606083018587611b25565b8281036040840152611ba68185611c7b565b8181038181111561052d5761052d611bd4565b606081526000611dbe606083018789611b25565b8560208401528281036040840152611dd7818587611b25565b98975050505050505050565b6000825160005b81811015611e045760208186018101518583015201611dea565b50600092019182525091905056fea2646970667358221220a6b4f54fdd75deb6da9b6b98cda0b0eef03c7296dd055ca662a14ee6b51ddb1764736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", + ABI: "[]", } // ERC20CustodyEchidnaTestABI is the input ABI used to generate the binding from. // Deprecated: Use ERC20CustodyEchidnaTestMetaData.ABI instead. var ERC20CustodyEchidnaTestABI = ERC20CustodyEchidnaTestMetaData.ABI -// ERC20CustodyEchidnaTestBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ERC20CustodyEchidnaTestMetaData.Bin instead. -var ERC20CustodyEchidnaTestBin = ERC20CustodyEchidnaTestMetaData.Bin - -// DeployERC20CustodyEchidnaTest deploys a new Ethereum contract, binding an instance of ERC20CustodyEchidnaTest to it. -func DeployERC20CustodyEchidnaTest(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ERC20CustodyEchidnaTest, error) { - parsed, err := ERC20CustodyEchidnaTestMetaData.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(ERC20CustodyEchidnaTestBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &ERC20CustodyEchidnaTest{ERC20CustodyEchidnaTestCaller: ERC20CustodyEchidnaTestCaller{contract: contract}, ERC20CustodyEchidnaTestTransactor: ERC20CustodyEchidnaTestTransactor{contract: contract}, ERC20CustodyEchidnaTestFilterer: ERC20CustodyEchidnaTestFilterer{contract: contract}}, nil -} - // ERC20CustodyEchidnaTest is an auto generated Go binding around an Ethereum contract. type ERC20CustodyEchidnaTest struct { ERC20CustodyEchidnaTestCaller // Read-only binding to the contract @@ -208,2519 +179,3 @@ func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorRaw) Transfer(o func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { return _ERC20CustodyEchidnaTest.Contract.contract.Transact(opts, method, params...) } - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) DEFAULTADMINROLE() ([32]byte, error) { - return _ERC20CustodyEchidnaTest.Contract.DEFAULTADMINROLE(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) DEFAULTADMINROLE() ([32]byte, error) { - return _ERC20CustodyEchidnaTest.Contract.DEFAULTADMINROLE(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. -// -// Solidity: function PAUSER_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "PAUSER_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. -// -// Solidity: function PAUSER_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) PAUSERROLE() ([32]byte, error) { - return _ERC20CustodyEchidnaTest.Contract.PAUSERROLE(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. -// -// Solidity: function PAUSER_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) PAUSERROLE() ([32]byte, error) { - return _ERC20CustodyEchidnaTest.Contract.PAUSERROLE(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. -// -// Solidity: function WHITELISTER_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) WHITELISTERROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "WHITELISTER_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. -// -// Solidity: function WHITELISTER_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) WHITELISTERROLE() ([32]byte, error) { - return _ERC20CustodyEchidnaTest.Contract.WHITELISTERROLE(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. -// -// Solidity: function WHITELISTER_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) WHITELISTERROLE() ([32]byte, error) { - return _ERC20CustodyEchidnaTest.Contract.WHITELISTERROLE(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. -// -// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) WITHDRAWERROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "WITHDRAWER_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. -// -// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) WITHDRAWERROLE() ([32]byte, error) { - return _ERC20CustodyEchidnaTest.Contract.WITHDRAWERROLE(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. -// -// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) WITHDRAWERROLE() ([32]byte, error) { - return _ERC20CustodyEchidnaTest.Contract.WITHDRAWERROLE(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// EchidnaCaller is a free data retrieval call binding the contract method 0x81100bf0. -// -// Solidity: function echidnaCaller() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) EchidnaCaller(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "echidnaCaller") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// EchidnaCaller is a free data retrieval call binding the contract method 0x81100bf0. -// -// Solidity: function echidnaCaller() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) EchidnaCaller() (common.Address, error) { - return _ERC20CustodyEchidnaTest.Contract.EchidnaCaller(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// EchidnaCaller is a free data retrieval call binding the contract method 0x81100bf0. -// -// Solidity: function echidnaCaller() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) EchidnaCaller() (common.Address, error) { - return _ERC20CustodyEchidnaTest.Contract.EchidnaCaller(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// Gateway is a free data retrieval call binding the contract method 0x116191b6. -// -// Solidity: function gateway() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) Gateway(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "gateway") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Gateway is a free data retrieval call binding the contract method 0x116191b6. -// -// Solidity: function gateway() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) Gateway() (common.Address, error) { - return _ERC20CustodyEchidnaTest.Contract.Gateway(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// Gateway is a free data retrieval call binding the contract method 0x116191b6. -// -// Solidity: function gateway() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) Gateway() (common.Address, error) { - return _ERC20CustodyEchidnaTest.Contract.Gateway(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "getRoleAdmin", role) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _ERC20CustodyEchidnaTest.Contract.GetRoleAdmin(&_ERC20CustodyEchidnaTest.CallOpts, role) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _ERC20CustodyEchidnaTest.Contract.GetRoleAdmin(&_ERC20CustodyEchidnaTest.CallOpts, role) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "hasRole", role, account) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _ERC20CustodyEchidnaTest.Contract.HasRole(&_ERC20CustodyEchidnaTest.CallOpts, role, account) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _ERC20CustodyEchidnaTest.Contract.HasRole(&_ERC20CustodyEchidnaTest.CallOpts, role, account) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.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 (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) Paused() (bool, error) { - return _ERC20CustodyEchidnaTest.Contract.Paused(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) Paused() (bool, error) { - return _ERC20CustodyEchidnaTest.Contract.Paused(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "supportsInterface", interfaceId) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _ERC20CustodyEchidnaTest.Contract.SupportsInterface(&_ERC20CustodyEchidnaTest.CallOpts, interfaceId) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _ERC20CustodyEchidnaTest.Contract.SupportsInterface(&_ERC20CustodyEchidnaTest.CallOpts, interfaceId) -} - -// SupportsLegacy is a free data retrieval call binding the contract method 0x252f07bf. -// -// Solidity: function supportsLegacy() view returns(bool) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) SupportsLegacy(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "supportsLegacy") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// SupportsLegacy is a free data retrieval call binding the contract method 0x252f07bf. -// -// Solidity: function supportsLegacy() view returns(bool) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) SupportsLegacy() (bool, error) { - return _ERC20CustodyEchidnaTest.Contract.SupportsLegacy(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// SupportsLegacy is a free data retrieval call binding the contract method 0x252f07bf. -// -// Solidity: function supportsLegacy() view returns(bool) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) SupportsLegacy() (bool, error) { - return _ERC20CustodyEchidnaTest.Contract.SupportsLegacy(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// TestERC20 is a free data retrieval call binding the contract method 0x3c2f05a8. -// -// Solidity: function testERC20() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) TestERC20(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "testERC20") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// TestERC20 is a free data retrieval call binding the contract method 0x3c2f05a8. -// -// Solidity: function testERC20() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) TestERC20() (common.Address, error) { - return _ERC20CustodyEchidnaTest.Contract.TestERC20(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// TestERC20 is a free data retrieval call binding the contract method 0x3c2f05a8. -// -// Solidity: function testERC20() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) TestERC20() (common.Address, error) { - return _ERC20CustodyEchidnaTest.Contract.TestERC20(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) TssAddress(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "tssAddress") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) TssAddress() (common.Address, error) { - return _ERC20CustodyEchidnaTest.Contract.TssAddress(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) TssAddress() (common.Address, error) { - return _ERC20CustodyEchidnaTest.Contract.TssAddress(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. -// -// Solidity: function whitelisted(address ) view returns(bool) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) Whitelisted(opts *bind.CallOpts, arg0 common.Address) (bool, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "whitelisted", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. -// -// Solidity: function whitelisted(address ) view returns(bool) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) Whitelisted(arg0 common.Address) (bool, error) { - return _ERC20CustodyEchidnaTest.Contract.Whitelisted(&_ERC20CustodyEchidnaTest.CallOpts, arg0) -} - -// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. -// -// Solidity: function whitelisted(address ) view returns(bool) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) Whitelisted(arg0 common.Address) (bool, error) { - return _ERC20CustodyEchidnaTest.Contract.Whitelisted(&_ERC20CustodyEchidnaTest.CallOpts, arg0) -} - -// Deposit is a paid mutator transaction binding the contract method 0xe609055e. -// -// Solidity: function deposit(bytes recipient, address asset, uint256 amount, bytes message) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) Deposit(opts *bind.TransactOpts, recipient []byte, asset common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.contract.Transact(opts, "deposit", recipient, asset, amount, message) -} - -// Deposit is a paid mutator transaction binding the contract method 0xe609055e. -// -// Solidity: function deposit(bytes recipient, address asset, uint256 amount, bytes message) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) Deposit(recipient []byte, asset common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.Deposit(&_ERC20CustodyEchidnaTest.TransactOpts, recipient, asset, amount, message) -} - -// Deposit is a paid mutator transaction binding the contract method 0xe609055e. -// -// Solidity: function deposit(bytes recipient, address asset, uint256 amount, bytes message) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) Deposit(recipient []byte, asset common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.Deposit(&_ERC20CustodyEchidnaTest.TransactOpts, recipient, asset, amount, message) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.contract.Transact(opts, "grantRole", role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.GrantRole(&_ERC20CustodyEchidnaTest.TransactOpts, role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.GrantRole(&_ERC20CustodyEchidnaTest.TransactOpts, role, account) -} - -// Pause is a paid mutator transaction binding the contract method 0x8456cb59. -// -// Solidity: function pause() returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.contract.Transact(opts, "pause") -} - -// Pause is a paid mutator transaction binding the contract method 0x8456cb59. -// -// Solidity: function pause() returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) Pause() (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.Pause(&_ERC20CustodyEchidnaTest.TransactOpts) -} - -// Pause is a paid mutator transaction binding the contract method 0x8456cb59. -// -// Solidity: function pause() returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) Pause() (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.Pause(&_ERC20CustodyEchidnaTest.TransactOpts) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.contract.Transact(opts, "renounceRole", role, callerConfirmation) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.RenounceRole(&_ERC20CustodyEchidnaTest.TransactOpts, role, callerConfirmation) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.RenounceRole(&_ERC20CustodyEchidnaTest.TransactOpts, role, callerConfirmation) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.contract.Transact(opts, "revokeRole", role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.RevokeRole(&_ERC20CustodyEchidnaTest.TransactOpts, role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.RevokeRole(&_ERC20CustodyEchidnaTest.TransactOpts, role, account) -} - -// SetSupportsLegacy is a paid mutator transaction binding the contract method 0xeab103df. -// -// Solidity: function setSupportsLegacy(bool _supportsLegacy) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) SetSupportsLegacy(opts *bind.TransactOpts, _supportsLegacy bool) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.contract.Transact(opts, "setSupportsLegacy", _supportsLegacy) -} - -// SetSupportsLegacy is a paid mutator transaction binding the contract method 0xeab103df. -// -// Solidity: function setSupportsLegacy(bool _supportsLegacy) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) SetSupportsLegacy(_supportsLegacy bool) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.SetSupportsLegacy(&_ERC20CustodyEchidnaTest.TransactOpts, _supportsLegacy) -} - -// SetSupportsLegacy is a paid mutator transaction binding the contract method 0xeab103df. -// -// Solidity: function setSupportsLegacy(bool _supportsLegacy) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) SetSupportsLegacy(_supportsLegacy bool) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.SetSupportsLegacy(&_ERC20CustodyEchidnaTest.TransactOpts, _supportsLegacy) -} - -// TestWithdrawAndCall is a paid mutator transaction binding the contract method 0x6133b4bb. -// -// Solidity: function testWithdrawAndCall(address to, uint256 amount, bytes data) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) TestWithdrawAndCall(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.contract.Transact(opts, "testWithdrawAndCall", to, amount, data) -} - -// TestWithdrawAndCall is a paid mutator transaction binding the contract method 0x6133b4bb. -// -// Solidity: function testWithdrawAndCall(address to, uint256 amount, bytes data) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) TestWithdrawAndCall(to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.TestWithdrawAndCall(&_ERC20CustodyEchidnaTest.TransactOpts, to, amount, data) -} - -// TestWithdrawAndCall is a paid mutator transaction binding the contract method 0x6133b4bb. -// -// Solidity: function testWithdrawAndCall(address to, uint256 amount, bytes data) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) TestWithdrawAndCall(to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.TestWithdrawAndCall(&_ERC20CustodyEchidnaTest.TransactOpts, to, amount, data) -} - -// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. -// -// Solidity: function unpause() returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.contract.Transact(opts, "unpause") -} - -// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. -// -// Solidity: function unpause() returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) Unpause() (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.Unpause(&_ERC20CustodyEchidnaTest.TransactOpts) -} - -// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. -// -// Solidity: function unpause() returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) Unpause() (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.Unpause(&_ERC20CustodyEchidnaTest.TransactOpts) -} - -// Unwhitelist is a paid mutator transaction binding the contract method 0x9a590427. -// -// Solidity: function unwhitelist(address token) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) Unwhitelist(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.contract.Transact(opts, "unwhitelist", token) -} - -// Unwhitelist is a paid mutator transaction binding the contract method 0x9a590427. -// -// Solidity: function unwhitelist(address token) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) Unwhitelist(token common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.Unwhitelist(&_ERC20CustodyEchidnaTest.TransactOpts, token) -} - -// Unwhitelist is a paid mutator transaction binding the contract method 0x9a590427. -// -// Solidity: function unwhitelist(address token) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) Unwhitelist(token common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.Unwhitelist(&_ERC20CustodyEchidnaTest.TransactOpts, token) -} - -// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. -// -// Solidity: function updateTSSAddress(address newTSSAddress) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) UpdateTSSAddress(opts *bind.TransactOpts, newTSSAddress common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.contract.Transact(opts, "updateTSSAddress", newTSSAddress) -} - -// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. -// -// Solidity: function updateTSSAddress(address newTSSAddress) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) UpdateTSSAddress(newTSSAddress common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.UpdateTSSAddress(&_ERC20CustodyEchidnaTest.TransactOpts, newTSSAddress) -} - -// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. -// -// Solidity: function updateTSSAddress(address newTSSAddress) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) UpdateTSSAddress(newTSSAddress common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.UpdateTSSAddress(&_ERC20CustodyEchidnaTest.TransactOpts, newTSSAddress) -} - -// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. -// -// Solidity: function whitelist(address token) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) Whitelist(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.contract.Transact(opts, "whitelist", token) -} - -// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. -// -// Solidity: function whitelist(address token) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) Whitelist(token common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.Whitelist(&_ERC20CustodyEchidnaTest.TransactOpts, token) -} - -// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. -// -// Solidity: function whitelist(address token) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) Whitelist(token common.Address) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.Whitelist(&_ERC20CustodyEchidnaTest.TransactOpts, token) -} - -// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. -// -// Solidity: function withdraw(address to, address token, uint256 amount) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) Withdraw(opts *bind.TransactOpts, to common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.contract.Transact(opts, "withdraw", to, token, amount) -} - -// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. -// -// Solidity: function withdraw(address to, address token, uint256 amount) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) Withdraw(to common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.Withdraw(&_ERC20CustodyEchidnaTest.TransactOpts, to, token, amount) -} - -// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. -// -// Solidity: function withdraw(address to, address token, uint256 amount) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) Withdraw(to common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.Withdraw(&_ERC20CustodyEchidnaTest.TransactOpts, to, token, amount) -} - -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. -// -// Solidity: function withdrawAndCall(address to, address token, uint256 amount, bytes data) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) WithdrawAndCall(opts *bind.TransactOpts, to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.contract.Transact(opts, "withdrawAndCall", to, token, amount, data) -} - -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. -// -// Solidity: function withdrawAndCall(address to, address token, uint256 amount, bytes data) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) WithdrawAndCall(to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.WithdrawAndCall(&_ERC20CustodyEchidnaTest.TransactOpts, to, token, amount, data) -} - -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. -// -// Solidity: function withdrawAndCall(address to, address token, uint256 amount, bytes data) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) WithdrawAndCall(to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.WithdrawAndCall(&_ERC20CustodyEchidnaTest.TransactOpts, to, token, amount, data) -} - -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x7ab697e7. -// -// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.contract.Transact(opts, "withdrawAndRevert", to, token, amount, data, revertContext) -} - -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x7ab697e7. -// -// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) WithdrawAndRevert(to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.WithdrawAndRevert(&_ERC20CustodyEchidnaTest.TransactOpts, to, token, amount, data, revertContext) -} - -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x7ab697e7. -// -// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) WithdrawAndRevert(to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { - return _ERC20CustodyEchidnaTest.Contract.WithdrawAndRevert(&_ERC20CustodyEchidnaTest.TransactOpts, to, token, amount, data, revertContext) -} - -// ERC20CustodyEchidnaTestDepositedIterator is returned from FilterDeposited and is used to iterate over the raw logs and unpacked data for Deposited events raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestDepositedIterator struct { - Event *ERC20CustodyEchidnaTestDeposited // 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 *ERC20CustodyEchidnaTestDepositedIterator) 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(ERC20CustodyEchidnaTestDeposited) - 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(ERC20CustodyEchidnaTestDeposited) - 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 *ERC20CustodyEchidnaTestDepositedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20CustodyEchidnaTestDepositedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20CustodyEchidnaTestDeposited represents a Deposited event raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestDeposited struct { - Recipient []byte - Asset common.Address - Amount *big.Int - Message []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDeposited is a free log retrieval operation binding the contract event 0x1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae. -// -// Solidity: event Deposited(bytes recipient, address indexed asset, uint256 amount, bytes message) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterDeposited(opts *bind.FilterOpts, asset []common.Address) (*ERC20CustodyEchidnaTestDepositedIterator, error) { - - var assetRule []interface{} - for _, assetItem := range asset { - assetRule = append(assetRule, assetItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.FilterLogs(opts, "Deposited", assetRule) - if err != nil { - return nil, err - } - return &ERC20CustodyEchidnaTestDepositedIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "Deposited", logs: logs, sub: sub}, nil -} - -// WatchDeposited is a free log subscription operation binding the contract event 0x1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae. -// -// Solidity: event Deposited(bytes recipient, address indexed asset, uint256 amount, bytes message) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchDeposited(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestDeposited, asset []common.Address) (event.Subscription, error) { - - var assetRule []interface{} - for _, assetItem := range asset { - assetRule = append(assetRule, assetItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.WatchLogs(opts, "Deposited", assetRule) - 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(ERC20CustodyEchidnaTestDeposited) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Deposited", 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 -} - -// ParseDeposited is a log parse operation binding the contract event 0x1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae. -// -// Solidity: event Deposited(bytes recipient, address indexed asset, uint256 amount, bytes message) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseDeposited(log types.Log) (*ERC20CustodyEchidnaTestDeposited, error) { - event := new(ERC20CustodyEchidnaTestDeposited) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Deposited", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ERC20CustodyEchidnaTestPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestPausedIterator struct { - Event *ERC20CustodyEchidnaTestPaused // 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 *ERC20CustodyEchidnaTestPausedIterator) 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(ERC20CustodyEchidnaTestPaused) - 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(ERC20CustodyEchidnaTestPaused) - 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 *ERC20CustodyEchidnaTestPausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20CustodyEchidnaTestPausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20CustodyEchidnaTestPaused represents a Paused event raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestPaused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterPaused(opts *bind.FilterOpts) (*ERC20CustodyEchidnaTestPausedIterator, error) { - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.FilterLogs(opts, "Paused") - if err != nil { - return nil, err - } - return &ERC20CustodyEchidnaTestPausedIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "Paused", logs: logs, sub: sub}, nil -} - -// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestPaused) (event.Subscription, error) { - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.WatchLogs(opts, "Paused") - 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(ERC20CustodyEchidnaTestPaused) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Paused", 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 -} - -// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParsePaused(log types.Log) (*ERC20CustodyEchidnaTestPaused, error) { - event := new(ERC20CustodyEchidnaTestPaused) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Paused", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ERC20CustodyEchidnaTestRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestRoleAdminChangedIterator struct { - Event *ERC20CustodyEchidnaTestRoleAdminChanged // 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 *ERC20CustodyEchidnaTestRoleAdminChangedIterator) 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(ERC20CustodyEchidnaTestRoleAdminChanged) - 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(ERC20CustodyEchidnaTestRoleAdminChanged) - 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 *ERC20CustodyEchidnaTestRoleAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20CustodyEchidnaTestRoleAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20CustodyEchidnaTestRoleAdminChanged represents a RoleAdminChanged event raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestRoleAdminChanged struct { - Role [32]byte - PreviousAdminRole [32]byte - NewAdminRole [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*ERC20CustodyEchidnaTestRoleAdminChangedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) - if err != nil { - return nil, err - } - return &ERC20CustodyEchidnaTestRoleAdminChangedIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil -} - -// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) - 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(ERC20CustodyEchidnaTestRoleAdminChanged) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "RoleAdminChanged", 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 -} - -// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseRoleAdminChanged(log types.Log) (*ERC20CustodyEchidnaTestRoleAdminChanged, error) { - event := new(ERC20CustodyEchidnaTestRoleAdminChanged) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ERC20CustodyEchidnaTestRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestRoleGrantedIterator struct { - Event *ERC20CustodyEchidnaTestRoleGranted // 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 *ERC20CustodyEchidnaTestRoleGrantedIterator) 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(ERC20CustodyEchidnaTestRoleGranted) - 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(ERC20CustodyEchidnaTestRoleGranted) - 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 *ERC20CustodyEchidnaTestRoleGrantedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20CustodyEchidnaTestRoleGrantedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20CustodyEchidnaTestRoleGranted represents a RoleGranted event raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestRoleGranted struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ERC20CustodyEchidnaTestRoleGrantedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return &ERC20CustodyEchidnaTestRoleGrantedIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "RoleGranted", logs: logs, sub: sub}, nil -} - -// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) - 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(ERC20CustodyEchidnaTestRoleGranted) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "RoleGranted", 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 -} - -// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseRoleGranted(log types.Log) (*ERC20CustodyEchidnaTestRoleGranted, error) { - event := new(ERC20CustodyEchidnaTestRoleGranted) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "RoleGranted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ERC20CustodyEchidnaTestRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestRoleRevokedIterator struct { - Event *ERC20CustodyEchidnaTestRoleRevoked // 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 *ERC20CustodyEchidnaTestRoleRevokedIterator) 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(ERC20CustodyEchidnaTestRoleRevoked) - 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(ERC20CustodyEchidnaTestRoleRevoked) - 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 *ERC20CustodyEchidnaTestRoleRevokedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20CustodyEchidnaTestRoleRevokedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20CustodyEchidnaTestRoleRevoked represents a RoleRevoked event raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestRoleRevoked struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ERC20CustodyEchidnaTestRoleRevokedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return &ERC20CustodyEchidnaTestRoleRevokedIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil -} - -// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) - 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(ERC20CustodyEchidnaTestRoleRevoked) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "RoleRevoked", 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 -} - -// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseRoleRevoked(log types.Log) (*ERC20CustodyEchidnaTestRoleRevoked, error) { - event := new(ERC20CustodyEchidnaTestRoleRevoked) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "RoleRevoked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ERC20CustodyEchidnaTestUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestUnpausedIterator struct { - Event *ERC20CustodyEchidnaTestUnpaused // 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 *ERC20CustodyEchidnaTestUnpausedIterator) 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(ERC20CustodyEchidnaTestUnpaused) - 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(ERC20CustodyEchidnaTestUnpaused) - 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 *ERC20CustodyEchidnaTestUnpausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20CustodyEchidnaTestUnpausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20CustodyEchidnaTestUnpaused represents a Unpaused event raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestUnpaused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. -// -// Solidity: event Unpaused(address account) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterUnpaused(opts *bind.FilterOpts) (*ERC20CustodyEchidnaTestUnpausedIterator, error) { - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.FilterLogs(opts, "Unpaused") - if err != nil { - return nil, err - } - return &ERC20CustodyEchidnaTestUnpausedIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "Unpaused", logs: logs, sub: sub}, nil -} - -// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. -// -// Solidity: event Unpaused(address account) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestUnpaused) (event.Subscription, error) { - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.WatchLogs(opts, "Unpaused") - 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(ERC20CustodyEchidnaTestUnpaused) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Unpaused", 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 -} - -// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. -// -// Solidity: event Unpaused(address account) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseUnpaused(log types.Log) (*ERC20CustodyEchidnaTestUnpaused, error) { - event := new(ERC20CustodyEchidnaTestUnpaused) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Unpaused", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ERC20CustodyEchidnaTestUnwhitelistedIterator is returned from FilterUnwhitelisted and is used to iterate over the raw logs and unpacked data for Unwhitelisted events raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestUnwhitelistedIterator struct { - Event *ERC20CustodyEchidnaTestUnwhitelisted // 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 *ERC20CustodyEchidnaTestUnwhitelistedIterator) 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(ERC20CustodyEchidnaTestUnwhitelisted) - 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(ERC20CustodyEchidnaTestUnwhitelisted) - 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 *ERC20CustodyEchidnaTestUnwhitelistedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20CustodyEchidnaTestUnwhitelistedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20CustodyEchidnaTestUnwhitelisted represents a Unwhitelisted event raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestUnwhitelisted struct { - Token common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUnwhitelisted is a free log retrieval operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. -// -// Solidity: event Unwhitelisted(address indexed token) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterUnwhitelisted(opts *bind.FilterOpts, token []common.Address) (*ERC20CustodyEchidnaTestUnwhitelistedIterator, error) { - - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.FilterLogs(opts, "Unwhitelisted", tokenRule) - if err != nil { - return nil, err - } - return &ERC20CustodyEchidnaTestUnwhitelistedIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "Unwhitelisted", logs: logs, sub: sub}, nil -} - -// WatchUnwhitelisted is a free log subscription operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. -// -// Solidity: event Unwhitelisted(address indexed token) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchUnwhitelisted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestUnwhitelisted, token []common.Address) (event.Subscription, error) { - - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.WatchLogs(opts, "Unwhitelisted", tokenRule) - 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(ERC20CustodyEchidnaTestUnwhitelisted) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Unwhitelisted", 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 -} - -// ParseUnwhitelisted is a log parse operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. -// -// Solidity: event Unwhitelisted(address indexed token) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseUnwhitelisted(log types.Log) (*ERC20CustodyEchidnaTestUnwhitelisted, error) { - event := new(ERC20CustodyEchidnaTestUnwhitelisted) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Unwhitelisted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ERC20CustodyEchidnaTestUpdatedCustodyTSSAddressIterator is returned from FilterUpdatedCustodyTSSAddress and is used to iterate over the raw logs and unpacked data for UpdatedCustodyTSSAddress events raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestUpdatedCustodyTSSAddressIterator struct { - Event *ERC20CustodyEchidnaTestUpdatedCustodyTSSAddress // 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 *ERC20CustodyEchidnaTestUpdatedCustodyTSSAddressIterator) 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(ERC20CustodyEchidnaTestUpdatedCustodyTSSAddress) - 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(ERC20CustodyEchidnaTestUpdatedCustodyTSSAddress) - 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 *ERC20CustodyEchidnaTestUpdatedCustodyTSSAddressIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20CustodyEchidnaTestUpdatedCustodyTSSAddressIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20CustodyEchidnaTestUpdatedCustodyTSSAddress represents a UpdatedCustodyTSSAddress event raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestUpdatedCustodyTSSAddress struct { - NewTSSAddress common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpdatedCustodyTSSAddress is a free log retrieval operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. -// -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterUpdatedCustodyTSSAddress(opts *bind.FilterOpts) (*ERC20CustodyEchidnaTestUpdatedCustodyTSSAddressIterator, error) { - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.FilterLogs(opts, "UpdatedCustodyTSSAddress") - if err != nil { - return nil, err - } - return &ERC20CustodyEchidnaTestUpdatedCustodyTSSAddressIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "UpdatedCustodyTSSAddress", logs: logs, sub: sub}, nil -} - -// WatchUpdatedCustodyTSSAddress is a free log subscription operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. -// -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchUpdatedCustodyTSSAddress(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestUpdatedCustodyTSSAddress) (event.Subscription, error) { - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.WatchLogs(opts, "UpdatedCustodyTSSAddress") - 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(ERC20CustodyEchidnaTestUpdatedCustodyTSSAddress) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "UpdatedCustodyTSSAddress", 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 -} - -// ParseUpdatedCustodyTSSAddress is a log parse operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. -// -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseUpdatedCustodyTSSAddress(log types.Log) (*ERC20CustodyEchidnaTestUpdatedCustodyTSSAddress, error) { - event := new(ERC20CustodyEchidnaTestUpdatedCustodyTSSAddress) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "UpdatedCustodyTSSAddress", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ERC20CustodyEchidnaTestWhitelistedIterator is returned from FilterWhitelisted and is used to iterate over the raw logs and unpacked data for Whitelisted events raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestWhitelistedIterator struct { - Event *ERC20CustodyEchidnaTestWhitelisted // 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 *ERC20CustodyEchidnaTestWhitelistedIterator) 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(ERC20CustodyEchidnaTestWhitelisted) - 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(ERC20CustodyEchidnaTestWhitelisted) - 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 *ERC20CustodyEchidnaTestWhitelistedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20CustodyEchidnaTestWhitelistedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20CustodyEchidnaTestWhitelisted represents a Whitelisted event raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestWhitelisted struct { - Token common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWhitelisted is a free log retrieval operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. -// -// Solidity: event Whitelisted(address indexed token) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterWhitelisted(opts *bind.FilterOpts, token []common.Address) (*ERC20CustodyEchidnaTestWhitelistedIterator, error) { - - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.FilterLogs(opts, "Whitelisted", tokenRule) - if err != nil { - return nil, err - } - return &ERC20CustodyEchidnaTestWhitelistedIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "Whitelisted", logs: logs, sub: sub}, nil -} - -// WatchWhitelisted is a free log subscription operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. -// -// Solidity: event Whitelisted(address indexed token) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchWhitelisted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestWhitelisted, token []common.Address) (event.Subscription, error) { - - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.WatchLogs(opts, "Whitelisted", tokenRule) - 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(ERC20CustodyEchidnaTestWhitelisted) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Whitelisted", 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 -} - -// ParseWhitelisted is a log parse operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. -// -// Solidity: event Whitelisted(address indexed token) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseWhitelisted(log types.Log) (*ERC20CustodyEchidnaTestWhitelisted, error) { - event := new(ERC20CustodyEchidnaTestWhitelisted) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Whitelisted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ERC20CustodyEchidnaTestWithdrawnIterator is returned from FilterWithdrawn and is used to iterate over the raw logs and unpacked data for Withdrawn events raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestWithdrawnIterator struct { - Event *ERC20CustodyEchidnaTestWithdrawn // 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 *ERC20CustodyEchidnaTestWithdrawnIterator) 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(ERC20CustodyEchidnaTestWithdrawn) - 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(ERC20CustodyEchidnaTestWithdrawn) - 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 *ERC20CustodyEchidnaTestWithdrawnIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20CustodyEchidnaTestWithdrawnIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20CustodyEchidnaTestWithdrawn represents a Withdrawn event raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestWithdrawn struct { - To common.Address - Token common.Address - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawn is a free log retrieval operation binding the contract event 0xd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb. -// -// Solidity: event Withdrawn(address indexed to, address indexed token, uint256 amount) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterWithdrawn(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyEchidnaTestWithdrawnIterator, error) { - - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.FilterLogs(opts, "Withdrawn", toRule, tokenRule) - if err != nil { - return nil, err - } - return &ERC20CustodyEchidnaTestWithdrawnIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "Withdrawn", logs: logs, sub: sub}, nil -} - -// WatchWithdrawn is a free log subscription operation binding the contract event 0xd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb. -// -// Solidity: event Withdrawn(address indexed to, address indexed token, uint256 amount) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchWithdrawn(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestWithdrawn, to []common.Address, token []common.Address) (event.Subscription, error) { - - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.WatchLogs(opts, "Withdrawn", toRule, tokenRule) - 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(ERC20CustodyEchidnaTestWithdrawn) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Withdrawn", 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 -} - -// ParseWithdrawn is a log parse operation binding the contract event 0xd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb. -// -// Solidity: event Withdrawn(address indexed to, address indexed token, uint256 amount) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseWithdrawn(log types.Log) (*ERC20CustodyEchidnaTestWithdrawn, error) { - event := new(ERC20CustodyEchidnaTestWithdrawn) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "Withdrawn", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ERC20CustodyEchidnaTestWithdrawnAndCalledIterator is returned from FilterWithdrawnAndCalled and is used to iterate over the raw logs and unpacked data for WithdrawnAndCalled events raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestWithdrawnAndCalledIterator struct { - Event *ERC20CustodyEchidnaTestWithdrawnAndCalled // 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 *ERC20CustodyEchidnaTestWithdrawnAndCalledIterator) 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(ERC20CustodyEchidnaTestWithdrawnAndCalled) - 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(ERC20CustodyEchidnaTestWithdrawnAndCalled) - 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 *ERC20CustodyEchidnaTestWithdrawnAndCalledIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20CustodyEchidnaTestWithdrawnAndCalledIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20CustodyEchidnaTestWithdrawnAndCalled represents a WithdrawnAndCalled event raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestWithdrawnAndCalled struct { - To common.Address - Token common.Address - Amount *big.Int - Data []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawnAndCalled is a free log retrieval operation binding the contract event 0x6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5. -// -// Solidity: event WithdrawnAndCalled(address indexed to, address indexed token, uint256 amount, bytes data) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterWithdrawnAndCalled(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyEchidnaTestWithdrawnAndCalledIterator, error) { - - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.FilterLogs(opts, "WithdrawnAndCalled", toRule, tokenRule) - if err != nil { - return nil, err - } - return &ERC20CustodyEchidnaTestWithdrawnAndCalledIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "WithdrawnAndCalled", logs: logs, sub: sub}, nil -} - -// WatchWithdrawnAndCalled is a free log subscription operation binding the contract event 0x6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5. -// -// Solidity: event WithdrawnAndCalled(address indexed to, address indexed token, uint256 amount, bytes data) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchWithdrawnAndCalled(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestWithdrawnAndCalled, to []common.Address, token []common.Address) (event.Subscription, error) { - - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.WatchLogs(opts, "WithdrawnAndCalled", toRule, tokenRule) - 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(ERC20CustodyEchidnaTestWithdrawnAndCalled) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "WithdrawnAndCalled", 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 -} - -// ParseWithdrawnAndCalled is a log parse operation binding the contract event 0x6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5. -// -// Solidity: event WithdrawnAndCalled(address indexed to, address indexed token, uint256 amount, bytes data) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseWithdrawnAndCalled(log types.Log) (*ERC20CustodyEchidnaTestWithdrawnAndCalled, error) { - event := new(ERC20CustodyEchidnaTestWithdrawnAndCalled) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "WithdrawnAndCalled", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ERC20CustodyEchidnaTestWithdrawnAndRevertedIterator is returned from FilterWithdrawnAndReverted and is used to iterate over the raw logs and unpacked data for WithdrawnAndReverted events raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestWithdrawnAndRevertedIterator struct { - Event *ERC20CustodyEchidnaTestWithdrawnAndReverted // 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 *ERC20CustodyEchidnaTestWithdrawnAndRevertedIterator) 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(ERC20CustodyEchidnaTestWithdrawnAndReverted) - 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(ERC20CustodyEchidnaTestWithdrawnAndReverted) - 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 *ERC20CustodyEchidnaTestWithdrawnAndRevertedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20CustodyEchidnaTestWithdrawnAndRevertedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20CustodyEchidnaTestWithdrawnAndReverted represents a WithdrawnAndReverted event raised by the ERC20CustodyEchidnaTest contract. -type ERC20CustodyEchidnaTestWithdrawnAndReverted struct { - To common.Address - Token common.Address - Amount *big.Int - Data []byte - RevertContext RevertContext - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. -// -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyEchidnaTestWithdrawnAndRevertedIterator, error) { - - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.FilterLogs(opts, "WithdrawnAndReverted", toRule, tokenRule) - if err != nil { - return nil, err - } - return &ERC20CustodyEchidnaTestWithdrawnAndRevertedIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil -} - -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. -// -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestWithdrawnAndReverted, to []common.Address, token []common.Address) (event.Subscription, error) { - - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - logs, sub, err := _ERC20CustodyEchidnaTest.contract.WatchLogs(opts, "WithdrawnAndReverted", toRule, tokenRule) - 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(ERC20CustodyEchidnaTestWithdrawnAndReverted) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "WithdrawnAndReverted", 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 -} - -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. -// -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseWithdrawnAndReverted(log types.Log) (*ERC20CustodyEchidnaTestWithdrawnAndReverted, error) { - event := new(ERC20CustodyEchidnaTestWithdrawnAndReverted) - if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/v2/pkg/erc20custodyupgradetest.sol/erc20custodyupgradetest.go b/v2/pkg/erc20custodyupgradetest.sol/erc20custodyupgradetest.go new file mode 100644 index 000000000..3f9d08499 --- /dev/null +++ b/v2/pkg/erc20custodyupgradetest.sol/erc20custodyupgradetest.go @@ -0,0 +1,3180 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package erc20custodyupgradetest + +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 + _ = abi.ConvertType +) + +// RevertContext is an auto generated low-level Go binding around an user-defined struct. +type RevertContext struct { + Asset common.Address + Amount uint64 + RevertMessage []byte +} + +// ERC20CustodyUpgradeTestMetaData contains all meta data concerning the ERC20CustodyUpgradeTest contract. +var ERC20CustodyUpgradeTestMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setSupportsLegacy\",\"inputs\":[{\"name\":\"_supportsLegacy\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"supportsLegacy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unwhitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052348015601357600080fd5b5060805161296261003d600039600081816119360152818161195f0152611b3501526129626000f3fe6080604052600436106101c25760003560e01c806385f438c1116100f7578063c0c53b8b11610095578063d9caed1211610064578063d9caed12146105f6578063e609055e14610616578063e63ab1e914610636578063eab103df1461066a57600080fd5b8063c0c53b8b14610566578063c709ab6e14610586578063d547741f146105a6578063d936547e146105c657600080fd5b80639a590427116100d15780639a590427146104bb5780639b19251a146104db578063a217fddf146104fb578063ad3cb1cc1461051057600080fd5b806385f438c11461040257806391d1485414610436578063950837aa1461049b57600080fd5b80633f4ba83a11610164578063570618e11161013e578063570618e1146103625780635b112591146103965780635c975abb146103b65780638456cb59146103ed57600080fd5b80633f4ba83a146103255780634f1ef2861461033a57806352d1902d1461034d57600080fd5b8063248a9ca3116101a0578063248a9ca314610256578063252f07bf146102b35780632f2ff15d146102e557806336568abe1461030557600080fd5b806301ffc9a7146101c7578063116191b6146101fc57806321fc65f214610234575b600080fd5b3480156101d357600080fd5b506101e76101e236600461217c565b61068a565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5060005461021c906001600160a01b031681565b6040516001600160a01b0390911681526020016101f3565b34801561024057600080fd5b5061025461024f36600461221c565b610723565b005b34801561026257600080fd5b506102a561027136600461228f565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101f3565b3480156102bf57600080fd5b506002546101e79074010000000000000000000000000000000000000000900460ff1681565b3480156102f157600080fd5b506102546103003660046122a8565b6108cc565b34801561031157600080fd5b506102546103203660046122a8565b610916565b34801561033157600080fd5b50610254610967565b610254610348366004612307565b61099c565b34801561035957600080fd5b506102a56109bb565b34801561036e57600080fd5b506102a57f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b3480156103a257600080fd5b5060025461021c906001600160a01b031681565b3480156103c257600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101e7565b3480156103f957600080fd5b506102546109ea565b34801561040e57600080fd5b506102a57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561044257600080fd5b506101e76104513660046122a8565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104a757600080fd5b506102546104b6366004612410565b610a1c565b3480156104c757600080fd5b506102546104d6366004612410565b610baf565b3480156104e757600080fd5b506102546104f6366004612410565b610c63565b34801561050757600080fd5b506102a5600081565b34801561051c57600080fd5b506105596040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f39190612451565b34801561057257600080fd5b506102546105813660046124a2565b610d1d565b34801561059257600080fd5b506102546105a13660046124ed565b611017565b3480156105b257600080fd5b506102546105c13660046122a8565b6111c5565b3480156105d257600080fd5b506101e76105e1366004612410565b60016020526000908152604090205460ff1681565b34801561060257600080fd5b50610254610611366004612590565b611209565b34801561062257600080fd5b506102546106313660046125d1565b611320565b34801561064257600080fd5b506102a57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561067657600080fd5b50610254610685366004612670565b61156b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061071d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61072b6115c1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075581611642565b61075d61164c565b6001600160a01b03851660009081526001602052604090205460ff166107af576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546107c9906001600160a01b038781169116866116aa565b6000546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690635131ab599061081a9088908a908990899089906004016126d6565b600060405180830381600087803b15801561083457600080fd5b505af1158015610848573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161089393929190612719565b60405180910390a3506108c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461090681611642565b6109108383611744565b50505050565b6001600160a01b0381163314610958576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109628282611813565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61099181611642565b6109996118b9565b50565b6109a461192b565b6109ad826119fb565b6109b78282611a06565b5050565b60006109c5611b2a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1481611642565b610999611b8c565b6000610a2781611642565b6001600160a01b038216610a67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610a9e907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b0316611813565b50600254610ad6907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b0316611813565b50610b017f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483611744565b50610b2c7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a83611744565b50600254604080516001600160a01b03928316815291841660208301527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610bd981611642565b6001600160a01b038216610c19576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260016020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610c8d81611642565b6001600160a01b038216610ccd576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000818152600160208190526040808320805460ff1916909217909155517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d685750825b905060008267ffffffffffffffff166001148015610d855750303b155b905081158015610d93575080155b15610dca576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e2b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0388161580610e4857506001600160a01b038716155b80610e5a57506001600160a01b038616155b15610e91576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e99611be7565b610ea1611bef565b610ea9611be7565b610eb1611bff565b600080546001600160a01b03808b167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617835560028054918b1691909216179055610eff9087611744565b50610f2a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611744565b50610f557f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488611744565b50610f807f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a87611744565b50610fab7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a88611744565b50831561100d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61101f6115c1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461104981611642565b61105161164c565b6001600160a01b03861660009081526001602052604090205460ff166110a3576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546110bd906001600160a01b038881169116876116aa565b6000546040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063d0b492c3906111109089908b908a908a908a908a906004016127e4565b600060405180830381600087803b15801561112a57600080fd5b505af115801561113e573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b8787878760405161118b949392919061283b565b60405180910390a3506111bd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111ff81611642565b6109108383611813565b6112116115c1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461123b81611642565b61124361164c565b6001600160a01b03831660009081526001602052604090205460ff16611295576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112a96001600160a01b03841685846116aa565b826001600160a01b0316846001600160a01b03167fd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a4846040516112ee91815260200190565b60405180910390a35061096260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6113286115c1565b61133061164c565b60025474010000000000000000000000000000000000000000900460ff16611384576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526001602052604090205460ff166113d6576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611436573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145a9190612867565b90506114716001600160a01b038616333087611c0f565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa1580156114f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151c9190612867565b6115269190612880565b87876040516115399594939291906128ba565b60405180910390a2506111bd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600061157681611642565b506002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161163c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109998133611c48565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156116a8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261096291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611cd5565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611809576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556117bf3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061071d565b600091505061071d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611809576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061071d565b6118c1611d51565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119c457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119b87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156116a8576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109b781611642565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a7e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611a7b91810190612867565b60015b611ac4576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611b20576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611abb565b6109628383611dac565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116a8576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9461164c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361190d565b6116a8611e02565b611bf7611e02565b6116a8611e69565b611c07611e02565b6116a8611e71565b6040516001600160a01b0384811660248301528381166044830152606482018390526109109186918216906323b872dd906084016116d7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166109b7576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611abb565b6000611cea6001600160a01b03841683611ea4565b90508051600014158015611d0f575080806020019051810190611d0d91906128f3565b155b15610962576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611abb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166116a8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db582611eb9565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611dfa576109628282611f61565b6109b7611fd7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166116a8576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61171e611e02565b611e79611e02565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b6060611eb28383600061200f565b9392505050565b806001600160a01b03163b600003611f08576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611abb565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611f7e9190612910565b600060405180830381855af49150503d8060008114611fb9576040519150601f19603f3d011682016040523d82523d6000602084013e611fbe565b606091505b5091509150611fce8583836120c5565b95945050505050565b34156116a8576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608147101561204d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611abb565b600080856001600160a01b031684866040516120699190612910565b60006040518083038185875af1925050503d80600081146120a6576040519150601f19603f3d011682016040523d82523d6000602084013e6120ab565b606091505b50915091506120bb8683836120c5565b9695505050505050565b6060826120da576120d58261213a565b611eb2565b81511580156120f157506001600160a01b0384163b155b15612133576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611abb565b5080611eb2565b80511561214a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561218e57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611eb257600080fd5b6001600160a01b038116811461099957600080fd5b60008083601f8401126121e557600080fd5b50813567ffffffffffffffff8111156121fd57600080fd5b60208301915083602082850101111561221557600080fd5b9250929050565b60008060008060006080868803121561223457600080fd5b853561223f816121be565b9450602086013561224f816121be565b935060408601359250606086013567ffffffffffffffff81111561227257600080fd5b61227e888289016121d3565b969995985093965092949392505050565b6000602082840312156122a157600080fd5b5035919050565b600080604083850312156122bb57600080fd5b8235915060208301356122cd816121be565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561231a57600080fd5b8235612325816121be565b9150602083013567ffffffffffffffff81111561234157600080fd5b8301601f8101851361235257600080fd5b803567ffffffffffffffff81111561236c5761236c6122d8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156123d8576123d86122d8565b6040528181528282016020018710156123f057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561242257600080fd5b8135611eb2816121be565b60005b83811015612448578181015183820152602001612430565b50506000910152565b602081526000825180602084015261247081604085016020870161242d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156124b757600080fd5b83356124c2816121be565b925060208401356124d2816121be565b915060408401356124e2816121be565b809150509250925092565b60008060008060008060a0878903121561250657600080fd5b8635612511816121be565b95506020870135612521816121be565b945060408701359350606087013567ffffffffffffffff81111561254457600080fd5b61255089828a016121d3565b909450925050608087013567ffffffffffffffff81111561257057600080fd5b87016060818a03121561258257600080fd5b809150509295509295509295565b6000806000606084860312156125a557600080fd5b83356125b0816121be565b925060208401356125c0816121be565b929592945050506040919091013590565b600080600080600080608087890312156125ea57600080fd5b863567ffffffffffffffff81111561260157600080fd5b61260d89828a016121d3565b9097509550506020870135612621816121be565b935060408701359250606087013567ffffffffffffffff81111561264457600080fd5b61265089828a016121d3565b979a9699509497509295939492505050565b801515811461099957600080fd5b60006020828403121561268257600080fd5b8135611eb281612662565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061270e60808301848661268d565b979650505050505050565b838152604060208201526000611fce60408301848661268d565b60008135612740816121be565b6001600160a01b03168352602082013567ffffffffffffffff811680821461276757600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126127a357600080fd5b820160208101903567ffffffffffffffff8111156127c057600080fd5b8036038213156127cf57600080fd5b60606040860152611fce60608601828461268d565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061281c60a08301858761268d565b828103608084015261282e8185612733565b9998505050505050505050565b84815260606020820152600061285560608301858761268d565b828103604084015261270e8185612733565b60006020828403121561287957600080fd5b5051919050565b8181038181111561071d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006128ce60608301878961268d565b85602084015282810360408401526128e781858761268d565b98975050505050505050565b60006020828403121561290557600080fd5b8151611eb281612662565b6000825161292281846020870161242d565b919091019291505056fea2646970667358221220e1f1aeb4a3ca476e75d277f26d090f5288c0a2b1bba93b67dc701bbad0ee91b564736f6c634300081a0033", +} + +// ERC20CustodyUpgradeTestABI is the input ABI used to generate the binding from. +// Deprecated: Use ERC20CustodyUpgradeTestMetaData.ABI instead. +var ERC20CustodyUpgradeTestABI = ERC20CustodyUpgradeTestMetaData.ABI + +// ERC20CustodyUpgradeTestBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ERC20CustodyUpgradeTestMetaData.Bin instead. +var ERC20CustodyUpgradeTestBin = ERC20CustodyUpgradeTestMetaData.Bin + +// DeployERC20CustodyUpgradeTest deploys a new Ethereum contract, binding an instance of ERC20CustodyUpgradeTest to it. +func DeployERC20CustodyUpgradeTest(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ERC20CustodyUpgradeTest, error) { + parsed, err := ERC20CustodyUpgradeTestMetaData.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(ERC20CustodyUpgradeTestBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ERC20CustodyUpgradeTest{ERC20CustodyUpgradeTestCaller: ERC20CustodyUpgradeTestCaller{contract: contract}, ERC20CustodyUpgradeTestTransactor: ERC20CustodyUpgradeTestTransactor{contract: contract}, ERC20CustodyUpgradeTestFilterer: ERC20CustodyUpgradeTestFilterer{contract: contract}}, nil +} + +// ERC20CustodyUpgradeTest is an auto generated Go binding around an Ethereum contract. +type ERC20CustodyUpgradeTest struct { + ERC20CustodyUpgradeTestCaller // Read-only binding to the contract + ERC20CustodyUpgradeTestTransactor // Write-only binding to the contract + ERC20CustodyUpgradeTestFilterer // Log filterer for contract events +} + +// ERC20CustodyUpgradeTestCaller is an auto generated read-only Go binding around an Ethereum contract. +type ERC20CustodyUpgradeTestCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20CustodyUpgradeTestTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ERC20CustodyUpgradeTestTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20CustodyUpgradeTestFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ERC20CustodyUpgradeTestFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20CustodyUpgradeTestSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ERC20CustodyUpgradeTestSession struct { + Contract *ERC20CustodyUpgradeTest // 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 +} + +// ERC20CustodyUpgradeTestCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ERC20CustodyUpgradeTestCallerSession struct { + Contract *ERC20CustodyUpgradeTestCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ERC20CustodyUpgradeTestTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ERC20CustodyUpgradeTestTransactorSession struct { + Contract *ERC20CustodyUpgradeTestTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC20CustodyUpgradeTestRaw is an auto generated low-level Go binding around an Ethereum contract. +type ERC20CustodyUpgradeTestRaw struct { + Contract *ERC20CustodyUpgradeTest // Generic contract binding to access the raw methods on +} + +// ERC20CustodyUpgradeTestCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ERC20CustodyUpgradeTestCallerRaw struct { + Contract *ERC20CustodyUpgradeTestCaller // Generic read-only contract binding to access the raw methods on +} + +// ERC20CustodyUpgradeTestTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ERC20CustodyUpgradeTestTransactorRaw struct { + Contract *ERC20CustodyUpgradeTestTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewERC20CustodyUpgradeTest creates a new instance of ERC20CustodyUpgradeTest, bound to a specific deployed contract. +func NewERC20CustodyUpgradeTest(address common.Address, backend bind.ContractBackend) (*ERC20CustodyUpgradeTest, error) { + contract, err := bindERC20CustodyUpgradeTest(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTest{ERC20CustodyUpgradeTestCaller: ERC20CustodyUpgradeTestCaller{contract: contract}, ERC20CustodyUpgradeTestTransactor: ERC20CustodyUpgradeTestTransactor{contract: contract}, ERC20CustodyUpgradeTestFilterer: ERC20CustodyUpgradeTestFilterer{contract: contract}}, nil +} + +// NewERC20CustodyUpgradeTestCaller creates a new read-only instance of ERC20CustodyUpgradeTest, bound to a specific deployed contract. +func NewERC20CustodyUpgradeTestCaller(address common.Address, caller bind.ContractCaller) (*ERC20CustodyUpgradeTestCaller, error) { + contract, err := bindERC20CustodyUpgradeTest(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestCaller{contract: contract}, nil +} + +// NewERC20CustodyUpgradeTestTransactor creates a new write-only instance of ERC20CustodyUpgradeTest, bound to a specific deployed contract. +func NewERC20CustodyUpgradeTestTransactor(address common.Address, transactor bind.ContractTransactor) (*ERC20CustodyUpgradeTestTransactor, error) { + contract, err := bindERC20CustodyUpgradeTest(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestTransactor{contract: contract}, nil +} + +// NewERC20CustodyUpgradeTestFilterer creates a new log filterer instance of ERC20CustodyUpgradeTest, bound to a specific deployed contract. +func NewERC20CustodyUpgradeTestFilterer(address common.Address, filterer bind.ContractFilterer) (*ERC20CustodyUpgradeTestFilterer, error) { + contract, err := bindERC20CustodyUpgradeTest(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestFilterer{contract: contract}, nil +} + +// bindERC20CustodyUpgradeTest binds a generic wrapper to an already deployed contract. +func bindERC20CustodyUpgradeTest(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ERC20CustodyUpgradeTestMetaData.GetAbi() + 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 (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC20CustodyUpgradeTest.Contract.ERC20CustodyUpgradeTestCaller.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 (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.ERC20CustodyUpgradeTestTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.ERC20CustodyUpgradeTestTransactor.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 (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC20CustodyUpgradeTest.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 (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.contract.Transact(opts, method, params...) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20CustodyUpgradeTest.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) DEFAULTADMINROLE() ([32]byte, error) { + return _ERC20CustodyUpgradeTest.Contract.DEFAULTADMINROLE(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _ERC20CustodyUpgradeTest.Contract.DEFAULTADMINROLE(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20CustodyUpgradeTest.contract.Call(opts, &out, "PAUSER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) PAUSERROLE() ([32]byte, error) { + return _ERC20CustodyUpgradeTest.Contract.PAUSERROLE(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerSession) PAUSERROLE() ([32]byte, error) { + return _ERC20CustodyUpgradeTest.Contract.PAUSERROLE(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ERC20CustodyUpgradeTest.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ERC20CustodyUpgradeTest.Contract.UPGRADEINTERFACEVERSION(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ERC20CustodyUpgradeTest.Contract.UPGRADEINTERFACEVERSION(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. +// +// Solidity: function WHITELISTER_ROLE() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCaller) WHITELISTERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20CustodyUpgradeTest.contract.Call(opts, &out, "WHITELISTER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. +// +// Solidity: function WHITELISTER_ROLE() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) WHITELISTERROLE() ([32]byte, error) { + return _ERC20CustodyUpgradeTest.Contract.WHITELISTERROLE(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// WHITELISTERROLE is a free data retrieval call binding the contract method 0x570618e1. +// +// Solidity: function WHITELISTER_ROLE() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerSession) WHITELISTERROLE() ([32]byte, error) { + return _ERC20CustodyUpgradeTest.Contract.WHITELISTERROLE(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCaller) WITHDRAWERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20CustodyUpgradeTest.contract.Call(opts, &out, "WITHDRAWER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) WITHDRAWERROLE() ([32]byte, error) { + return _ERC20CustodyUpgradeTest.Contract.WITHDRAWERROLE(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerSession) WITHDRAWERROLE() ([32]byte, error) { + return _ERC20CustodyUpgradeTest.Contract.WITHDRAWERROLE(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// Gateway is a free data retrieval call binding the contract method 0x116191b6. +// +// Solidity: function gateway() view returns(address) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCaller) Gateway(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20CustodyUpgradeTest.contract.Call(opts, &out, "gateway") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Gateway is a free data retrieval call binding the contract method 0x116191b6. +// +// Solidity: function gateway() view returns(address) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) Gateway() (common.Address, error) { + return _ERC20CustodyUpgradeTest.Contract.Gateway(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// Gateway is a free data retrieval call binding the contract method 0x116191b6. +// +// Solidity: function gateway() view returns(address) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerSession) Gateway() (common.Address, error) { + return _ERC20CustodyUpgradeTest.Contract.Gateway(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _ERC20CustodyUpgradeTest.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _ERC20CustodyUpgradeTest.Contract.GetRoleAdmin(&_ERC20CustodyUpgradeTest.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _ERC20CustodyUpgradeTest.Contract.GetRoleAdmin(&_ERC20CustodyUpgradeTest.CallOpts, role) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _ERC20CustodyUpgradeTest.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _ERC20CustodyUpgradeTest.Contract.HasRole(&_ERC20CustodyUpgradeTest.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _ERC20CustodyUpgradeTest.Contract.HasRole(&_ERC20CustodyUpgradeTest.CallOpts, role, account) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ERC20CustodyUpgradeTest.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 (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) Paused() (bool, error) { + return _ERC20CustodyUpgradeTest.Contract.Paused(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerSession) Paused() (bool, error) { + return _ERC20CustodyUpgradeTest.Contract.Paused(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20CustodyUpgradeTest.contract.Call(opts, &out, "proxiableUUID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) ProxiableUUID() ([32]byte, error) { + return _ERC20CustodyUpgradeTest.Contract.ProxiableUUID(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerSession) ProxiableUUID() ([32]byte, error) { + return _ERC20CustodyUpgradeTest.Contract.ProxiableUUID(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _ERC20CustodyUpgradeTest.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ERC20CustodyUpgradeTest.Contract.SupportsInterface(&_ERC20CustodyUpgradeTest.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ERC20CustodyUpgradeTest.Contract.SupportsInterface(&_ERC20CustodyUpgradeTest.CallOpts, interfaceId) +} + +// SupportsLegacy is a free data retrieval call binding the contract method 0x252f07bf. +// +// Solidity: function supportsLegacy() view returns(bool) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCaller) SupportsLegacy(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ERC20CustodyUpgradeTest.contract.Call(opts, &out, "supportsLegacy") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SupportsLegacy is a free data retrieval call binding the contract method 0x252f07bf. +// +// Solidity: function supportsLegacy() view returns(bool) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) SupportsLegacy() (bool, error) { + return _ERC20CustodyUpgradeTest.Contract.SupportsLegacy(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// SupportsLegacy is a free data retrieval call binding the contract method 0x252f07bf. +// +// Solidity: function supportsLegacy() view returns(bool) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerSession) SupportsLegacy() (bool, error) { + return _ERC20CustodyUpgradeTest.Contract.SupportsLegacy(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCaller) TssAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20CustodyUpgradeTest.contract.Call(opts, &out, "tssAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) TssAddress() (common.Address, error) { + return _ERC20CustodyUpgradeTest.Contract.TssAddress(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerSession) TssAddress() (common.Address, error) { + return _ERC20CustodyUpgradeTest.Contract.TssAddress(&_ERC20CustodyUpgradeTest.CallOpts) +} + +// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. +// +// Solidity: function whitelisted(address ) view returns(bool) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCaller) Whitelisted(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _ERC20CustodyUpgradeTest.contract.Call(opts, &out, "whitelisted", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. +// +// Solidity: function whitelisted(address ) view returns(bool) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) Whitelisted(arg0 common.Address) (bool, error) { + return _ERC20CustodyUpgradeTest.Contract.Whitelisted(&_ERC20CustodyUpgradeTest.CallOpts, arg0) +} + +// Whitelisted is a free data retrieval call binding the contract method 0xd936547e. +// +// Solidity: function whitelisted(address ) view returns(bool) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestCallerSession) Whitelisted(arg0 common.Address) (bool, error) { + return _ERC20CustodyUpgradeTest.Contract.Whitelisted(&_ERC20CustodyUpgradeTest.CallOpts, arg0) +} + +// Deposit is a paid mutator transaction binding the contract method 0xe609055e. +// +// Solidity: function deposit(bytes recipient, address asset, uint256 amount, bytes message) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) Deposit(opts *bind.TransactOpts, recipient []byte, asset common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "deposit", recipient, asset, amount, message) +} + +// Deposit is a paid mutator transaction binding the contract method 0xe609055e. +// +// Solidity: function deposit(bytes recipient, address asset, uint256 amount, bytes message) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) Deposit(recipient []byte, asset common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.Deposit(&_ERC20CustodyUpgradeTest.TransactOpts, recipient, asset, amount, message) +} + +// Deposit is a paid mutator transaction binding the contract method 0xe609055e. +// +// Solidity: function deposit(bytes recipient, address asset, uint256 amount, bytes message) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) Deposit(recipient []byte, asset common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.Deposit(&_ERC20CustodyUpgradeTest.TransactOpts, recipient, asset, amount, message) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.GrantRole(&_ERC20CustodyUpgradeTest.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.GrantRole(&_ERC20CustodyUpgradeTest.TransactOpts, role, account) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address gateway_, address tssAddress_, address admin_) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) Initialize(opts *bind.TransactOpts, gateway_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "initialize", gateway_, tssAddress_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address gateway_, address tssAddress_, address admin_) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) Initialize(gateway_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.Initialize(&_ERC20CustodyUpgradeTest.TransactOpts, gateway_, tssAddress_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address gateway_, address tssAddress_, address admin_) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) Initialize(gateway_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.Initialize(&_ERC20CustodyUpgradeTest.TransactOpts, gateway_, tssAddress_, admin_) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) Pause() (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.Pause(&_ERC20CustodyUpgradeTest.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) Pause() (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.Pause(&_ERC20CustodyUpgradeTest.TransactOpts) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "renounceRole", role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.RenounceRole(&_ERC20CustodyUpgradeTest.TransactOpts, role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.RenounceRole(&_ERC20CustodyUpgradeTest.TransactOpts, role, callerConfirmation) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.RevokeRole(&_ERC20CustodyUpgradeTest.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.RevokeRole(&_ERC20CustodyUpgradeTest.TransactOpts, role, account) +} + +// SetSupportsLegacy is a paid mutator transaction binding the contract method 0xeab103df. +// +// Solidity: function setSupportsLegacy(bool _supportsLegacy) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) SetSupportsLegacy(opts *bind.TransactOpts, _supportsLegacy bool) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "setSupportsLegacy", _supportsLegacy) +} + +// SetSupportsLegacy is a paid mutator transaction binding the contract method 0xeab103df. +// +// Solidity: function setSupportsLegacy(bool _supportsLegacy) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) SetSupportsLegacy(_supportsLegacy bool) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.SetSupportsLegacy(&_ERC20CustodyUpgradeTest.TransactOpts, _supportsLegacy) +} + +// SetSupportsLegacy is a paid mutator transaction binding the contract method 0xeab103df. +// +// Solidity: function setSupportsLegacy(bool _supportsLegacy) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) SetSupportsLegacy(_supportsLegacy bool) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.SetSupportsLegacy(&_ERC20CustodyUpgradeTest.TransactOpts, _supportsLegacy) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) Unpause() (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.Unpause(&_ERC20CustodyUpgradeTest.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) Unpause() (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.Unpause(&_ERC20CustodyUpgradeTest.TransactOpts) +} + +// Unwhitelist is a paid mutator transaction binding the contract method 0x9a590427. +// +// Solidity: function unwhitelist(address token) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) Unwhitelist(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "unwhitelist", token) +} + +// Unwhitelist is a paid mutator transaction binding the contract method 0x9a590427. +// +// Solidity: function unwhitelist(address token) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) Unwhitelist(token common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.Unwhitelist(&_ERC20CustodyUpgradeTest.TransactOpts, token) +} + +// Unwhitelist is a paid mutator transaction binding the contract method 0x9a590427. +// +// Solidity: function unwhitelist(address token) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) Unwhitelist(token common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.Unwhitelist(&_ERC20CustodyUpgradeTest.TransactOpts, token) +} + +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) UpdateTSSAddress(opts *bind.TransactOpts, newTSSAddress common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "updateTSSAddress", newTSSAddress) +} + +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) UpdateTSSAddress(newTSSAddress common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.UpdateTSSAddress(&_ERC20CustodyUpgradeTest.TransactOpts, newTSSAddress) +} + +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) UpdateTSSAddress(newTSSAddress common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.UpdateTSSAddress(&_ERC20CustodyUpgradeTest.TransactOpts, newTSSAddress) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.UpgradeToAndCall(&_ERC20CustodyUpgradeTest.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.UpgradeToAndCall(&_ERC20CustodyUpgradeTest.TransactOpts, newImplementation, data) +} + +// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address token) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) Whitelist(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "whitelist", token) +} + +// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address token) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) Whitelist(token common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.Whitelist(&_ERC20CustodyUpgradeTest.TransactOpts, token) +} + +// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address token) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) Whitelist(token common.Address) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.Whitelist(&_ERC20CustodyUpgradeTest.TransactOpts, token) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address to, address token, uint256 amount) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) Withdraw(opts *bind.TransactOpts, to common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "withdraw", to, token, amount) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address to, address token, uint256 amount) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) Withdraw(to common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.Withdraw(&_ERC20CustodyUpgradeTest.TransactOpts, to, token, amount) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address to, address token, uint256 amount) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) Withdraw(to common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.Withdraw(&_ERC20CustodyUpgradeTest.TransactOpts, to, token, amount) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// +// Solidity: function withdrawAndCall(address to, address token, uint256 amount, bytes data) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) WithdrawAndCall(opts *bind.TransactOpts, to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "withdrawAndCall", to, token, amount, data) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// +// Solidity: function withdrawAndCall(address to, address token, uint256 amount, bytes data) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) WithdrawAndCall(to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.WithdrawAndCall(&_ERC20CustodyUpgradeTest.TransactOpts, to, token, amount, data) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// +// Solidity: function withdrawAndCall(address to, address token, uint256 amount, bytes data) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) WithdrawAndCall(to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.WithdrawAndCall(&_ERC20CustodyUpgradeTest.TransactOpts, to, token, amount, data) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. +// +// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "withdrawAndRevert", to, token, amount, data, revertContext) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. +// +// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) WithdrawAndRevert(to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.WithdrawAndRevert(&_ERC20CustodyUpgradeTest.TransactOpts, to, token, amount, data, revertContext) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. +// +// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) WithdrawAndRevert(to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.WithdrawAndRevert(&_ERC20CustodyUpgradeTest.TransactOpts, to, token, amount, data, revertContext) +} + +// ERC20CustodyUpgradeTestDepositedIterator is returned from FilterDeposited and is used to iterate over the raw logs and unpacked data for Deposited events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestDepositedIterator struct { + Event *ERC20CustodyUpgradeTestDeposited // 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 *ERC20CustodyUpgradeTestDepositedIterator) 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(ERC20CustodyUpgradeTestDeposited) + 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(ERC20CustodyUpgradeTestDeposited) + 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 *ERC20CustodyUpgradeTestDepositedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestDepositedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestDeposited represents a Deposited event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestDeposited struct { + Recipient []byte + Asset common.Address + Amount *big.Int + Message []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeposited is a free log retrieval operation binding the contract event 0x1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae. +// +// Solidity: event Deposited(bytes recipient, address indexed asset, uint256 amount, bytes message) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterDeposited(opts *bind.FilterOpts, asset []common.Address) (*ERC20CustodyUpgradeTestDepositedIterator, error) { + + var assetRule []interface{} + for _, assetItem := range asset { + assetRule = append(assetRule, assetItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "Deposited", assetRule) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestDepositedIterator{contract: _ERC20CustodyUpgradeTest.contract, event: "Deposited", logs: logs, sub: sub}, nil +} + +// WatchDeposited is a free log subscription operation binding the contract event 0x1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae. +// +// Solidity: event Deposited(bytes recipient, address indexed asset, uint256 amount, bytes message) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchDeposited(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestDeposited, asset []common.Address) (event.Subscription, error) { + + var assetRule []interface{} + for _, assetItem := range asset { + assetRule = append(assetRule, assetItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.WatchLogs(opts, "Deposited", assetRule) + 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(ERC20CustodyUpgradeTestDeposited) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Deposited", 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 +} + +// ParseDeposited is a log parse operation binding the contract event 0x1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae. +// +// Solidity: event Deposited(bytes recipient, address indexed asset, uint256 amount, bytes message) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParseDeposited(log types.Log) (*ERC20CustodyUpgradeTestDeposited, error) { + event := new(ERC20CustodyUpgradeTestDeposited) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Deposited", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyUpgradeTestInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestInitializedIterator struct { + Event *ERC20CustodyUpgradeTestInitialized // 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 *ERC20CustodyUpgradeTestInitializedIterator) 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(ERC20CustodyUpgradeTestInitialized) + 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(ERC20CustodyUpgradeTestInitialized) + 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 *ERC20CustodyUpgradeTestInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestInitialized represents a Initialized event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC20CustodyUpgradeTestInitializedIterator, error) { + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestInitializedIterator{contract: _ERC20CustodyUpgradeTest.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestInitialized) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyUpgradeTest.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(ERC20CustodyUpgradeTestInitialized) + if err := _ERC20CustodyUpgradeTest.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 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParseInitialized(log types.Log) (*ERC20CustodyUpgradeTestInitialized, error) { + event := new(ERC20CustodyUpgradeTestInitialized) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyUpgradeTestPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestPausedIterator struct { + Event *ERC20CustodyUpgradeTestPaused // 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 *ERC20CustodyUpgradeTestPausedIterator) 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(ERC20CustodyUpgradeTestPaused) + 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(ERC20CustodyUpgradeTestPaused) + 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 *ERC20CustodyUpgradeTestPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestPaused represents a Paused event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestPaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterPaused(opts *bind.FilterOpts) (*ERC20CustodyUpgradeTestPausedIterator, error) { + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestPausedIterator{contract: _ERC20CustodyUpgradeTest.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestPaused) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.WatchLogs(opts, "Paused") + 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(ERC20CustodyUpgradeTestPaused) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Paused", 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 +} + +// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParsePaused(log types.Log) (*ERC20CustodyUpgradeTestPaused, error) { + event := new(ERC20CustodyUpgradeTestPaused) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyUpgradeTestRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestRoleAdminChangedIterator struct { + Event *ERC20CustodyUpgradeTestRoleAdminChanged // 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 *ERC20CustodyUpgradeTestRoleAdminChangedIterator) 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(ERC20CustodyUpgradeTestRoleAdminChanged) + 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(ERC20CustodyUpgradeTestRoleAdminChanged) + 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 *ERC20CustodyUpgradeTestRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestRoleAdminChanged represents a RoleAdminChanged event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*ERC20CustodyUpgradeTestRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestRoleAdminChangedIterator{contract: _ERC20CustodyUpgradeTest.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(ERC20CustodyUpgradeTestRoleAdminChanged) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "RoleAdminChanged", 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 +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParseRoleAdminChanged(log types.Log) (*ERC20CustodyUpgradeTestRoleAdminChanged, error) { + event := new(ERC20CustodyUpgradeTestRoleAdminChanged) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyUpgradeTestRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestRoleGrantedIterator struct { + Event *ERC20CustodyUpgradeTestRoleGranted // 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 *ERC20CustodyUpgradeTestRoleGrantedIterator) 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(ERC20CustodyUpgradeTestRoleGranted) + 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(ERC20CustodyUpgradeTestRoleGranted) + 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 *ERC20CustodyUpgradeTestRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestRoleGranted represents a RoleGranted event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ERC20CustodyUpgradeTestRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestRoleGrantedIterator{contract: _ERC20CustodyUpgradeTest.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + 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(ERC20CustodyUpgradeTestRoleGranted) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "RoleGranted", 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 +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParseRoleGranted(log types.Log) (*ERC20CustodyUpgradeTestRoleGranted, error) { + event := new(ERC20CustodyUpgradeTestRoleGranted) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyUpgradeTestRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestRoleRevokedIterator struct { + Event *ERC20CustodyUpgradeTestRoleRevoked // 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 *ERC20CustodyUpgradeTestRoleRevokedIterator) 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(ERC20CustodyUpgradeTestRoleRevoked) + 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(ERC20CustodyUpgradeTestRoleRevoked) + 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 *ERC20CustodyUpgradeTestRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestRoleRevoked represents a RoleRevoked event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ERC20CustodyUpgradeTestRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestRoleRevokedIterator{contract: _ERC20CustodyUpgradeTest.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + 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(ERC20CustodyUpgradeTestRoleRevoked) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "RoleRevoked", 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 +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParseRoleRevoked(log types.Log) (*ERC20CustodyUpgradeTestRoleRevoked, error) { + event := new(ERC20CustodyUpgradeTestRoleRevoked) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyUpgradeTestUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestUnpausedIterator struct { + Event *ERC20CustodyUpgradeTestUnpaused // 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 *ERC20CustodyUpgradeTestUnpausedIterator) 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(ERC20CustodyUpgradeTestUnpaused) + 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(ERC20CustodyUpgradeTestUnpaused) + 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 *ERC20CustodyUpgradeTestUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestUnpaused represents a Unpaused event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestUnpaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterUnpaused(opts *bind.FilterOpts) (*ERC20CustodyUpgradeTestUnpausedIterator, error) { + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestUnpausedIterator{contract: _ERC20CustodyUpgradeTest.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestUnpaused) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.WatchLogs(opts, "Unpaused") + 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(ERC20CustodyUpgradeTestUnpaused) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Unpaused", 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 +} + +// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParseUnpaused(log types.Log) (*ERC20CustodyUpgradeTestUnpaused, error) { + event := new(ERC20CustodyUpgradeTestUnpaused) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyUpgradeTestUnwhitelistedIterator is returned from FilterUnwhitelisted and is used to iterate over the raw logs and unpacked data for Unwhitelisted events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestUnwhitelistedIterator struct { + Event *ERC20CustodyUpgradeTestUnwhitelisted // 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 *ERC20CustodyUpgradeTestUnwhitelistedIterator) 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(ERC20CustodyUpgradeTestUnwhitelisted) + 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(ERC20CustodyUpgradeTestUnwhitelisted) + 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 *ERC20CustodyUpgradeTestUnwhitelistedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestUnwhitelistedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestUnwhitelisted represents a Unwhitelisted event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestUnwhitelisted struct { + Token common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnwhitelisted is a free log retrieval operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterUnwhitelisted(opts *bind.FilterOpts, token []common.Address) (*ERC20CustodyUpgradeTestUnwhitelistedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "Unwhitelisted", tokenRule) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestUnwhitelistedIterator{contract: _ERC20CustodyUpgradeTest.contract, event: "Unwhitelisted", logs: logs, sub: sub}, nil +} + +// WatchUnwhitelisted is a free log subscription operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchUnwhitelisted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestUnwhitelisted, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.WatchLogs(opts, "Unwhitelisted", tokenRule) + 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(ERC20CustodyUpgradeTestUnwhitelisted) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Unwhitelisted", 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 +} + +// ParseUnwhitelisted is a log parse operation binding the contract event 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791. +// +// Solidity: event Unwhitelisted(address indexed token) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParseUnwhitelisted(log types.Log) (*ERC20CustodyUpgradeTestUnwhitelisted, error) { + event := new(ERC20CustodyUpgradeTestUnwhitelisted) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Unwhitelisted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyUpgradeTestUpdatedCustodyTSSAddressIterator is returned from FilterUpdatedCustodyTSSAddress and is used to iterate over the raw logs and unpacked data for UpdatedCustodyTSSAddress events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestUpdatedCustodyTSSAddressIterator struct { + Event *ERC20CustodyUpgradeTestUpdatedCustodyTSSAddress // 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 *ERC20CustodyUpgradeTestUpdatedCustodyTSSAddressIterator) 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(ERC20CustodyUpgradeTestUpdatedCustodyTSSAddress) + 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(ERC20CustodyUpgradeTestUpdatedCustodyTSSAddress) + 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 *ERC20CustodyUpgradeTestUpdatedCustodyTSSAddressIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestUpdatedCustodyTSSAddressIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestUpdatedCustodyTSSAddress represents a UpdatedCustodyTSSAddress event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestUpdatedCustodyTSSAddress struct { + OldTSSAddress common.Address + NewTSSAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedCustodyTSSAddress is a free log retrieval operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. +// +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterUpdatedCustodyTSSAddress(opts *bind.FilterOpts) (*ERC20CustodyUpgradeTestUpdatedCustodyTSSAddressIterator, error) { + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "UpdatedCustodyTSSAddress") + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestUpdatedCustodyTSSAddressIterator{contract: _ERC20CustodyUpgradeTest.contract, event: "UpdatedCustodyTSSAddress", logs: logs, sub: sub}, nil +} + +// WatchUpdatedCustodyTSSAddress is a free log subscription operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. +// +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchUpdatedCustodyTSSAddress(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestUpdatedCustodyTSSAddress) (event.Subscription, error) { + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.WatchLogs(opts, "UpdatedCustodyTSSAddress") + 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(ERC20CustodyUpgradeTestUpdatedCustodyTSSAddress) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "UpdatedCustodyTSSAddress", 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 +} + +// ParseUpdatedCustodyTSSAddress is a log parse operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. +// +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParseUpdatedCustodyTSSAddress(log types.Log) (*ERC20CustodyUpgradeTestUpdatedCustodyTSSAddress, error) { + event := new(ERC20CustodyUpgradeTestUpdatedCustodyTSSAddress) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "UpdatedCustodyTSSAddress", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyUpgradeTestUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestUpgradedIterator struct { + Event *ERC20CustodyUpgradeTestUpgraded // 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 *ERC20CustodyUpgradeTestUpgradedIterator) 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(ERC20CustodyUpgradeTestUpgraded) + 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(ERC20CustodyUpgradeTestUpgraded) + 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 *ERC20CustodyUpgradeTestUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestUpgraded represents a Upgraded event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*ERC20CustodyUpgradeTestUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestUpgradedIterator{contract: _ERC20CustodyUpgradeTest.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.WatchLogs(opts, "Upgraded", implementationRule) + 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(ERC20CustodyUpgradeTestUpgraded) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Upgraded", 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 +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParseUpgraded(log types.Log) (*ERC20CustodyUpgradeTestUpgraded, error) { + event := new(ERC20CustodyUpgradeTestUpgraded) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyUpgradeTestWhitelistedIterator is returned from FilterWhitelisted and is used to iterate over the raw logs and unpacked data for Whitelisted events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestWhitelistedIterator struct { + Event *ERC20CustodyUpgradeTestWhitelisted // 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 *ERC20CustodyUpgradeTestWhitelistedIterator) 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(ERC20CustodyUpgradeTestWhitelisted) + 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(ERC20CustodyUpgradeTestWhitelisted) + 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 *ERC20CustodyUpgradeTestWhitelistedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestWhitelistedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestWhitelisted represents a Whitelisted event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestWhitelisted struct { + Token common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWhitelisted is a free log retrieval operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterWhitelisted(opts *bind.FilterOpts, token []common.Address) (*ERC20CustodyUpgradeTestWhitelistedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "Whitelisted", tokenRule) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestWhitelistedIterator{contract: _ERC20CustodyUpgradeTest.contract, event: "Whitelisted", logs: logs, sub: sub}, nil +} + +// WatchWhitelisted is a free log subscription operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchWhitelisted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestWhitelisted, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.WatchLogs(opts, "Whitelisted", tokenRule) + 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(ERC20CustodyUpgradeTestWhitelisted) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Whitelisted", 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 +} + +// ParseWhitelisted is a log parse operation binding the contract event 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54. +// +// Solidity: event Whitelisted(address indexed token) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParseWhitelisted(log types.Log) (*ERC20CustodyUpgradeTestWhitelisted, error) { + event := new(ERC20CustodyUpgradeTestWhitelisted) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Whitelisted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyUpgradeTestWithdrawnIterator is returned from FilterWithdrawn and is used to iterate over the raw logs and unpacked data for Withdrawn events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestWithdrawnIterator struct { + Event *ERC20CustodyUpgradeTestWithdrawn // 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 *ERC20CustodyUpgradeTestWithdrawnIterator) 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(ERC20CustodyUpgradeTestWithdrawn) + 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(ERC20CustodyUpgradeTestWithdrawn) + 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 *ERC20CustodyUpgradeTestWithdrawnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestWithdrawn represents a Withdrawn event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestWithdrawn struct { + To common.Address + Token common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawn is a free log retrieval operation binding the contract event 0xd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb. +// +// Solidity: event Withdrawn(address indexed to, address indexed token, uint256 amount) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterWithdrawn(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyUpgradeTestWithdrawnIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "Withdrawn", toRule, tokenRule) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestWithdrawnIterator{contract: _ERC20CustodyUpgradeTest.contract, event: "Withdrawn", logs: logs, sub: sub}, nil +} + +// WatchWithdrawn is a free log subscription operation binding the contract event 0xd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb. +// +// Solidity: event Withdrawn(address indexed to, address indexed token, uint256 amount) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchWithdrawn(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestWithdrawn, to []common.Address, token []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.WatchLogs(opts, "Withdrawn", toRule, tokenRule) + 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(ERC20CustodyUpgradeTestWithdrawn) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Withdrawn", 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 +} + +// ParseWithdrawn is a log parse operation binding the contract event 0xd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb. +// +// Solidity: event Withdrawn(address indexed to, address indexed token, uint256 amount) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParseWithdrawn(log types.Log) (*ERC20CustodyUpgradeTestWithdrawn, error) { + event := new(ERC20CustodyUpgradeTestWithdrawn) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "Withdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyUpgradeTestWithdrawnAndCalledIterator is returned from FilterWithdrawnAndCalled and is used to iterate over the raw logs and unpacked data for WithdrawnAndCalled events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestWithdrawnAndCalledIterator struct { + Event *ERC20CustodyUpgradeTestWithdrawnAndCalled // 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 *ERC20CustodyUpgradeTestWithdrawnAndCalledIterator) 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(ERC20CustodyUpgradeTestWithdrawnAndCalled) + 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(ERC20CustodyUpgradeTestWithdrawnAndCalled) + 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 *ERC20CustodyUpgradeTestWithdrawnAndCalledIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestWithdrawnAndCalledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestWithdrawnAndCalled represents a WithdrawnAndCalled event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestWithdrawnAndCalled struct { + To common.Address + Token common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnAndCalled is a free log retrieval operation binding the contract event 0x6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5. +// +// Solidity: event WithdrawnAndCalled(address indexed to, address indexed token, uint256 amount, bytes data) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterWithdrawnAndCalled(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyUpgradeTestWithdrawnAndCalledIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "WithdrawnAndCalled", toRule, tokenRule) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestWithdrawnAndCalledIterator{contract: _ERC20CustodyUpgradeTest.contract, event: "WithdrawnAndCalled", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnAndCalled is a free log subscription operation binding the contract event 0x6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5. +// +// Solidity: event WithdrawnAndCalled(address indexed to, address indexed token, uint256 amount, bytes data) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchWithdrawnAndCalled(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestWithdrawnAndCalled, to []common.Address, token []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.WatchLogs(opts, "WithdrawnAndCalled", toRule, tokenRule) + 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(ERC20CustodyUpgradeTestWithdrawnAndCalled) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "WithdrawnAndCalled", 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 +} + +// ParseWithdrawnAndCalled is a log parse operation binding the contract event 0x6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5. +// +// Solidity: event WithdrawnAndCalled(address indexed to, address indexed token, uint256 amount, bytes data) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParseWithdrawnAndCalled(log types.Log) (*ERC20CustodyUpgradeTestWithdrawnAndCalled, error) { + event := new(ERC20CustodyUpgradeTestWithdrawnAndCalled) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "WithdrawnAndCalled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyUpgradeTestWithdrawnAndRevertedIterator is returned from FilterWithdrawnAndReverted and is used to iterate over the raw logs and unpacked data for WithdrawnAndReverted events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestWithdrawnAndRevertedIterator struct { + Event *ERC20CustodyUpgradeTestWithdrawnAndReverted // 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 *ERC20CustodyUpgradeTestWithdrawnAndRevertedIterator) 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(ERC20CustodyUpgradeTestWithdrawnAndReverted) + 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(ERC20CustodyUpgradeTestWithdrawnAndReverted) + 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 *ERC20CustodyUpgradeTestWithdrawnAndRevertedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestWithdrawnAndRevertedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestWithdrawnAndReverted represents a WithdrawnAndReverted event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestWithdrawnAndReverted struct { + To common.Address + Token common.Address + Amount *big.Int + Data []byte + RevertContext RevertContext + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyUpgradeTestWithdrawnAndRevertedIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "WithdrawnAndReverted", toRule, tokenRule) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestWithdrawnAndRevertedIterator{contract: _ERC20CustodyUpgradeTest.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestWithdrawnAndReverted, to []common.Address, token []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.WatchLogs(opts, "WithdrawnAndReverted", toRule, tokenRule) + 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(ERC20CustodyUpgradeTestWithdrawnAndReverted) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "WithdrawnAndReverted", 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 +} + +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParseWithdrawnAndReverted(log types.Log) (*ERC20CustodyUpgradeTestWithdrawnAndReverted, error) { + event := new(ERC20CustodyUpgradeTestWithdrawnAndReverted) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20CustodyUpgradeTestWithdrawnV2Iterator is returned from FilterWithdrawnV2 and is used to iterate over the raw logs and unpacked data for WithdrawnV2 events raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestWithdrawnV2Iterator struct { + Event *ERC20CustodyUpgradeTestWithdrawnV2 // 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 *ERC20CustodyUpgradeTestWithdrawnV2Iterator) 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(ERC20CustodyUpgradeTestWithdrawnV2) + 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(ERC20CustodyUpgradeTestWithdrawnV2) + 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 *ERC20CustodyUpgradeTestWithdrawnV2Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20CustodyUpgradeTestWithdrawnV2Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20CustodyUpgradeTestWithdrawnV2 represents a WithdrawnV2 event raised by the ERC20CustodyUpgradeTest contract. +type ERC20CustodyUpgradeTestWithdrawnV2 struct { + To common.Address + Token common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnV2 is a free log retrieval operation binding the contract event 0xd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a4. +// +// Solidity: event WithdrawnV2(address indexed to, address indexed token, uint256 amount) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) FilterWithdrawnV2(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyUpgradeTestWithdrawnV2Iterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.FilterLogs(opts, "WithdrawnV2", toRule, tokenRule) + if err != nil { + return nil, err + } + return &ERC20CustodyUpgradeTestWithdrawnV2Iterator{contract: _ERC20CustodyUpgradeTest.contract, event: "WithdrawnV2", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnV2 is a free log subscription operation binding the contract event 0xd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a4. +// +// Solidity: event WithdrawnV2(address indexed to, address indexed token, uint256 amount) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) WatchWithdrawnV2(opts *bind.WatchOpts, sink chan<- *ERC20CustodyUpgradeTestWithdrawnV2, to []common.Address, token []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _ERC20CustodyUpgradeTest.contract.WatchLogs(opts, "WithdrawnV2", toRule, tokenRule) + 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(ERC20CustodyUpgradeTestWithdrawnV2) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "WithdrawnV2", 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 +} + +// ParseWithdrawnV2 is a log parse operation binding the contract event 0xd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a4. +// +// Solidity: event WithdrawnV2(address indexed to, address indexed token, uint256 amount) +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestFilterer) ParseWithdrawnV2(log types.Log) (*ERC20CustodyUpgradeTestWithdrawnV2, error) { + event := new(ERC20CustodyUpgradeTestWithdrawnV2) + if err := _ERC20CustodyUpgradeTest.contract.UnpackLog(event, "WithdrawnV2", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/v2/pkg/gatewayevm.sol/gatewayevm.go b/v2/pkg/gatewayevm.sol/gatewayevm.go index fbd8e3538..6a24fb9c2 100644 --- a/v2/pkg/gatewayevm.sol/gatewayevm.go +++ b/v2/pkg/gatewayevm.sol/gatewayevm.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -47,8 +47,8 @@ type RevertOptions struct { // GatewayEVMMetaData contains all meta data concerning the GatewayEVM contract. var GatewayEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_PAYLOAD_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161393e6100fd600039600081816122bc015281816122e50152612771015261393e6000f3fe6080604052600436106102195760003560e01c80635d62c8601161011d578063a783c789116100b0578063d09e3b781161007f578063dda79b7511610064578063dda79b75146106ad578063e63ab1e9146106cd578063ece697b31461070157600080fd5b8063d09e3b781461066d578063d547741f1461068d57600080fd5b8063a783c789146105b0578063ad3cb1cc146105e4578063ae7a3a6f1461062d578063c0c53b8b1461064d57600080fd5b806391d14854116100ec57806391d1485414610500578063950837aa14610565578063a217fddf14610585578063a2ba19341461059a57600080fd5b80635d62c86014610491578063726ac97c146104c5578063744b9b8b146104d85780638456cb59146104eb57600080fd5b80632f2ff15d116101b05780635131ab591161017f57806357bec62f1161016457806357bec62f1461041a5780635b1125911461043a5780635c975abb1461045a57600080fd5b80635131ab59146103e557806352d1902d1461040557600080fd5b80632f2ff15d1461037d57806336568abe1461039d5780633f4ba83a146103bd5780634f1ef286146103d257600080fd5b80631becceb4116101ec5780631becceb4146102a85780631cff79cd146102c857806321e093b1146102e8578063248a9ca31461032057600080fd5b806301ffc9a71461021e57806310188aef14610253578063102614b01461027557806314fd2d4814610295575b600080fd5b34801561022a57600080fd5b5061023e610239366004612ee6565b610721565b60405190151581526020015b60405180910390f35b34801561025f57600080fd5b5061027361026e366004612f44565b6107ba565b005b34801561028157600080fd5b50610273610290366004612f77565b610895565b6102736102a336600461303a565b61098f565b3480156102b457600080fd5b506102736102c33660046130ad565b610b77565b6102db6102d6366004613114565b610c47565b60405161024a91906131d5565b3480156102f457600080fd5b50600354610308906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b34801561032c57600080fd5b5061036f61033b3660046131e8565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161024a565b34801561038957600080fd5b50610273610398366004613201565b610d31565b3480156103a957600080fd5b506102736103b8366004613201565b610d75565b3480156103c957600080fd5b50610273610dc6565b6102736103e036600461325c565b610dfb565b3480156103f157600080fd5b50610273610400366004613363565b610e1a565b34801561041157600080fd5b5061036f61111a565b34801561042657600080fd5b50600254610308906001600160a01b031681565b34801561044657600080fd5b50600154610308906001600160a01b031681565b34801561046657600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661023e565b34801561049d57600080fd5b5061036f7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102736104d33660046133d2565b611149565b6102736104e63660046130ad565b6112c1565b3480156104f757600080fd5b5061027361148f565b34801561050c57600080fd5b5061023e61051b366004613201565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561057157600080fd5b50610273610580366004612f44565b6114c1565b34801561059157600080fd5b5061036f600081565b3480156105a657600080fd5b5061036f61040081565b3480156105bc57600080fd5b5061036f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105f057600080fd5b506102db6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561063957600080fd5b50610273610648366004612f44565b6115c3565b34801561065957600080fd5b50610273610668366004613420565b61169e565b34801561067957600080fd5b50610273610688366004613463565b61193a565b34801561069957600080fd5b506102736106a8366004613201565b611a84565b3480156106b957600080fd5b50600054610308906001600160a01b031681565b3480156106d957600080fd5b5061036f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561070d57600080fd5b5061027361071c3660046134fb565b611ac8565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107b457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006107c581611c71565b6001600160a01b0382166107ec5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b03161561082f576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108597f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611c7b565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61089d611d68565b6108a5611dc6565b826000036108df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109065760405163d92e233d60e01b815260040160405180910390fd5b610911338385611e47565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c858585604051610958939291906136be565b60405180910390a361098960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109b981611c71565b6109c1611d68565b6109c9611dc6565b6001600160a01b0385166109f05760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610a3d576040519150601f19603f3d011682016040523d82523d6000602084013e610a42565b606091505b5050905080610a7d576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa9b0a73c0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063a9b0a73c90610ac2908690600401613736565b600060405180830381600087803b158015610adc57600080fd5b505af1158015610af0573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167fbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c34888888604051610b3e9493929190613749565b60405180910390a350610b7060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610b7f611d68565b610b87611dc6565b6001600160a01b038416610bae5760405163d92e233d60e01b815260040160405180910390fd5b610400610bbe6060830183613780565b610bc99150846137e5565b10610c00576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d9748585856040516109589392919061381f565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c7381611c71565b610c7b611d68565b610c83611dc6565b6001600160a01b038516610caa5760405163d92e233d60e01b815260040160405180910390fd5b6000610cb78686866120aa565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610cf693929190613845565b60405180910390a29150610d2960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d6b81611c71565b6109898383611c7b565b6001600160a01b0381163314610db7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dc1828261215d565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610df081611c71565b610df8612221565b50565b610e036122b1565b610e0c82612381565b610e16828261238c565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e4481611c71565b610e4c611d68565b610e54611dc6565b83600003610e8e576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610eb55760405163d92e233d60e01b815260040160405180910390fd5b610ebf86866124b0565b610ef5576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f81919061385f565b610fb7576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc28584846120aa565b50610fcd86866124b0565b611003576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015611063573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611087919061387c565b90508015611099576110998782612540565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516110e093929190613845565b60405180910390a35061111260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000611124612766565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b611151611d68565b611159611dc6565b34600003611193576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166111ba5760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611207576040519150601f19603f3d011682016040523d82523d6000602084013e61120c565b606091505b5050905080611247576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008660405161128f939291906136be565b60405180910390a350610e1660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6112c9611d68565b6112d1611dc6565b3460000361130b576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166113325760405163d92e233d60e01b815260040160405180910390fd5b6104006113426060830183613780565b61134d9150846137e5565b10611384576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146113d1576040519150601f19603f3d011682016040523d82523d6000602084013e6113d6565b606091505b5050905080611411576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600088888860405161145d959493929190613895565b60405180910390a35061098960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6114b981611c71565b610df86127c8565b60006114cc81611c71565b6001600160a01b0382166114f35760405163d92e233d60e01b815260040160405180910390fd5b60015461152a907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b031661215d565b506115557f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611c7b565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527f7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a059060200160405180910390a15050565b60006115ce81611c71565b6001600160a01b0382166115f55760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611638576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116627f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611c7b565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116e95750825b905060008267ffffffffffffffff1660011480156117065750303b155b905081158015611714575080155b1561174b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156117ac5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806117c957506001600160a01b038716155b156117e75760405163d92e233d60e01b815260040160405180910390fd5b6117ef612841565b6117f7612849565b6117ff612841565b611807612859565b611812600087611c7b565b5061183d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611c7b565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561189b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611c7b565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156119305784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611942611d68565b61194a611dc6565b84600003611984576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166119ab5760405163d92e233d60e01b815260040160405180910390fd5b6104006119bb6060830183613780565b6119c69150846137e5565b106119fd576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a08338587611e47565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611a53959493929190613895565b60405180910390a361111260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611abe81611c71565b610989838361215d565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9611af281611c71565b611afa611d68565b611b02611dc6565b84600003611b3c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611b635760405163d92e233d60e01b815260040160405180910390fd5b611b776001600160a01b0388168787612869565b6040517fa9b0a73c0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063a9b0a73c90611bbc908590600401613736565b600060405180830381600087803b158015611bd657600080fd5b505af1158015611bea573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167fbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c87878787604051611c379493929190613749565b60405180910390a3611c6860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610df881336128dd565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611d5e576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d143390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107b4565b60009150506107b4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611dc4576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611e41576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611fab57611e726001600160a01b03831684308461296a565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f02919061385f565b611f38576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611f9757600080fd5b505af1158015611c68573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561200e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612032919061385f565b612068576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610dc1906001600160a01b03848116918691168461296a565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606120b683836129a3565b600080856001600160a01b03163486866040516120d49291906138dc565b60006040518083038185875af1925050503d8060008114612111576040519150601f19603f3d011682016040523d82523d6000602084013e612116565b606091505b509150915081612152576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611d5e576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107b4565b612229612a28565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061234a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661233e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611dc4576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e1681611c71565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612404575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124019181019061387c565b60015b61244a576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146124a6576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612441565b610dc18383612a83565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af115801561251c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612156919061385f565b6003546001600160a01b039081169083160361268f576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156125c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e6919061385f565b61261c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561267b57600080fd5b505af1158015611112573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156126f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612716919061385f565b61274c576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610e16906001600160a01b03848116911683612869565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611dc4576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127d0611d68565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612293565b611dc4612ad9565b612851612ad9565b611dc4612b40565b612861612ad9565b611dc4612b48565b6040516001600160a01b03838116602483015260448201839052610dc191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b99565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e16576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612441565b6040516001600160a01b0384811660248301528381166044830152606482018390526109899186918216906323b872dd90608401612896565b60048110610e165781357f564f58c4000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610dc1576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611dc4576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a8c82612c15565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612ad157610dc18282612cbd565b610e16612d33565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611dc4576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612084612ad9565b612b50612ad9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000612bae6001600160a01b03841683612d6b565b90508051600014158015612bd3575080806020019051810190612bd1919061385f565b155b15610dc1576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612441565b806001600160a01b03163b600003612c64576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612441565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612cda91906138ec565b600060405180830381855af49150503d8060008114612d15576040519150601f19603f3d011682016040523d82523d6000602084013e612d1a565b606091505b5091509150612d2a858383612d79565b95945050505050565b3415611dc4576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061215683836000612dee565b606082612d8e57612d8982612ea4565b612156565b8151158015612da557506001600160a01b0384163b155b15612de7576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612441565b5080612156565b606081471015612e2c576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612441565b600080856001600160a01b03168486604051612e4891906138ec565b60006040518083038185875af1925050503d8060008114612e85576040519150601f19603f3d011682016040523d82523d6000602084013e612e8a565b606091505b5091509150612e9a868383612d79565b9695505050505050565b805115612eb45780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612ef857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461215657600080fd5b80356001600160a01b0381168114612f3f57600080fd5b919050565b600060208284031215612f5657600080fd5b61215682612f28565b600060a08284031215612f7157600080fd5b50919050565b60008060008060808587031215612f8d57600080fd5b612f9685612f28565b935060208501359250612fab60408601612f28565b9150606085013567ffffffffffffffff811115612fc757600080fd5b612fd387828801612f5f565b91505092959194509250565b60008083601f840112612ff157600080fd5b50813567ffffffffffffffff81111561300957600080fd5b60208301915083602082850101111561302157600080fd5b9250929050565b600060608284031215612f7157600080fd5b6000806000806060858703121561305057600080fd5b61305985612f28565b9350602085013567ffffffffffffffff81111561307557600080fd5b61308187828801612fdf565b909450925050604085013567ffffffffffffffff8111156130a157600080fd5b612fd387828801613028565b600080600080606085870312156130c357600080fd5b6130cc85612f28565b9350602085013567ffffffffffffffff8111156130e857600080fd5b6130f487828801612fdf565b909450925050604085013567ffffffffffffffff811115612fc757600080fd5b60008060006040848603121561312957600080fd5b61313284612f28565b9250602084013567ffffffffffffffff81111561314e57600080fd5b61315a86828701612fdf565b9497909650939450505050565b60005b8381101561318257818101518382015260200161316a565b50506000910152565b600081518084526131a3816020860160208601613167565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612156602083018461318b565b6000602082840312156131fa57600080fd5b5035919050565b6000806040838503121561321457600080fd5b8235915061322460208401612f28565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561326f57600080fd5b61327883612f28565b9150602083013567ffffffffffffffff81111561329457600080fd5b8301601f810185136132a557600080fd5b803567ffffffffffffffff8111156132bf576132bf61322d565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561332b5761332b61322d565b60405281815282820160200187101561334357600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561337b57600080fd5b61338486612f28565b945061339260208701612f28565b935060408601359250606086013567ffffffffffffffff8111156133b557600080fd5b6133c188828901612fdf565b969995985093965092949392505050565b600080604083850312156133e557600080fd5b6133ee83612f28565b9150602083013567ffffffffffffffff81111561340a57600080fd5b61341685828601612f5f565b9150509250929050565b60008060006060848603121561343557600080fd5b61343e84612f28565b925061344c60208501612f28565b915061345a60408501612f28565b90509250925092565b60008060008060008060a0878903121561347c57600080fd5b61348587612f28565b95506020870135945061349a60408801612f28565b9350606087013567ffffffffffffffff8111156134b657600080fd5b6134c289828a01612fdf565b909450925050608087013567ffffffffffffffff8111156134e257600080fd5b6134ee89828a01612f5f565b9150509295509295509295565b60008060008060008060a0878903121561351457600080fd5b61351d87612f28565b955061352b60208801612f28565b945060408701359350606087013567ffffffffffffffff81111561354e57600080fd5b61355a89828a01612fdf565b909450925050608087013567ffffffffffffffff81111561357a57600080fd5b6134ee89828a01613028565b8015158114610df857600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c957600080fd5b830160208101925035905067ffffffffffffffff8111156135e957600080fd5b80360382131561302157600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361365282612f28565b1682526000602082013561366581613586565b151560208401526001600160a01b0361368060408401612f28565b1660408401526136936060830183613594565b60a060608601526136a860a0860182846135f8565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612d2a60a0830184613641565b6001600160a01b0361370582612f28565b1682526020818101359083015260006137216040830183613594565b60606040860152612d2a6060860182846135f8565b60208152600061215660208301846136f4565b8481526060602082015260006137636060830185876135f8565b828103604084015261377581856136f4565b979650505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126137b557600080fd5b83018035915067ffffffffffffffff8211156137d057600080fd5b60200191503681900382131561302157600080fd5b808201808211156107b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6040815260006138336040830185876135f8565b8281036020840152612e9a8185613641565b838152604060208201526000612d2a6040830184866135f8565b60006020828403121561387157600080fd5b815161215681613586565b60006020828403121561388e57600080fd5b5051919050565b8581526001600160a01b03851660208201526080604082015260006138be6080830185876135f8565b82810360608401526138d08185613641565b98975050505050505050565b8183823760009101908152919050565b600082516138fe818460208701613167565b919091019291505056fea26469706673582212200ce1cb57b9bafa7394345bd73ab37bfe0eee9199c0db1b7d926a8bab8fb060a364736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_PAYLOAD_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallOnRevertNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZETANotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a916100fd600039600081816123da01528181612403015261288f0152613a916000f3fe6080604052600436106102195760003560e01c8063726ac97c1161011d578063ad3cb1cc116100b0578063d0b492c31161007f578063dda79b7511610064578063dda79b75146106ba578063e63ab1e9146106da578063f7ad60db1461070e57600080fd5b8063d0b492c31461067a578063d547741f1461069a57600080fd5b8063ad3cb1cc146105d1578063ae7a3a6f1461061a578063c0c53b8b1461063a578063d09e3b781461065a57600080fd5b8063950837aa116100ec578063950837aa14610552578063a217fddf14610572578063a2ba193414610587578063a783c7891461059d57600080fd5b8063726ac97c146104b2578063744b9b8b146104c55780638456cb59146104d857806391d14854146104ed57600080fd5b806336568abe116101b057806352d1902d1161017f5780635b112591116101645780635b112591146104275780635c975abb146104475780635d62c8601461047e57600080fd5b806352d1902d146103f257806357bec62f1461040757600080fd5b806336568abe1461038a5780633f4ba83a146103aa5780634f1ef286146103bf5780635131ab59146103d257600080fd5b80631cff79cd116101ec5780631cff79cd146102b557806321e093b1146102d5578063248a9ca31461030d5780632f2ff15d1461036a57600080fd5b806301ffc9a71461021e57806310188aef14610253578063102614b0146102755780631becceb414610295575b600080fd5b34801561022a57600080fd5b5061023e610239366004613004565b610721565b60405190151581526020015b60405180910390f35b34801561025f57600080fd5b5061027361026e366004613062565b6107ba565b005b34801561028157600080fd5b50610273610290366004613095565b610895565b3480156102a157600080fd5b506102736102b0366004613146565b610a20565b6102c86102c33660046131ad565b610b38565b60405161024a919061326e565b3480156102e157600080fd5b506003546102f5906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b34801561031957600080fd5b5061035c610328366004613281565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161024a565b34801561037657600080fd5b5061027361038536600461329a565b610c22565b34801561039657600080fd5b506102736103a536600461329a565b610c66565b3480156103b657600080fd5b50610273610cb7565b6102736103cd3660046132f5565b610cec565b3480156103de57600080fd5b506102736103ed3660046133fc565b610d0b565b3480156103fe57600080fd5b5061035c61100b565b34801561041357600080fd5b506002546102f5906001600160a01b031681565b34801561043357600080fd5b506001546102f5906001600160a01b031681565b34801561045357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661023e565b34801561048a57600080fd5b5061035c7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102736104c036600461346b565b61103a565b6102736104d3366004613146565b611243565b3480156104e457600080fd5b50610273611459565b3480156104f957600080fd5b5061023e61050836600461329a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055e57600080fd5b5061027361056d366004613062565b61148b565b34801561057e57600080fd5b5061035c600081565b34801561059357600080fd5b5061035c61040081565b3480156105a957600080fd5b5061035c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105dd57600080fd5b506102c86040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561062657600080fd5b50610273610635366004613062565b6115a2565b34801561064657600080fd5b506102736106553660046134b9565b61167d565b34801561066657600080fd5b506102736106753660046134fc565b611944565b34801561068657600080fd5b506102736106953660046135a6565b611ad6565b3480156106a657600080fd5b506102736106b536600461329a565b611c7f565b3480156106c657600080fd5b506000546102f5906001600160a01b031681565b3480156106e657600080fd5b5061035c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61027361071c366004613631565b611cc3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107b457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006107c581611eab565b6001600160a01b0382166107ec5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b03161561082f576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108597f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611eb5565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61089d611fa2565b6108a5612000565b6108b560408201602083016136b2565b156108ec576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003610926576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661094d5760405163d92e233d60e01b815260040160405180910390fd5b61040061095d60608301836136cf565b90501115610997576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109a2338385612081565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8585856040516109e99392919061385e565b60405180910390a3610a1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b610a28611fa2565b610a30612000565b610a4060408201602083016136b2565b15610a77576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416610a9e5760405163d92e233d60e01b815260040160405180910390fd5b610400610aae60608301836136cf565b610ab9915084613894565b1115610af1576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d9748585856040516109e9939291906138ce565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b6481611eab565b610b6c611fa2565b610b74612000565b6001600160a01b038516610b9b5760405163d92e233d60e01b815260040160405180910390fd5b6000610ba88686866121c8565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610be7939291906138f4565b60405180910390a29150610c1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c5c81611eab565b610a1a8383611eb5565b6001600160a01b0381163314610ca8576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cb2828261227b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ce181611eab565b610ce961233f565b50565b610cf46123cf565b610cfd8261249f565b610d0782826124aa565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d3581611eab565b610d3d611fa2565b610d45612000565b83600003610d7f576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610da65760405163d92e233d60e01b815260040160405180910390fd5b610db086866125ce565b610de6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e72919061390e565b610ea8576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eb38584846121c8565b50610ebe86866125ce565b610ef4576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f78919061392b565b90508015610f8a57610f8a878261265e565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610fd1939291906138f4565b60405180910390a35061100360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000611015612884565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b611042611fa2565b61104a612000565b61105a60408201602083016136b2565b15611091576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b346000036110cb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166110f25760405163d92e233d60e01b815260040160405180910390fd5b61040061110260608301836136cf565b9050111561113c576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611189576040519150601f19603f3d011682016040523d82523d6000602084013e61118e565b606091505b50509050806111c9576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000866040516112119392919061385e565b60405180910390a350610d0760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61124b611fa2565b611253612000565b61126360408201602083016136b2565b1561129a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b346000036112d4576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166112fb5760405163d92e233d60e01b815260040160405180910390fd5b61040061130b60608301836136cf565b611316915084613894565b111561134e576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d806000811461139b576040519150601f19603f3d011682016040523d82523d6000602084013e6113a0565b606091505b50509050806113db576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000888888604051611427959493929190613944565b60405180910390a350610a1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61148381611eab565b610ce96128e6565b600061149681611eab565b6001600160a01b0382166114bd5760405163d92e233d60e01b815260040160405180910390fd5b6001546114f4907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b031661227b565b5061151f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611eb5565b50600154604080516001600160a01b03928316815291841660208301527f3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579910160405180910390a150600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60006115ad81611eab565b6001600160a01b0382166115d45760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611617576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116417f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611eb5565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116c85750825b905060008267ffffffffffffffff1660011480156116e55750303b155b9050811580156116f3575080155b1561172a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561178b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806117a857506001600160a01b038716155b156117c65760405163d92e233d60e01b815260040160405180910390fd5b6117ce61295f565b6117d6612967565b6117de61295f565b6117e6612977565b6117f1600087611eb5565b5061181c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611eb5565b506118477f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a89611eb5565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556118a57f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611eb5565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038916179055831561193a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61194c611fa2565b611954612000565b61196460408201602083016136b2565b1561199b576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846000036119d5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166119fc5760405163d92e233d60e01b815260040160405180910390fd5b610400611a0c60608301836136cf565b611a17915084613894565b1115611a4f576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a5a338587612081565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611aa5959493929190613944565b60405180910390a361100360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9611b0081611eab565b611b08611fa2565b611b10612000565b84600003611b4a576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611b715760405163d92e233d60e01b815260040160405180910390fd5b611b856001600160a01b0388168787612987565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611bca9085906004016139e5565b600060405180830381600087803b158015611be457600080fd5b505af1158015611bf8573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143687878787604051611c4594939291906139f8565b60405180910390a3611c7660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611cb981611eab565b610a1a838361227b565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb611ced81611eab565b611cf5611fa2565b611cfd612000565b6001600160a01b038516611d245760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114611d71576040519150601f19603f3d011682016040523d82523d6000602084013e611d76565b606091505b5050905080611db1576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611df69086906004016139e5565b600060405180830381600087803b158015611e1057600080fd5b505af1158015611e24573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611e7294939291906139f8565b60405180910390a350611ea460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610ce981336129fb565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611f98576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611f4e3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107b4565b60009150506107b4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611ffe576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161207b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b03908116908316036120c9576040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561212c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612150919061390e565b612186576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610cb2906001600160a01b038481169186911684612a88565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606121d48383612ac1565b600080856001600160a01b03163486866040516121f2929190613a2f565b60006040518083038185875af1925050503d806000811461222f576040519150601f19603f3d011682016040523d82523d6000602084013e612234565b606091505b509150915081612270576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611f98576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107b4565b612347612b46565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061246857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661245c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611ffe576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d0781611eab565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612522575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261251f9181019061392b565b60015b612568576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146125c4576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161255f565b610cb28383612ba1565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af115801561263a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612274919061390e565b6003546001600160a01b03908116908316036127ad576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612704919061390e565b61273a576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561279957600080fd5b505af1158015611003573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612834919061390e565b61286a576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610d07906001600160a01b03848116911683612987565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ffe576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128ee611fa2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336123b1565b611ffe612bf7565b61296f612bf7565b611ffe612c5e565b61297f612bf7565b611ffe612c66565b6040516001600160a01b03838116602483015260448201839052610cb291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612cb7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610d07576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161255f565b6040516001600160a01b038481166024830152838116604483015260648201839052610a1a9186918216906323b872dd906084016129b4565b60048110610d075781357f99f46220000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610cb2576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611ffe576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612baa82612d33565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612bef57610cb28282612ddb565b610d07612e51565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611ffe576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121a2612bf7565b612c6e612bf7565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000612ccc6001600160a01b03841683612e89565b90508051600014158015612cf1575080806020019051810190612cef919061390e565b155b15610cb2576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161255f565b806001600160a01b03163b600003612d82576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161255f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612df89190613a3f565b600060405180830381855af49150503d8060008114612e33576040519150601f19603f3d011682016040523d82523d6000602084013e612e38565b606091505b5091509150612e48858383612e97565b95945050505050565b3415611ffe576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061227483836000612f0c565b606082612eac57612ea782612fc2565b612274565b8151158015612ec357506001600160a01b0384163b155b15612f05576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161255f565b5080612274565b606081471015612f4a576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161255f565b600080856001600160a01b03168486604051612f669190613a3f565b60006040518083038185875af1925050503d8060008114612fa3576040519150601f19603f3d011682016040523d82523d6000602084013e612fa8565b606091505b5091509150612fb8868383612e97565b9695505050505050565b805115612fd25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561301657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461227457600080fd5b80356001600160a01b038116811461305d57600080fd5b919050565b60006020828403121561307457600080fd5b61227482613046565b600060a0828403121561308f57600080fd5b50919050565b600080600080608085870312156130ab57600080fd5b6130b485613046565b9350602085013592506130c960408601613046565b9150606085013567ffffffffffffffff8111156130e557600080fd5b6130f18782880161307d565b91505092959194509250565b60008083601f84011261310f57600080fd5b50813567ffffffffffffffff81111561312757600080fd5b60208301915083602082850101111561313f57600080fd5b9250929050565b6000806000806060858703121561315c57600080fd5b61316585613046565b9350602085013567ffffffffffffffff81111561318157600080fd5b61318d878288016130fd565b909450925050604085013567ffffffffffffffff8111156130e557600080fd5b6000806000604084860312156131c257600080fd5b6131cb84613046565b9250602084013567ffffffffffffffff8111156131e757600080fd5b6131f3868287016130fd565b9497909650939450505050565b60005b8381101561321b578181015183820152602001613203565b50506000910152565b6000815180845261323c816020860160208601613200565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122746020830184613224565b60006020828403121561329357600080fd5b5035919050565b600080604083850312156132ad57600080fd5b823591506132bd60208401613046565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561330857600080fd5b61331183613046565b9150602083013567ffffffffffffffff81111561332d57600080fd5b8301601f8101851361333e57600080fd5b803567ffffffffffffffff811115613358576133586132c6565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156133c4576133c46132c6565b6040528181528282016020018710156133dc57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561341457600080fd5b61341d86613046565b945061342b60208701613046565b935060408601359250606086013567ffffffffffffffff81111561344e57600080fd5b61345a888289016130fd565b969995985093965092949392505050565b6000806040838503121561347e57600080fd5b61348783613046565b9150602083013567ffffffffffffffff8111156134a357600080fd5b6134af8582860161307d565b9150509250929050565b6000806000606084860312156134ce57600080fd5b6134d784613046565b92506134e560208501613046565b91506134f360408501613046565b90509250925092565b60008060008060008060a0878903121561351557600080fd5b61351e87613046565b95506020870135945061353360408801613046565b9350606087013567ffffffffffffffff81111561354f57600080fd5b61355b89828a016130fd565b909450925050608087013567ffffffffffffffff81111561357b57600080fd5b61358789828a0161307d565b9150509295509295509295565b60006060828403121561308f57600080fd5b60008060008060008060a087890312156135bf57600080fd5b6135c887613046565b95506135d660208801613046565b945060408701359350606087013567ffffffffffffffff8111156135f957600080fd5b61360589828a016130fd565b909450925050608087013567ffffffffffffffff81111561362557600080fd5b61358789828a01613594565b6000806000806060858703121561364757600080fd5b61365085613046565b9350602085013567ffffffffffffffff81111561366c57600080fd5b613678878288016130fd565b909450925050604085013567ffffffffffffffff81111561369857600080fd5b6130f187828801613594565b8015158114610ce957600080fd5b6000602082840312156136c457600080fd5b8135612274816136a4565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261370457600080fd5b83018035915067ffffffffffffffff82111561371f57600080fd5b60200191503681900382131561313f57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261376957600080fd5b830160208101925035905067ffffffffffffffff81111561378957600080fd5b80360382131561313f57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b036137f282613046565b16825260006020820135613805816136a4565b151560208401526001600160a01b0361382060408401613046565b1660408401526138336060830183613734565b60a0606086015261384860a086018284613798565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612e4860a08301846137e1565b808201808211156107b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6040815260006138e2604083018587613798565b8281036020840152612fb881856137e1565b838152604060208201526000612e48604083018486613798565b60006020828403121561392057600080fd5b8151612274816136a4565b60006020828403121561393d57600080fd5b5051919050565b8581526001600160a01b038516602082015260806040820152600061396d608083018587613798565b828103606084015261397f81856137e1565b98975050505050505050565b6001600160a01b0361399c82613046565b1682526000602082013567ffffffffffffffff81168082146139bd57600080fd5b6020850152506139d06040830183613734565b60606040860152612e48606086018284613798565b602081526000612274602083018461398b565b848152606060208201526000613a12606083018587613798565b8281036040840152613a24818561398b565b979650505050505050565b8183823760009101908152919050565b60008251613a51818460208701613200565b919091019291505056fea2646970667358221220b4411b507d4dacf2a9a9337ef4201dbe19dc0710f6636cf7532e5a95cd03f44164736f6c634300081a0033", } // GatewayEVMABI is the input ABI used to generate the binding from. @@ -809,23 +809,23 @@ func (_GatewayEVM *GatewayEVMTransactorSession) Execute(destination common.Addre return _GatewayEVM.Contract.Execute(&_GatewayEVM.TransactOpts, destination, data) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x14fd2d48. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint256,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() func (_GatewayEVM *GatewayEVMTransactor) ExecuteRevert(opts *bind.TransactOpts, destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVM.contract.Transact(opts, "executeRevert", destination, data, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x14fd2d48. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint256,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() func (_GatewayEVM *GatewayEVMSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVM.Contract.ExecuteRevert(&_GatewayEVM.TransactOpts, destination, data, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x14fd2d48. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint256,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() func (_GatewayEVM *GatewayEVMTransactorSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVM.Contract.ExecuteRevert(&_GatewayEVM.TransactOpts, destination, data, revertContext) } @@ -935,23 +935,23 @@ func (_GatewayEVM *GatewayEVMTransactorSession) RenounceRole(role [32]byte, call return _GatewayEVM.Contract.RenounceRole(&_GatewayEVM.TransactOpts, role, callerConfirmation) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xece697b3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_GatewayEVM *GatewayEVMTransactor) RevertWithERC20(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVM.contract.Transact(opts, "revertWithERC20", token, to, amount, data, revertContext) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xece697b3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_GatewayEVM *GatewayEVMSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVM.Contract.RevertWithERC20(&_GatewayEVM.TransactOpts, token, to, amount, data, revertContext) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xece697b3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_GatewayEVM *GatewayEVMTransactorSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVM.Contract.RevertWithERC20(&_GatewayEVM.TransactOpts, token, to, amount, data, revertContext) } @@ -2040,9 +2040,9 @@ type GatewayEVMReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVM *GatewayEVMFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMRevertedIterator, error) { var toRule []interface{} @@ -2061,9 +2061,9 @@ func (_GatewayEVM *GatewayEVMFilterer) FilterReverted(opts *bind.FilterOpts, to return &GatewayEVMRevertedIterator{contract: _GatewayEVM.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVM *GatewayEVMFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2107,9 +2107,9 @@ func (_GatewayEVM *GatewayEVMFilterer) WatchReverted(opts *bind.WatchOpts, sink }), nil } -// ParseReverted is a log parse operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVM *GatewayEVMFilterer) ParseReverted(log types.Log) (*GatewayEVMReverted, error) { event := new(GatewayEVMReverted) if err := _GatewayEVM.contract.UnpackLog(event, "Reverted", log); err != nil { @@ -2808,13 +2808,14 @@ func (it *GatewayEVMUpdatedGatewayTSSAddressIterator) Close() error { // GatewayEVMUpdatedGatewayTSSAddress represents a UpdatedGatewayTSSAddress event raised by the GatewayEVM contract. type GatewayEVMUpdatedGatewayTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVM *GatewayEVMFilterer) FilterUpdatedGatewayTSSAddress(opts *bind.FilterOpts) (*GatewayEVMUpdatedGatewayTSSAddressIterator, error) { logs, sub, err := _GatewayEVM.contract.FilterLogs(opts, "UpdatedGatewayTSSAddress") @@ -2824,9 +2825,9 @@ func (_GatewayEVM *GatewayEVMFilterer) FilterUpdatedGatewayTSSAddress(opts *bind return &GatewayEVMUpdatedGatewayTSSAddressIterator{contract: _GatewayEVM.contract, event: "UpdatedGatewayTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVM *GatewayEVMFilterer) WatchUpdatedGatewayTSSAddress(opts *bind.WatchOpts, sink chan<- *GatewayEVMUpdatedGatewayTSSAddress) (event.Subscription, error) { logs, sub, err := _GatewayEVM.contract.WatchLogs(opts, "UpdatedGatewayTSSAddress") @@ -2861,9 +2862,9 @@ func (_GatewayEVM *GatewayEVMFilterer) WatchUpdatedGatewayTSSAddress(opts *bind. }), nil } -// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVM *GatewayEVMFilterer) ParseUpdatedGatewayTSSAddress(log types.Log) (*GatewayEVMUpdatedGatewayTSSAddress, error) { event := new(GatewayEVMUpdatedGatewayTSSAddress) if err := _GatewayEVM.contract.UnpackLog(event, "UpdatedGatewayTSSAddress", log); err != nil { diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go index 751f36244..a70993bc4 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -65,8 +65,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMInboundTestMetaData contains all meta data concerning the GatewayEVMInboundTest contract. var GatewayEVMInboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallWithPayloadFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallWithPayloadFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayloadFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayloadFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZetaToConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602c55348015603357600080fd5b5061ee26806100436000396000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c8063916a17c61161012a578063ba414fa6116100bd578063e20c9f711161008c578063e85c5a0711610071578063e85c5a071461035c578063f96c02df14610364578063fa7626d41461036c57600080fd5b8063e20c9f711461034c578063e306a9781461035457600080fd5b8063ba414fa61461031c578063bb93f11e14610334578063c13d738f1461033c578063d896e2611461034457600080fd5b8063b0464fdc116100f9578063b0464fdc146102fc578063b1409f7114610304578063b28490631461030c578063b5508aa91461031457600080fd5b8063916a17c6146102cf57806395cd0445146102e45780639fd1e597146102ec578063aa030c1c146102f457600080fd5b80633e5e3c23116101a25780636459542a116101715780636459542a1461029557806366d9a9a01461029d5780637478fda0146102b257806385226c81146102ba57600080fd5b80633e5e3c23146102755780633f7286f41461027d578063466f332e1461028557806351da903d1461028d57600080fd5b80631806a9a5116101de5780631806a9a5146102325780631ed7831c1461023a5780632ade38801461025857806330f7c04f1461026d57600080fd5b806305a898e21461021057806306978ca31461021a5780630724d8e3146102225780630a9254e41461022a575b600080fd5b610218610379565b005b610218610530565b610218610648565b6102186107fc565b610218611268565b610242611365565b60405161024f9190617de7565b60405180910390f35b6102606113c7565b60405161024f9190617e83565b610218611509565b61024261197c565b6102426119dc565b610218611a3c565b610218611bbb565b610218611d4a565b6102a5612143565b60405161024f9190617fe9565b6102186122c5565b6102c26123c8565b60405161024f9190618087565b6102d7612498565b60405161024f91906180fe565b610218612593565b610218612776565b610218612998565b6102d7612b55565b610218612c50565b610218612d92565b6102c2613026565b6103246130f6565b604051901515815260200161024f565b6102186131ca565b6102186132c1565b6102186133b8565b610242613533565b610218613593565b610218613856565b610218613ad7565b601f546103249060ff1681565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390610471906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b15801561048b57600080fd5b505af115801561049f573d6000803e3d6000fd5b50506020546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063d09e3b7893506104fa92600092889291169087906028906004016182d1565b600060405180830381600087803b15801561051457600080fd5b505af1158015610528573d6000803e3d6000fd5b505050505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b1580156105c657600080fd5b505af11580156105da573d6000803e3d6000fd5b50506020546026546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063726ac97c9350859261062f921690602890600401618326565b6000604051808303818588803b15801561051457600080fd5b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156106e457600080fd5b505af11580156106f8573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c90610747908690600090602890618348565b60405180910390a36020546026546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263726ac97c9286926107a29290911690602890600401618326565b6000604051808303818588803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b50506027546001600160a01b03163192506107f791506107f1905084846183ad565b82613bed565b505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161084e90617cfa565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156108d3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602754604051911690819061091c90617d07565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801561094f573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152610a40919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613c6c565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610acc90617d14565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610b08573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610b6390617d21565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610ba7573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610c4557600080fd5b505af1158015610c59573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610ccc57600080fd5b505af1158015610ce0573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d6457600080fd5b505af1158015610d78573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610ee257600080fd5b505af1158015610ef6573d6000803e3d6000fd5b50506021546023546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b158015610f5c57600080fd5b505af1158015610f70573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fd257600080fd5b505af1158015610fe6573d6000803e3d6000fd5b5050602354602554602c546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b15801561105757600080fd5b505af115801561106b573d6000803e3d6000fd5b50506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156110e157600080fd5b505af11580156110f5573d6000803e3d6000fd5b5050602254602554602c546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152600060448201529116925063106e62909150606401600060405180830381600087803b15801561116d57600080fd5b505af1158015611181573d6000803e3d6000fd5b50506040805160a08101825261032180825260016020808401918252838501928352845190810190945260008085526060840185905260808401528251602880549251151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0392831617929092178255915160298054919093167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179091559093509150602a906112589082618436565b5060808201518160030155905050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b1580156112fe57600080fd5b505af1158015611312573d6000803e3d6000fd5b50506020546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063726ac97c9150839061062f90600090602890600401618326565b606060168054806020026020016040519081016040528092919081815260200182805480156113bd57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161139f575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561150057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114e957838290600052602060002001805461145c90618195565b80601f016020809104026020016040519081016040528092919081815260200182805461148890618195565b80156114d55780601f106114aa576101008083540402835291602001916114d5565b820191906000526020600020905b8154815290600101906020018083116114b857829003601f168201915b50505050508152602001906001019061143d565b5050505081525050815260200190600101906113eb565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015611575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159991906184f5565b90506115a6600082613bed565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af1158015611689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ad919061850e565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561173c57600080fd5b505af1158015611750573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c926117a6928992909116908790602890618530565b60405180910390a36020546026546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363d09e3b789361180a939082169289929091169087906028906004016182d1565b600060405180830381600087803b15801561182457600080fd5b505af1158015611838573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156118a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c891906184f5565b90506118d48482613bed565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561193e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196291906184f5565b905061197585602c546107f1919061856a565b5050505050565b606060188054806020026020016040519081016040528092919081815260200182805480156113bd576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161139f575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156113bd576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161139f575050505050905090565b604080516102008082526102208201909252620186a091600091906020820181803683370190505060408051610200808252610220820190925291925060208201818036833701905050602a90611a939082618436565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015b600060405180830381600087803b158015611b1a57600080fd5b505af1158015611b2e573d6000803e3d6000fd5b50506020546026546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063744b9b8b93508692611b85921690869060289060040161857d565b6000604051808303818588803b158015611b9e57600080fd5b505af1158015611bb2573d6000803e3d6000fd5b50505050505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cb557600080fd5b505af1158015611cc9573d6000803e3d6000fd5b50506020546040517f1becceb40000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631becceb49150611d1c90600090859060289060040161857d565b600060405180830381600087803b158015611d3657600080fd5b505af1158015611975573d6000803e3d6000fd5b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015611db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dda91906184f5565b9050611de7600082613bed565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015611e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e79919061850e565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f0857600080fd5b505af1158015611f1c573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c92611f7092889290911690602890618348565b60405180910390a36020546026546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363102614b093611fd293908216928892909116906028906004016185b1565b600060405180830381600087803b158015611fec57600080fd5b505af1158015612000573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561206c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209091906184f5565b905061209c8382613bed565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212a91906184f5565b905061213d84602c546107f1919061856a565b50505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611500578382906000526020600020906002020160405180604001604052908160008201805461219a90618195565b80601f01602080910402602001604051908101604052809291908181526020018280546121c690618195565b80156122135780601f106121e857610100808354040283529160200191612213565b820191906000526020600020905b8154815290600101906020018083116121f657829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156122ad57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161225a5790505b50505050508152505081526020019060010190612167565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561235b57600080fd5b505af115801561236f573d6000803e3d6000fd5b50506020546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063102614b09350611d1c9260009287929116906028906004016185b1565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561150057838290600052602060002001805461240b90618195565b80601f016020809104026020016040519081016040528092919081815260200182805461243790618195565b80156124845780601f1061245957610100808354040283529160200191612484565b820191906000526020600020905b81548152906001019060200180831161246757829003601f168201915b5050505050815260200190600101906123ec565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156115005760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561257b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116125285790505b505050505081525050815260200190600101906124bc565b604080516102008082526102208201909252620186a091600091906020820181803683370190505060408051610200808252610220820190925291925060208201818036833701905050602a906125ea9082618436565b506023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015612659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267d919061850e565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015b600060405180830381600087803b15801561270457600080fd5b505af1158015612718573d6000803e3d6000fd5b50506020546026546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d09e3b7894506104fa93928316928892169087906028906004016182d1565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561288757600080fd5b505af115801561289b573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c906128ec9087906000908790602890618530565b60405180910390a36020546026546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263744b9b8b9287926129499290911690869060289060040161857d565b6000604051808303818588803b15801561296257600080fd5b505af1158015612976573d6000803e3d6000fd5b50506027546001600160a01b031631925061213d91506107f1905085856183ad565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612a9b57600080fd5b505af1158015612aaf573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97490612afb9085906028906185e8565b60405180910390a36020546026546040517f1becceb40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631becceb492611d1c92911690859060289060040161857d565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156115005760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612c3857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612be55790505b50505050508152505081526020019060010190612b79565b6040805161020080825261022082019092526000916020820181803683370190505060408051610200808252610220820190925291925060208201818036833701905050602a90612ca19082618436565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612d2757600080fd5b505af1158015612d3b573d6000803e3d6000fd5b50506020546026546040517f1becceb40000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631becceb49350611d1c9290911690859060289060040161857d565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a06024820181905292919091169063095ea7b3906044016020604051808303816000875af1158015612e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e2b919061850e565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e9e57600080fd5b505af1158015612eb2573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b158015612f1857600080fd5b505af1158015612f2c573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015612fb657600080fd5b505af1158015612fca573d6000803e3d6000fd5b50506020546026546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063102614b09450611d1c9392831692879216906028906004016185b1565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561150057838290600052602060002001805461306990618195565b80601f016020809104026020016040519081016040528092919081815260200182805461309590618195565b80156130e25780601f106130b7576101008083540402835291602001916130e2565b820191906000526020600020905b8154815290600101906020018083116130c557829003601f168201915b50505050508152602001906001019061304a565b60085460009060ff161561310e575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561319f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c391906184f5565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906126ea9060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390611b009060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906134b0906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b1580156134ca57600080fd5b505af11580156134de573d6000803e3d6000fd5b50506020546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063744b9b8b91508490611b8590600090869060289060040161857d565b606060158054806020026020016040519081016040528092919081815260200182805480156113bd576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161139f575050505050905090565b602480546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a093810184905291169063095ea7b3906044016020604051808303816000875af1158015613605573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613629919061850e565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156136b857600080fd5b505af11580156136cc573d6000803e3d6000fd5b50506026546025546024546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c9261372092879290911690602890618348565b60405180910390a36020546026546024546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363102614b09361378293908216928792909116906028906004016185b1565b600060405180830381600087803b15801561379c57600080fd5b505af11580156137b0573d6000803e3d6000fd5b5050602480546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561381b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061383f91906184f5565b905061385282602c546107f1919061856a565b5050565b6026546040516001600160a01b039091166024820152620186a09060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052929350169063095ea7b3906044016020604051808303816000875af115801561393e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613962919061850e565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156139d557600080fd5b505af11580156139e9573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b158015613a4f57600080fd5b505af1158015613a63573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016126ea565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af1158015613b4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b6e919061850e565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401612f9c565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015613c5857600080fd5b505afa158015610528573d6000803e3d6000fd5b6000613c76617d2e565b613c81848483613c8b565b9150505b92915050565b600080613c988584613d06565b9050613cfb6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613ce692919061860d565b60405160208183030381529060405285613d12565b9150505b9392505050565b6000613cff8383613d40565b60c08101515160009015613d3657613d2f84848460c00151613d5b565b9050613cff565b613d2f8484613f01565b6000613d4c8383613fec565b613cff83836020015184613d12565b600080613d66613ff8565b90506000613d7486836140cb565b90506000613d8b8260600151836020015185614571565b90506000613d9b83838989614783565b90506000613da882615600565b602081015181519192509060030b15613e1b57898260400151604051602001613dd292919061862f565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613e12916004016186b0565b60405180910390fd5b6000613e5e6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016157cf565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613eb19084906004016186b0565b602060405180830381865afa158015613ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ef291906186c3565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613f569087906004016186b0565b600060405180830381865afa158015613f73573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f9b91908101906187a5565b90506000613fc98285604051602001613fb59291906187da565b6040516020818303038152906040526159cf565b90506001600160a01b038116613c81578484604051602001613dd2929190618809565b613852828260006159e2565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061407f9084906004016188b4565b600060405180830381865afa15801561409c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140c491908101906188fb565b9250505090565b6140fd6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506141486040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61415185615ae5565b6020820152600061416186615eca565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156141a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141cb91908101906188fb565b868385602001516040516020016141e59493929190618944565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061423d9085906004016186b0565b600060405180830381865afa15801561425a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261428291908101906188fb565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906142ca908490600401618a48565b602060405180830381865afa1580156142e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061430b919061850e565b6143205781604051602001613dd29190618a9a565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614365908490600401618b2c565b600060405180830381865afa158015614382573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143aa91908101906188fb565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906143f1908490600401618b7e565b602060405180830381865afa15801561440e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614432919061850e565b156144c7576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061447c908490600401618b7e565b600060405180830381865afa158015614499573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526144c191908101906188fb565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016144ec9190618bd0565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614518929190618c3c565b600060405180830381865afa158015614535573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261455d91908101906188fb565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161458d5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106145ed576145ed618c61565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061464157614641618c61565b60200260200101819052508460405160200161465d9190618c90565b6040516020818303038152906040528160028151811061467f5761467f618c61565b60200260200101819052508260405160200161469b9190618cfc565b604051602081830303815290604052816003815181106146bd576146bd618c61565b602002602001018190525060006146d382615600565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614764906040805180820182526000808252602091820152815180830190925284518252808501908201529061614d565b6147795785604051602001613dd29190618d3d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156147d3565b511590565b6149475782602001511561488f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613e12565b8260c0015115614947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613e12565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161496057905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806149bb90618dce565b935060ff16815181106149d0576149d0618c61565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001614a219190618ded565b604051602081830303815290604052828280614a3c90618dce565b935060ff1681518110614a5157614a51618c61565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614a9e90618dce565b935060ff1681518110614ab357614ab3618c61565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280614b0090618dce565b935060ff1681518110614b1557614b15618c61565b60200260200101819052508760200151828280614b3190618dce565b935060ff1681518110614b4657614b46618c61565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280614b9390618dce565b935060ff1681518110614ba857614ba8618c61565b602090810291909101015287518282614bc081618dce565b935060ff1681518110614bd557614bd5618c61565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614c2290618dce565b935060ff1681518110614c3757614c37618c61565b6020026020010181905250614c4b466161ae565b8282614c5681618dce565b935060ff1681518110614c6b57614c6b618c61565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614cb890618dce565b935060ff1681518110614ccd57614ccd618c61565b602002602001018190525086828280614ce590618dce565b935060ff1681518110614cfa57614cfa618c61565b6020908102919091010152855115614e215760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614d4b81618dce565b935060ff1681518110614d6057614d60618c61565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614db09089906004016186b0565b600060405180830381865afa158015614dcd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614df591908101906188fb565b8282614e0081618dce565b935060ff1681518110614e1557614e15618c61565b60200260200101819052505b846020015115614ef15760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614e6a81618dce565b935060ff1681518110614e7f57614e7f618c61565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614ecc90618dce565b935060ff1681518110614ee157614ee1618c61565b60200260200101819052506150b8565b614f296147ce8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614fbc5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614f6c81618dce565b935060ff1681518110614f8157614f81618c61565b60200260200101819052508460a00151604051602001614fa19190618c90565b604051602081830303815290604052828280614ecc90618dce565b8460c00151158015614fff575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614ffd90511590565b155b156150b85760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261504381618dce565b935060ff168151811061505857615058618c61565b602002602001018190525061506c8861624e565b60405160200161507c9190618c90565b60405160208183030381529060405282828061509790618dce565b935060ff16815181106150ac576150ac618c61565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526150ec90511590565b6151815760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261512f81618dce565b935060ff168151811061514457615144618c61565b6020026020010181905250846040015182828061516090618dce565b935060ff168151811061517557615175618c61565b60200260200101819052505b6060850151156152a25760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826151ca81618dce565b935060ff16815181106151df576151df618c61565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561524e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261527691908101906188fb565b828261528181618dce565b935060ff168151811061529657615296618c61565b60200260200101819052505b60e085015151156153495760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826152ec81618dce565b935060ff168151811061530157615301618c61565b602002602001018190525061531d8560e00151600001516161ae565b828261532881618dce565b935060ff168151811061533d5761533d618c61565b60200260200101819052505b60e085015160200151156153f35760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261539681618dce565b935060ff16815181106153ab576153ab618c61565b60200260200101819052506153c78560e00151602001516161ae565b82826153d281618dce565b935060ff16815181106153e7576153e7618c61565b60200260200101819052505b60e0850151604001511561549d5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261544081618dce565b935060ff168151811061545557615455618c61565b60200260200101819052506154718560e00151604001516161ae565b828261547c81618dce565b935060ff168151811061549157615491618c61565b60200260200101819052505b60e085015160600151156155475760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826154ea81618dce565b935060ff16815181106154ff576154ff618c61565b602002602001018190525061551b8560e00151606001516161ae565b828261552681618dce565b935060ff168151811061553b5761553b618c61565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615565576155656183c0565b60405190808252806020026020018201604052801561559857816020015b60608152602001906001900390816155835790505b50905060005b8260ff168160ff1610156155f157838160ff16815181106155c1576155c1618c61565b6020026020010151828260ff16815181106155de576155de618c61565b602090810291909101015260010161559e565b5093505050505b949350505050565b6156276040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916156ad91869101618e58565b600060405180830381865afa1580156156ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156f291908101906188fb565b905060006157008683616d3d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016157309190618087565b6000604051808303816000875af115801561574f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157779190810190618e9f565b805190915060030b158015906157905750602081015151155b801561579f5750604081015151155b1561477957816000815181106157b7576157b7618c61565b6020026020010151604051602001613dd29190618f55565b606060006158048560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061583b9082905b90616e92565b156159985760006158b8826158b2846158ac61587e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616eb9565b90616f1b565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061591c908290616e92565b1561598657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615983905b8290616fa0565b90505b61598f81616fc6565b92505050613cff565b82156159b1578484604051602001613dd2929190619141565b5050604080516020810190915260008152613cff565b509392505050565b6000808251602084016000f09392505050565b8160a00151156159f157505050565b60006159fe84848461702f565b90506000615a0b82615600565b602081015181519192509060030b158015615aa75750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615aa790604080518082018252600080825260209182015281518083019092528451825280850190820152615835565b15615ab457505050505050565b60408201515115615ad4578160400151604051602001613dd291906191e8565b80604051602001613dd29190619246565b60606000615b1a8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615b7f905b829061614d565b15615bee57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cff90615be99083906175ca565b616fc6565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615c50905b8290617654565b600103615d1d57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cb69061597c565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cff90615be9905b8390616fa0565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d7c90615b78565b15615eb357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615de49083906176ee565b905060008160018351615df7919061856a565b81518110615e0757615e07618c61565b60200260200101519050615eaa615be9615e7d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906175ca565b95945050505050565b82604051602001613dd291906192b1565b50919050565b60606000615eff8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615f6190615b78565b15615f6f57613cff81616fc6565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fce90615c49565b60010361603857604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cff90615be990615d16565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261609790615b78565b15615eb357604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906160ff9083906176ee565b905060018151111561613b57806002825161611a919061856a565b8151811061612a5761612a618c61565b602002602001015192505050919050565b5082604051602001613dd291906192b1565b80518251600091111561616257506000613c85565b81518351602085015160009291616178916183ad565b616182919061856a565b905082602001518103616199576001915050613c85565b82516020840151819020912014905092915050565b606060006161bb83617793565b600101905060008167ffffffffffffffff8111156161db576161db6183c0565b6040519080825280601f01601f191660200182016040528015616205576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461620f57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916162da905b8290617875565b1561631a57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616379906162d3565b156163b957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616418906162d3565b1561645857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164b7906162d3565b8061651c5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261651c906162d3565b1561655c57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165bb906162d3565b806166205750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616620906162d3565b1561666057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166bf906162d3565b806167245750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616724906162d3565b1561676457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167c3906162d3565b806168285750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616828906162d3565b1561686857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168c7906162d3565b1561690757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616966906162d3565b156169a657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a05906162d3565b15616a4557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616aa4906162d3565b15616ae457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b43906162d3565b15616b8357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616be2906162d3565b80616c475750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c47906162d3565b15616c8757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ce6906162d3565b15616d2657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613dd2929060200161938f565b60608060005b8451811015616dc85781858281518110616d5f57616d5f618c61565b6020026020010151604051602001616d789291906187da565b604051602081830303815290604052915060018551616d97919061856a565b8114616dc05781604051602001616dae91906194f8565b60405160208183030381529060405291505b600101616d43565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616de15790505090508381600081518110616e0c57616e0c618c61565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616e6057616e60618c61565b60200260200101819052508181600281518110616e7f57616e7f618c61565b6020908102919091010152949350505050565b6020808301518351835192840151600093616eb09291849190617889565b14159392505050565b60408051808201909152600080825260208201526000616eeb846000015185602001518560000151866020015161799a565b9050836020015181616efd919061856a565b84518590616f0c90839061856a565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616f40575081613c85565b6020808301519084015160019114616f675750815160208481015190840151829020919020145b8015616f9857825184518590616f7e90839061856a565b9052508251602085018051616f949083906183ad565b9052505b509192915050565b6040805180820190915260008082526020820152616fbf838383617aba565b5092915050565b60606000826000015167ffffffffffffffff811115616fe757616fe76183c0565b6040519080825280601f01601f191660200182016040528015617011576020820181803683370190505b5090506000602082019050616fbf8185602001518660000151617b65565b6060600061703b613ff8565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161705857905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806170b390618dce565b935060ff16815181106170c8576170c8618c61565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016171199190619539565b60405160208183030381529060405282828061713490618dce565b935060ff168151811061714957617149618c61565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061719690618dce565b935060ff16815181106171ab576171ab618c61565b6020026020010181905250826040516020016171c79190618cfc565b6040516020818303038152906040528282806171e290618dce565b935060ff16815181106171f7576171f7618c61565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061724490618dce565b935060ff168151811061725957617259618c61565b602002602001018190525061726e8784617bdf565b828261727981618dce565b935060ff168151811061728e5761728e618c61565b60209081029190910101528551511561733a5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826172e081618dce565b935060ff16815181106172f5576172f5618c61565b602002602001018190525061730e866000015184617bdf565b828261731981618dce565b935060ff168151811061732e5761732e618c61565b60200260200101819052505b8560800151156173a85760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261738381618dce565b935060ff168151811061739857617398618c61565b602002602001018190525061740e565b841561740e5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826173ed81618dce565b935060ff168151811061740257617402618c61565b60200260200101819052505b604086015151156174aa5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261745881618dce565b935060ff168151811061746d5761746d618c61565b6020026020010181905250856040015182828061748990618dce565b935060ff168151811061749e5761749e618c61565b60200260200101819052505b8560600151156175145760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826174f381618dce565b935060ff168151811061750857617508618c61565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617532576175326183c0565b60405190808252806020026020018201604052801561756557816020015b60608152602001906001900390816175505790505b50905060005b8260ff168160ff1610156175be57838160ff168151811061758e5761758e618c61565b6020026020010151828260ff16815181106175ab576175ab618c61565b602090810291909101015260010161756b565b50979650505050505050565b60408051808201909152600080825260208201528151835110156175ef575081613c85565b81518351602085015160009291617605916183ad565b61760f919061856a565b60208401519091506001908214617630575082516020840151819020908220145b801561764b5783518551869061764790839061856a565b9052505b50929392505050565b6000808260000151617678856000015186602001518660000151876020015161799a565b61768291906183ad565b90505b8351602085015161769691906183ad565b8111616fbf57816176a68161957e565b92505082600001516176dd8560200151836176c1919061856a565b86516176cd919061856a565b838660000151876020015161799a565b6176e791906183ad565b9050617685565b606060006176fc8484617654565b6177079060016183ad565b67ffffffffffffffff81111561771f5761771f6183c0565b60405190808252806020026020018201604052801561775257816020015b606081526020019060019003908161773d5790505b50905060005b81518110156159c75761776e615be98686616fa0565b82828151811061778057617780618c61565b6020908102919091010152600101617758565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106177dc577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617808576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061782657662386f26fc10000830492506010015b6305f5e100831061783e576305f5e100830492506008015b612710831061785257612710830492506004015b60648310617864576064830492506002015b600a8310613c855760010192915050565b60006178818383617c1f565b159392505050565b600080858411617990576020841161793c57600084156178d45760016178b086602061856a565b6178bb906008619598565b6178c6906002619696565b6178d0919061856a565b1990505b83518116856178e389896183ad565b6178ed919061856a565b805190935082165b8181146179275787841161790f57879450505050506155f8565b83617919816196a2565b9450508284511690506178f5565b61793187856183ad565b9450505050506155f8565b838320617949858861856a565b61795390876183ad565b91505b85821061798e5784822080820361797b5761797186846183ad565b93505050506155f8565b61798660018461856a565b925050617956565b505b5092949350505050565b60008381868511617aa55760208511617a5457600085156179e65760016179c287602061856a565b6179cd906008619598565b6179d8906002619696565b6179e2919061856a565b1990505b845181166000876179f78b8b6183ad565b617a01919061856a565b855190915083165b828114617a4657818610617a2e57617a218b8b6183ad565b96505050505050506155f8565b85617a388161957e565b965050838651169050617a09565b8596505050505050506155f8565b508383206000905b617a66868961856a565b8211617aa357858320808203617a8257839450505050506155f8565b617a8d6001856183ad565b9350508180617a9b9061957e565b925050617a5c565b505b617aaf87876183ad565b979650505050505050565b60408051808201909152600080825260208201526000617aec856000015186602001518660000151876020015161799a565b602080870180519186019190915251909150617b08908261856a565b835284516020860151617b1b91906183ad565b8103617b2a5760008552617b5c565b83518351617b3891906183ad565b85518690617b4790839061856a565b9052508351617b5690826183ad565b60208601525b50909392505050565b60208110617b9d5781518352617b7c6020846183ad565b9250617b896020836183ad565b9150617b9660208261856a565b9050617b65565b6000198115617bcc576001617bb383602061856a565b617bbf90610100619696565b617bc9919061856a565b90505b9151835183169219169190911790915250565b60606000617bed84846140cb565b8051602080830151604051939450617c07939091016196b9565b60405160208183030381529060405291505092915050565b8151815160009190811115617c32575081515b6020808501519084015160005b83811015617ceb5782518251808214617cbb576000196020871015617c9a57600184617c6c89602061856a565b617c7691906183ad565b617c81906008619598565b617c8c906002619696565b617c96919061856a565b1990505b8181168382168181039114617cb8579750613c859650505050505050565b50505b617cc66020866183ad565b9450617cd36020856183ad565b93505050602081617ce491906183ad565b9050617c3f565b50845186516147799190619711565b610c9f8061973283390190565b6112a68061a3d183390190565b611de78061b67783390190565b6119938061d45e83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617d71617d76565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617d716040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617e285783516001600160a01b0316835260209384019390920191600101617e01565b509095945050505050565b60005b83811015617e4e578181015183820152602001617e36565b50506000910152565b60008151808452617e6f816020860160208601617e33565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617f7f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617f65577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617f4f848651617e57565b6020958601959094509290920191600101617f15565b509197505050602094850194929092019150600101617eab565b50929695505050505050565b600081518084526020840193506020830160005b82811015617fdf5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617f9f565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617f7f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526180556040880182617e57565b90506020820151915086810360208801526180708183617f8b565b965050506020938401939190910190600101618011565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617f7f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526180e9858351617e57565b945060209384019391909101906001016180af565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617f7f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261817f6040870182617f8b565b9550506020938401939190910190600101618126565b600181811c908216806181a957607f821691505b602082108103615ec4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a060608501526000815461822c81618195565b8060a0880152600182166000811461824b5760018114618285576182b9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b89010193506182b9565b84600052602060002060005b838110156182b05781548a820160c00152600190910190602001618291565b890160c0019450505b50505060038401546080860152809250505092915050565b6001600160a01b03861681528460208201526001600160a01b038416604082015260a06060820152600061830860a0830185617e57565b828103608084015261831a81856181e2565b98975050505050505050565b6001600160a01b03831681526040602082015260006155f860408301846181e2565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000615eaa60a08301846181e2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115613c8557613c8561837e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f8211156107f757806000526020600020601f840160051c810160208510156184165750805b601f840160051c820191505b818110156119755760008155600101618422565b815167ffffffffffffffff811115618450576184506183c0565b6184648161845e8454618195565b846183ef565b6020601f82116001811461849857600083156184805750848201515b600019600385901b1c1916600184901b178455611975565b600084815260208120601f198516915b828110156184c857878501518255602094850194600190920191016184a8565b50848210156184e65786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561850757600080fd5b5051919050565b60006020828403121561852057600080fd5b81518015158114613cff57600080fd5b8481526001600160a01b03841660208201526080604082015260006185586080830185617e57565b8281036060840152617aaf81856181e2565b81810381811115613c8557613c8561837e565b6001600160a01b038416815260606020820152600061859f6060830185617e57565b828103604084015261477981856181e2565b6001600160a01b03851681528360208201526001600160a01b038316604082015260806060820152600061477960808301846181e2565b6040815260006185fb6040830185617e57565b8281036020840152613cfb81856181e2565b6001600160a01b03831681526040602082015260006155f86040830184617e57565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161866781601a850160208801617e33565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516186a481601c840160208801617e33565b01601c01949350505050565b602081526000613cff6020830184617e57565b6000602082840312156186d557600080fd5b81516001600160a01b0381168114613cff57600080fd5b6040516060810167ffffffffffffffff8111828210171561870f5761870f6183c0565b60405290565b60008067ffffffffffffffff841115618730576187306183c0565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561875f5761875f6183c0565b60405283815290508082840185101561877757600080fd5b6159c7846020830185617e33565b600082601f83011261879657600080fd5b613cff83835160208501618715565b6000602082840312156187b757600080fd5b815167ffffffffffffffff8111156187ce57600080fd5b613c8184828501618785565b600083516187ec818460208801617e33565b835190830190618800818360208801617e33565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161884181601a850160208801617e33565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161887e816033840160208801617e33565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613cff6080830184617e57565b60006020828403121561890d57600080fd5b815167ffffffffffffffff81111561892457600080fd5b8201601f8101841361893557600080fd5b613c8184825160208401618715565b60008551618956818460208a01617e33565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618990816001840160208a01617e33565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516189ce816002840160208901617e33565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618a10816002840160208801617e33565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618a5b6040830184617e57565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618ad281601f850160208701617e33565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618b3f6040830184617e57565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618b916040830184617e57565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618c08816014850160208701617e33565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618c4f6040830185617e57565b8281036020840152613cfb8185617e57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618cc8816001850160208701617e33565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618d0e818460208701617e33565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618dc181604b850160208701617e33565b91909101604b0192915050565b600060ff821660ff8103618de457618de461837e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618e4b816029850160208701617e33565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613cff6080830184617e57565b600060208284031215618eb157600080fd5b815167ffffffffffffffff811115618ec857600080fd5b820160608185031215618eda57600080fd5b618ee26186ec565b81518060030b8114618ef357600080fd5b8152602082015167ffffffffffffffff811115618f0f57600080fd5b618f1b86828501618785565b602083015250604082015167ffffffffffffffff811115618f3b57600080fd5b618f4786828501618785565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618fb3816021850160208701617e33565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161919f816021850160208801617e33565b7f2720696e206f75747075743a200000000000000000000000000000000000000060219184019182015283516191dc81602e840160208801617e33565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618e4b816029850160208701617e33565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516192a4816022850160208701617e33565b9190910160220192915050565b7f436f6e7472616374206e616d65200000000000000000000000000000000000008152600082516192e981600e850160208701617e33565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516193c7816018850160208801617e33565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161940481601c840160208801617e33565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161950a818460208701617e33565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161957181601c850160208701617e33565b91909101601c0192915050565b600060001982036195915761959161837e565b5060010190565b8082028115828204841417613c8557613c8561837e565b6001815b60018411156195ea578085048111156195ce576195ce61837e565b60018416156195dc57908102905b60019390931c9280026195b3565b935093915050565b60008261960157506001613c85565b8161960e57506000613c85565b8160018114619624576002811461962e5761964a565b6001915050613c85565b60ff84111561963f5761963f61837e565b50506001821b613c85565b5060208310610133831016604e8410600b841016171561966d575081810a613c85565b61967a60001984846195af565b806000190482111561968e5761968e61837e565b029392505050565b6000613cff83836195f2565b6000816196b1576196b161837e565b506000190190565b600083516196cb818460208801617e33565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619705816001840160208801617e33565b01600101949350505050565b8181036000831280158383131683831282161715616fbf57616fbf61837e56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a003360a060405234801561001057600080fd5b50604051611de7380380611de783398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611dc78339815191528261014c565b50610143600080516020611dc78339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611b50610277600039600081816101d501528181610574015281816105c9015281816107e6015261083b0152611b506000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638456cb59116100ee578063a217fddf11610097578063d9caed1211610071578063d9caed12146103e0578063e609055e146103f3578063e63ab1e914610406578063eab103df1461042d57600080fd5b8063a217fddf146103a2578063d547741f146103aa578063d936547e146103bd57600080fd5b8063950837aa116100c8578063950837aa146103695780639a5904271461037c5780639b19251a1461038f57600080fd5b80638456cb591461030157806385f438c11461030957806391d148541461033057600080fd5b806336568abe116101505780635b1125911161012a5780635b112591146102d05780635c975abb146102e35780637ab697e7146102ee57600080fd5b806336568abe1461028e5780633f4ba83a146102a1578063570618e1146102a957600080fd5b8063248a9ca311610181578063248a9ca314610224578063252f07bf146102565780632f2ff15d1461027b57600080fd5b806301ffc9a7146101a8578063116191b6146101d057806321fc65f21461020f575b600080fd5b6101bb6101b636600461155e565b610440565b60405190151581526020015b60405180910390f35b6101f77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c7565b61022261021d3660046115fe565b6104d9565b005b610248610232366004611671565b6000908152600160208190526040909120015490565b6040519081526020016101c7565b6004546101bb9074010000000000000000000000000000000000000000900460ff1681565b61022261028936600461168a565b610699565b61022261029c36600461168a565b6106c5565b610222610716565b6102487f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101f7906001600160a01b031681565b60025460ff166101bb565b6102226102fc3660046116ba565b61074b565b610222610910565b6102487f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101bb61033e36600461168a565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61022261037736600461175d565b610942565b61022261038a36600461175d565b610ac0565b61022261039d36600461175d565b610b74565b610248600081565b6102226103b836600461168a565b610c2b565b6101bb6103cb36600461175d565b60036020526000908152604090205460ff1681565b6102226103ee36600461177a565b610c51565b6102226104013660046117bb565b610d49565b6102487f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61022261043b36600461185a565b610f75565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104e1610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461050b8161100e565b610513611018565b6001600160a01b03851660009081526003602052604090205460ff16610565576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105996001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086611057565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106069088908a908990899089906004016118c0565b600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161067f93929190611903565b60405180910390a3506106926001600055565b5050505050565b600082815260016020819052604090912001546106b58161100e565b6106bf83836110cb565b50505050565b6001600160a01b0381163314610707576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610711828261115e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107408161100e565b6107486111e5565b50565b610753610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461077d8161100e565b610785611018565b6001600160a01b03861660009081526003602052604090205460ff166107d7576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61080b6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087611057565b6040517fece697b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ece697b39061087a9089908b908a908a908a908a906004016119bf565b600060405180830381600087803b15801561089457600080fd5b505af11580156108a8573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640878787876040516108f59493929190611a16565b60405180910390a3506109086001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61093a8161100e565b610748611237565b600061094d8161100e565b6001600160a01b03821661098d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546109c4907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661115e565b506004546109fc907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661115e565b50610a277f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836110cb565b50610a527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a836110cb565b50600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527f086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba9060200160405180910390a15050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610aea8161100e565b6001600160a01b038216610b2a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610b9e8161100e565b6001600160a01b038216610bde576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610c478161100e565b6106bf838361115e565b610c59610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610c838161100e565b610c8b611018565b6001600160a01b03831660009081526003602052604090205460ff16610cdd576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf16001600160a01b0384168584611057565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610d3691815260200190565b60405180910390a3506107116001600055565b610d51610fcb565b610d59611018565b60045474010000000000000000000000000000000000000000900460ff16610dad576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610dff576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a42565b9050610e9a6001600160a01b038616333087611274565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f459190611a42565b610f4f9190611a5b565b8787604051610f62959493929190611a95565b60405180910390a2506109086001600055565b6000610f808161100e565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403611007576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61074881336112ad565b60025460ff1615611055576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611324565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166111565760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104d3565b5060006104d3565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16156111565760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104d3565b6111ed6113a0565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61123f611018565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861121a3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106bf9186918216906323b872dd90608401611084565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611320576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b60006113396001600160a01b038416836113dc565b9050805160001415801561135e57508080602001905181019061135c9190611ace565b155b15610711576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611317565b60025460ff16611055576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606113ea838360006113f1565b9392505050565b60608147101561142f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611317565b600080856001600160a01b0316848660405161144b9190611aeb565b60006040518083038185875af1925050503d8060008114611488576040519150601f19603f3d011682016040523d82523d6000602084013e61148d565b606091505b509150915061149d8683836114a7565b9695505050505050565b6060826114bc576114b78261151c565b6113ea565b81511580156114d357506001600160a01b0384163b155b15611515576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611317565b50806113ea565b80511561152c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561157057600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113ea57600080fd5b6001600160a01b038116811461074857600080fd5b60008083601f8401126115c757600080fd5b50813567ffffffffffffffff8111156115df57600080fd5b6020830191508360208285010111156115f757600080fd5b9250929050565b60008060008060006080868803121561161657600080fd5b8535611621816115a0565b94506020860135611631816115a0565b935060408601359250606086013567ffffffffffffffff81111561165457600080fd5b611660888289016115b5565b969995985093965092949392505050565b60006020828403121561168357600080fd5b5035919050565b6000806040838503121561169d57600080fd5b8235915060208301356116af816115a0565b809150509250929050565b60008060008060008060a087890312156116d357600080fd5b86356116de816115a0565b955060208701356116ee816115a0565b945060408701359350606087013567ffffffffffffffff81111561171157600080fd5b61171d89828a016115b5565b909450925050608087013567ffffffffffffffff81111561173d57600080fd5b87016060818a03121561174f57600080fd5b809150509295509295509295565b60006020828403121561176f57600080fd5b81356113ea816115a0565b60008060006060848603121561178f57600080fd5b833561179a816115a0565b925060208401356117aa816115a0565b929592945050506040919091013590565b600080600080600080608087890312156117d457600080fd5b863567ffffffffffffffff8111156117eb57600080fd5b6117f789828a016115b5565b909750955050602087013561180b816115a0565b935060408701359250606087013567ffffffffffffffff81111561182e57600080fd5b61183a89828a016115b5565b979a9699509497509295939492505050565b801515811461074857600080fd5b60006020828403121561186c57600080fd5b81356113ea8161184c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b03851660208201528360408201526080606082015260006118f8608083018486611877565b979650505050505050565b83815260406020820152600061191d604083018486611877565b95945050505050565b60008135611933816115a0565b6001600160a01b03168352602082810135908401526040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261197e57600080fd5b820160208101903567ffffffffffffffff81111561199b57600080fd5b8036038213156119aa57600080fd5b6060604086015261191d606086018284611877565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006119f760a083018587611877565b8281036080840152611a098185611926565b9998505050505050505050565b848152606060208201526000611a30606083018587611877565b82810360408401526118f88185611926565b600060208284031215611a5457600080fd5b5051919050565b818103818111156104d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611aa9606083018789611877565b8560208401528281036040840152611ac2818587611877565b98975050505050505050565b600060208284031215611ae057600080fd5b81516113ea8161184c565b6000825160005b81811015611b0c5760208186018101518583015201611af2565b50600092019182525091905056fea2646970667358221220a57d389b60850bdfffcd53692f80a9c416ca5b9b4d1b7d58052beba77fb7a96b64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960045534801561001657600080fd5b5060405161199338038061199383398101604081905261003591610238565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100dd60008261016c565b506101087f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361016c565b506101337f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361016c565b5061015e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261016c565b50505050505050505061028c565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166102125760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610216565b5060005b92915050565b80516001600160a01b038116811461023357600080fd5b919050565b6000806000806080858703121561024e57600080fd5b6102578561021c565b93506102656020860161021c565b92506102736040860161021c565b91506102816060860161021c565b905092959194509250565b60805160a0516116a36102f060003960008181610220015281816106d80152818161084a01528181610b6301528181610ce40152610e060152600081816101d401528181610648015281816106ab01528181610ad30152610b3601526116a36000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80636f8b44b0116100e3578063a217fddf1161008c578063d547741f11610066578063d547741f146103cf578063d5abeb01146103e2578063e63ab1e9146103eb57600080fd5b8063a217fddf1461038d578063a783c78914610395578063afd2dce4146103bc57600080fd5b806385f438c1116100bd57806385f438c11461030d57806391d1485414610334578063950837aa1461037a57600080fd5b80636f8b44b0146102df578063743e0c9b146102f25780638456cb591461030557600080fd5b80632f2ff15d116101455780635b1125911161011f5780635b112591146102a15780635c975abb146102c15780635e3e9fef146102cc57600080fd5b80632f2ff15d1461027357806336568abe146102865780633f4ba83a1461029957600080fd5b8063116191b611610176578063116191b6146101cf57806321e093b11461021b578063248a9ca31461024257600080fd5b806301ffc9a714610192578063106e6290146101ba575b600080fd5b6101a56101a03660046111c8565b610412565b60405190151581526020015b60405180910390f35b6101cd6101c836600461123a565b6104ab565b005b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b61026561025036600461126d565b60009081526002602052604090206001015490565b6040519081526020016101b1565b6101cd610281366004611286565b610550565b6101cd610294366004611286565b61057b565b6101cd6105d4565b6003546101f69073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff166101a5565b6101cd6102da3660046112fb565b610609565b6101cd6102ed36600461126d565b61079e565b6101cd61030036600461126d565b61080d565b6101cd6108b7565b6102657f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a5610342366004611286565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cd61038836600461135d565b6108e9565b610265600081565b6102657f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101cd6103ca366004611378565b610a94565b6101cd6103dd366004611286565b610c2e565b61026560045481565b6102657f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104a557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104b3610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104dd81610c96565b6104e5610ca0565b6104f0848484610cdf565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161053891815260200190565b60405180910390a25061054b6001600055565b505050565b60008281526002602052604090206001015461056b81610c96565b6105758383610e67565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146105ca576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61054b8282610f67565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fe81610c96565b610606611026565b50565b610611610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461063b81610c96565b610643610ca0565b61066e7f00000000000000000000000000000000000000000000000000000000000000008684610cdf565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610708907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611459565b600060405180830381600087803b15801561072257600080fd5b505af1158015610736573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610784939291906114b6565b60405180910390a2506107976001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c881610c96565b6107d0610ca0565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c906020015b60405180910390a15050565b610815610ca0565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156108a357600080fd5b505af1158015610797573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108e181610c96565b6106066110a3565b60006108f481610c96565b73ffffffffffffffffffffffffffffffffffffffff8216610941576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354610985907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e49073ffffffffffffffffffffffffffffffffffffffff16610f67565b506003546109ca907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb9073ffffffffffffffffffffffffffffffffffffffff16610f67565b506109f57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610e67565b50610a207f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610e67565b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f190602001610801565b610a9c610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ac681610c96565b610ace610ca0565b610af97f00000000000000000000000000000000000000000000000000000000000000008785610cdf565b6040517fece697b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ece697b390610b95907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161157d565b600060405180830381600087803b158015610baf57600080fd5b505af1158015610bc3573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac87878786604051610c1394939291906115ee565b60405180910390a250610c266001600055565b505050505050565b600082815260026020526040902060010154610c4981610c96565b6105758383610f67565b600260005403610c8f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61060681336110fc565b60015460ff1615610cdd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d71919061161a565b610d7b9084611633565b1115610db3576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610e4a57600080fd5b505af1158015610e5e573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610efd3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016104a5565b5060006104a5565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104a5565b61102e61118c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6110ab610ca0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611079565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611188576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610cdd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156111da57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461120a57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461123557600080fd5b919050565b60008060006060848603121561124f57600080fd5b61125884611211565b95602085013595506040909401359392505050565b60006020828403121561127f57600080fd5b5035919050565b6000806040838503121561129957600080fd5b823591506112a960208401611211565b90509250929050565b60008083601f8401126112c457600080fd5b50813567ffffffffffffffff8111156112dc57600080fd5b6020830191508360208285010111156112f457600080fd5b9250929050565b60008060008060006080868803121561131357600080fd5b61131c86611211565b945060208601359350604086013567ffffffffffffffff81111561133f57600080fd5b61134b888289016112b2565b96999598509660600135949350505050565b60006020828403121561136f57600080fd5b61120a82611211565b60008060008060008060a0878903121561139157600080fd5b61139a87611211565b955060208701359450604087013567ffffffffffffffff8111156113bd57600080fd5b6113c989828a016112b2565b90955093505060608701359150608087013567ffffffffffffffff8111156113f057600080fd5b87016060818a03121561140257600080fd5b809150509295509295509295565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114ab608083018486611410565b979650505050505050565b8381526040602082015260006114d0604083018486611410565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff6114f782611211565b1682526020818101359083015260006040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261153c57600080fd5b820160208101903567ffffffffffffffff81111561155957600080fd5b80360382131561156857600080fd5b606060408601526114d0606086018284611410565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a0606082015260006115cf60a083018587611410565b82810360808401526115e181856114d9565b9998505050505050505050565b848152606060208201526000611608606083018587611410565b82810360408401526114ab81856114d9565b60006020828403121561162c57600080fd5b5051919050565b808201808211156104a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206fa68043397322d1636dba3251c7e40948706562c8e08173e2df059302eb268d64736f6c634300081a0033a2646970667358221220f66bd30a323ea200f180e4688341c68e65c6246bd00a96486f3fe71addb1163464736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallWithPayloadFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallWithPayloadFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayloadFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayloadFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602b55348015603357600080fd5b5061bccb806100436000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063916a17c61161012a578063b5508aa9116100bd578063d896e2611161008c578063e85c5a0711610071578063e85c5a071461037f578063f96c02df14610387578063fa7626d41461038f57600080fd5b8063d896e2611461036f578063e20c9f711461037757600080fd5b8063b5508aa91461033f578063ba414fa614610347578063bb93f11e1461035f578063c13d738f1461036757600080fd5b8063aa030c1c116100f9578063aa030c1c1461031f578063b0464fdc14610327578063b1409f711461032f578063b28490631461033757600080fd5b8063916a17c6146102f257806395cd0445146103075780639fd1e5971461030f578063a48abc2a1461031757600080fd5b80633e5e3c23116101bd57806351da903d1161018c57806366d9a9a01161017157806366d9a9a0146102c05780637478fda0146102d557806385226c81146102dd57600080fd5b806351da903d146102b05780636459542a146102b857600080fd5b80633e5e3c23146102905780633f7286f414610298578063466f332e146102a05780634ce25c0a146102a857600080fd5b80631806a9a5116101f95780631806a9a51461024d5780631ed7831c146102555780632ade38801461027357806330f7c04f1461028857600080fd5b806305a898e21461022b57806306978ca3146102355780630724d8e31461023d5780630a9254e414610245575b600080fd5b61023361039c565b005b610233610558565b610233610675565b610233610831565b6102336112ed565b61025d6113ee565b60405161026a91906183cb565b60405180910390f35b61027b611450565b60405161026a9190618467565b610233611592565b61025d611a12565b61025d611a72565b610233611ad2565b610233611daf565b610233612048565b6102336121ad565b6102c86125b3565b60405161026a91906185cd565b610233612735565b6102e561283d565b60405161026a919061866b565b6102fa61290d565b60405161026a91906186e2565b610233612a08565b610233612d4e565b610233612f7a565b610233613168565b6102fa61332f565b61023361342a565b6102336136c8565b6102e56138d8565b61034f6139a8565b604051901515815260200161026a565b610233613a7c565b610233613b73565b610233613c6a565b61025d613de9565b610233613e49565b6102336140ce565b601f5461034f9060ff1681565b6025546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390610494906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b1580156104ae57600080fd5b505af11580156104c2573d6000803e3d6000fd5b5050601f546022546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b036101009093048316945063d09e3b78935061052292600092889291169087906027906004016188b5565b600060405180830381600087803b15801561053c57600080fd5b505af1158015610550573d6000803e3d6000fd5b505050505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b1580156105ee57600080fd5b505af1158015610602573d6000803e3d6000fd5b5050601f546025546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b036101009093048316945063726ac97c9350859261065c92169060279060040161890a565b6000604051808303818588803b15801561053c57600080fd5b602654601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b039081166084830152620186a092163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561071457600080fd5b505af1158015610728573d6000803e3d6000fd5b50506025546024546040516001600160a01b039283169450911691507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c9061077790869060009060279061892c565b60405180910390a3601f546025546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b039081169263726ac97c9286926107d79291169060279060040161890a565b6000604051808303818588803b1580156107f057600080fd5b505af1158015610804573d6000803e3d6000fd5b50506026546001600160a01b031631925061082c915061082690508484618991565b826141e7565b505050565b602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116301790915560258054821661123417905560268054909116615678179055604051610883906182f8565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610908573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602654604051911690819061095190618305565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610984573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260265460248054935191861690820152604481019390935292166064820152600091610a76916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614266565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c0000000000000000000000000000000060208201526026546024805493519490960485169584019590955293831660448301529091166064820152919250610b1c91608401610a19565b602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091178255604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c00000000000093810193909352601f5460235460265460248054945161010090940486169084015290841660448301528316606482015291166084820152919250610c209160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e00000000000000000000000000000000000000000000000000000000179052614266565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179091556026546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610cc457600080fd5b505af1158015610cd8573d6000803e3d6000fd5b50506023546026546021546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152911692506315d57fd49150604401600060405180830381600087803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610de157600080fd5b505af1158015610df5573d6000803e3d6000fd5b5050602480546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d93506306447d56925001600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b5050601f546020546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b158015610ee957600080fd5b505af1158015610efd573d6000803e3d6000fd5b5050601f546021546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b158015610f6857600080fd5b505af1158015610f7c573d6000803e3d6000fd5b50506020546022546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b158015610fe257600080fd5b505af1158015610ff6573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561105857600080fd5b505af115801561106c573d6000803e3d6000fd5b505060225460248054602b546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529283015290911692506340c10f199150604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561116557600080fd5b505af1158015611179573d6000803e3d6000fd5b505060215460248054602b546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529283015260006044830152909116925063106e62909150606401600060405180830381600087803b1580156111ef57600080fd5b505af1158015611203573d6000803e3d6000fd5b50506040805160a0810182526103218082526000602080840182815284860193845285519182019095528181526060840181905260808401919091528251602780549551151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009096166001600160a01b0392831617959095178555915160288054919093167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179091559093509091506029906112dc9082618a1a565b506080820151816003015590505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561138357600080fd5b505af1158015611397573d6000803e3d6000fd5b5050601f546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316925063726ac97c9150839061065c9060009060279060040161890a565b6060601680548060200260200160405190810160405280929190818152602001828054801561144657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611428575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561158957600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156115725783829060005260206000200180546114e590618779565b80601f016020809104026020016040519081016040528092919081815260200182805461151190618779565b801561155e5780601f106115335761010080835404028352916020019161155e565b820191906000526020600020905b81548152906001019060200180831161154157829003601f168201915b5050505050815260200190600101906114c6565b505050508152505081526020019060010190611474565b50505050905090565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa1580156115fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116229190618ad9565b905061162f6000826141e7565b6025546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602254601f5491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b036101009093048316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af1158015611717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173b9190618af2565b50601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156117ce57600080fd5b505af11580156117e2573d6000803e3d6000fd5b50506025546024546022546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c92611838928992909116908790602790618b14565b60405180910390a3601f546025546022546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526101009093046001600160a01b039081169363d09e3b78936118a19390831692899291169087906027906004016188b5565b600060405180830381600087803b1580156118bb57600080fd5b505af11580156118cf573d6000803e3d6000fd5b50506022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561193b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195f9190618ad9565b905061196b84826141e7565b602254602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156119d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f89190618ad9565b9050611a0b85602b546108269190618b4e565b5050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015611446576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611428575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611446576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611428575050505050905090565b6000620186a0905060006002601f60019054906101000a90046001600160a01b03166001600160a01b031663a2ba19346040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b559190618ad9565b611b5f9190618b61565b67ffffffffffffffff811115611b7757611b776189a4565b6040519080825280601f01601f191660200182016040528015611ba1576020820181803683370190505b5090506002601f60019054906101000a90046001600160a01b03166001600160a01b031663a2ba19346040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1d9190618ad9565b611c279190618b61565b611c32906001618991565b67ffffffffffffffff811115611c4a57611c4a6189a4565b6040519080825280601f01601f191660200182016040528015611c74576020820181803683370190505b50602990611c829082618a1a565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015b600060405180830381600087803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b5050601f546025546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b036101009093048316945063744b9b8b93508692611d799216908690602790600401618b9c565b6000604051808303818588803b158015611d9257600080fd5b505af1158015611da6573d6000803e3d6000fd5b50505050505050565b602254601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b039081166004830152620186a06024830181905292169063095ea7b3906044016020604051808303816000875af1158015611e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4b9190618af2565b50601f60019054906101000a90046001600160a01b03166001600160a01b031663a2ba19346040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec39190618ad9565b611ece906001618991565b67ffffffffffffffff811115611ee657611ee66189a4565b6040519080825280601f01601f191660200182016040528015611f10576020820181803683370190505b50602990611f1e9082618a1a565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015b600060405180830381600087803b158015611fa557600080fd5b505af1158015611fb9573d6000803e3d6000fd5b5050601f546025546022546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b036101009094048416955063102614b0945061201a939283169287921690602790600401618bd0565b600060405180830381600087803b15801561203457600080fd5b505af1158015611a0b573d6000803e3d6000fd5b6025546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561214257600080fd5b505af1158015612156573d6000803e3d6000fd5b5050601f546040517f1becceb40000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169250631becceb4915061201a906000908590602790600401618b9c565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015612219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223d9190618ad9565b905061224a6000826141e7565b602254601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03610100909204821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af11580156122bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e19190618af2565b50601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561237457600080fd5b505af1158015612388573d6000803e3d6000fd5b50506025546024546022546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c926123dc9288929091169060279061892c565b60405180910390a3601f546025546022546040517f102614b00000000000000000000000000000000000000000000000000000000081526101009093046001600160a01b039081169363102614b09361244393908316928892911690602790600401618bd0565b600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50506022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156124dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125019190618ad9565b905061250d83826141e7565b602254602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015612576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259a9190618ad9565b90506125ad84602b546108269190618b4e565b50505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611589578382906000526020600020906002020160405180604001604052908160008201805461260a90618779565b80601f016020809104026020016040519081016040528092919081815260200182805461263690618779565b80156126835780601f1061265857610100808354040283529160200191612683565b820191906000526020600020905b81548152906001019060200180831161266657829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561271d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116126ca5790505b505050505081525050815260200190600101906125d7565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b1580156127cb57600080fd5b505af11580156127df573d6000803e3d6000fd5b5050601f546022546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b036101009093048316945063102614b0935061201a926000928792911690602790600401618bd0565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561158957838290600052602060002001805461288090618779565b80601f01602080910402602001604051908101604052809291908181526020018280546128ac90618779565b80156128f95780601f106128ce576101008083540402835291602001916128f9565b820191906000526020600020905b8154815290600101906020018083116128dc57829003601f168201915b505050505081526020019060010190612861565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156115895760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156129f057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161299d5790505b50505050508152505081526020019060010190612931565b6000620186a0905060006002601f60019054906101000a90046001600160a01b03166001600160a01b031663a2ba19346040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8b9190618ad9565b612a959190618b61565b67ffffffffffffffff811115612aad57612aad6189a4565b6040519080825280601f01601f191660200182016040528015612ad7576020820181803683370190505b5090506002601f60019054906101000a90046001600160a01b03166001600160a01b031663a2ba19346040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b539190618ad9565b612b5d9190618b61565b612b68906001618991565b67ffffffffffffffff811115612b8057612b806189a4565b6040519080825280601f01601f191660200182016040528015612baa576020820181803683370190505b50602990612bb89082618a1a565b50602254601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03610100909204821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015612c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c509190618af2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015b600060405180830381600087803b158015612cd757600080fd5b505af1158015612ceb573d6000803e3d6000fd5b5050601f546025546022546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b036101009094048416955063d09e3b78945061052293928316928892169087906027906004016188b5565b6026546025546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052601f5490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612e6457600080fd5b505af1158015612e78573d6000803e3d6000fd5b50506025546024546040516001600160a01b039283169450911691507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c90612ec99087906000908790602790618b14565b60405180910390a3601f546025546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b039081169263744b9b8b928792612f2b929116908690602790600401618b9c565b6000604051808303818588803b158015612f4457600080fd5b505af1158015612f58573d6000803e3d6000fd5b50506026546001600160a01b03163192506125ad915061082690508585618991565b601f60019054906101000a90046001600160a01b03166001600160a01b031663a2ba19346040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff19190618ad9565b612ffc906001618991565b67ffffffffffffffff811115613014576130146189a4565b6040519080825280601f01601f19166020018201604052801561303e576020820181803683370190505b5060299061304c9082618a1a565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5061796c6f616453697a654578636565646564000000000000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b1580156130e057600080fd5b505af11580156130f4573d6000803e3d6000fd5b5050601f546025546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b036101009093048316945063726ac97c935060019261314f92169060279060040161890a565b6000604051808303818588803b15801561203457600080fd5b6025546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052601f5490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561327057600080fd5b505af1158015613284573d6000803e3d6000fd5b50506025546024546040516001600160a01b039283169450911691507fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d974906132d0908590602790618c07565b60405180910390a3601f546025546040517f1becceb40000000000000000000000000000000000000000000000000000000081526001600160a01b03610100909304831692631becceb49261201a929116908590602790600401618b9c565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156115895760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561341257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116133bf5790505b50505050508152505081526020019060010190613353565b60006002601f60019054906101000a90046001600160a01b03166001600160a01b031663a2ba19346040518163ffffffff1660e01b8152600401602060405180830381865afa158015613481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a59190618ad9565b6134af9190618b61565b67ffffffffffffffff8111156134c7576134c76189a4565b6040519080825280601f01601f1916602001820160405280156134f1576020820181803683370190505b5090506002601f60019054906101000a90046001600160a01b03166001600160a01b031663a2ba19346040518163ffffffff1660e01b8152600401602060405180830381865afa158015613549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356d9190618ad9565b6135779190618b61565b613582906001618991565b67ffffffffffffffff81111561359a5761359a6189a4565b6040519080825280601f01601f1916602001820160405280156135c4576020820181803683370190505b506029906135d29082618a1a565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561365857600080fd5b505af115801561366c573d6000803e3d6000fd5b5050601f546025546040517f1becceb40000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b039081169450631becceb4935061201a929116908590602790600401618b9c565b602254601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b039081166004830152620186a06024830181905292169063095ea7b3906044016020604051808303816000875af1158015613740573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137649190618af2565b50602480546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b1580156137d657600080fd5b505af11580156137ea573d6000803e3d6000fd5b50506020546022546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b15801561385057600080fd5b505af1158015613864573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401611f8b565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561158957838290600052602060002001805461391b90618779565b80601f016020809104026020016040519081016040528092919081815260200182805461394790618779565b80156139945780601f1061396957610100808354040283529160200191613994565b820191906000526020600020905b81548152906001019060200180831161397757829003601f168201915b5050505050815260200190600101906138fc565b60085460009060ff16156139c0575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a759190618ad9565b1415905090565b6025546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612cbd9060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b6025546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390611cef9060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b6025546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390613d62906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b158015613d7c57600080fd5b505af1158015613d90573d6000803e3d6000fd5b5050601f546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316925063744b9b8b91508490611d79906000908690602790600401618b9c565b60606015805480602002602001604051908101604052809291908181526020018280548015611446576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611428575050505050905090565b6025546040516001600160a01b039091166024820152620186a09060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602254601f5491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b036101009093048316600482015260248101869052929350169063095ea7b3906044016020604051808303816000875af1158015613f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5a9190618af2565b50602480546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b158015613fcc57600080fd5b505af1158015613fe0573d6000803e3d6000fd5b50506020546022546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b15801561404657600080fd5b505af115801561405a573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401612cbd565b602254601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03908116600483015260006024830181905292169063095ea7b3906044016020604051808303816000875af1158015614144573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141689190618af2565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401611f8b565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561425257600080fd5b505afa158015610550573d6000803e3d6000fd5b6000614270618312565b61427b848483614285565b9150505b92915050565b6000806142928584614300565b90506142f56040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016142e0929190618c2c565b6040516020818303038152906040528561430c565b9150505b9392505050565b60006142f9838361433a565b60c081015151600090156143305761432984848460c00151614355565b90506142f9565b61432984846144fb565b600061434683836145e6565b6142f98383602001518461430c565b6000806143606145f6565b9050600061436e86836146c9565b905060006143858260600151836020015185614b6f565b9050600061439583838989614d81565b905060006143a282615bfe565b602081015181519192509060030b15614415578982604001516040516020016143cc929190618c4e565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261440c91600401618ccf565b60405180910390fd5b60006144586040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615dcd565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906144ab908490600401618ccf565b602060405180830381865afa1580156144c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144ec9190618ce2565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590614550908790600401618ccf565b600060405180830381865afa15801561456d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145959190810190618dc4565b905060006145c382856040516020016145af929190618df9565b604051602081830303815290604052615fcd565b90506001600160a01b03811661427b5784846040516020016143cc929190618e28565b6145f282826000615fe0565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061467d908490600401618ed3565b600060405180830381865afa15801561469a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146c29190810190618f1a565b9250505090565b6146fb6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506147466040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61474f856160e3565b6020820152600061475f866164c8565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156147a1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526147c99190810190618f1a565b868385602001516040516020016147e39493929190618f63565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061483b908590600401618ccf565b600060405180830381865afa158015614858573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526148809190810190618f1a565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906148c8908490600401619067565b602060405180830381865afa1580156148e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149099190618af2565b61491e57816040516020016143cc91906190b9565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061496390849060040161914b565b600060405180830381865afa158015614980573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149a89190810190618f1a565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906149ef90849060040161919d565b602060405180830381865afa158015614a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a309190618af2565b15614ac5576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614a7a90849060040161919d565b600060405180830381865afa158015614a97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614abf9190810190618f1a565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614aea91906191ef565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614b1692919061925b565b600060405180830381865afa158015614b33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b5b9190810190618f1a565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081614b8b5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614beb57614beb619280565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614c3f57614c3f619280565b602002602001018190525084604051602001614c5b91906192af565b60405160208183030381529060405281600281518110614c7d57614c7d619280565b602002602001018190525082604051602001614c99919061931b565b60405160208183030381529060405281600381518110614cbb57614cbb619280565b60200260200101819052506000614cd182615bfe565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614d62906040805180820182526000808252602091820152815180830190925284518252808501908201529061674b565b614d7757856040516020016143cc919061935c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614dd1565b511590565b614f4557826020015115614e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161440c565b8260c0015115614f45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161440c565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081614f5e57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280614fb9906193ed565b935060ff1681518110614fce57614fce619280565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161501f919061940c565b60405160208183030381529060405282828061503a906193ed565b935060ff168151811061504f5761504f619280565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061509c906193ed565b935060ff16815181106150b1576150b1619280565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806150fe906193ed565b935060ff168151811061511357615113619280565b6020026020010181905250876020015182828061512f906193ed565b935060ff168151811061514457615144619280565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615191906193ed565b935060ff16815181106151a6576151a6619280565b6020908102919091010152875182826151be816193ed565b935060ff16815181106151d3576151d3619280565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615220906193ed565b935060ff168151811061523557615235619280565b6020026020010181905250615249466167ac565b8282615254816193ed565b935060ff168151811061526957615269619280565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806152b6906193ed565b935060ff16815181106152cb576152cb619280565b6020026020010181905250868282806152e3906193ed565b935060ff16815181106152f8576152f8619280565b602090810291909101015285511561541f5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615349816193ed565b935060ff168151811061535e5761535e619280565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906153ae908990600401618ccf565b600060405180830381865afa1580156153cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153f39190810190618f1a565b82826153fe816193ed565b935060ff168151811061541357615413619280565b60200260200101819052505b8460200151156154ef5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615468816193ed565b935060ff168151811061547d5761547d619280565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806154ca906193ed565b935060ff16815181106154df576154df619280565b60200260200101819052506156b6565b615527614dcc8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6155ba5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261556a816193ed565b935060ff168151811061557f5761557f619280565b60200260200101819052508460a0015160405160200161559f91906192af565b6040516020818303038152906040528282806154ca906193ed565b8460c001511580156155fd5750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526155fb90511590565b155b156156b65760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615641816193ed565b935060ff168151811061565657615656619280565b602002602001018190525061566a8861684c565b60405160200161567a91906192af565b604051602081830303815290604052828280615695906193ed565b935060ff16815181106156aa576156aa619280565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526156ea90511590565b61577f5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261572d816193ed565b935060ff168151811061574257615742619280565b6020026020010181905250846040015182828061575e906193ed565b935060ff168151811061577357615773619280565b60200260200101819052505b6060850151156158a05760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826157c8816193ed565b935060ff16815181106157dd576157dd619280565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561584c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158749190810190618f1a565b828261587f816193ed565b935060ff168151811061589457615894619280565b60200260200101819052505b60e085015151156159475760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826158ea816193ed565b935060ff16815181106158ff576158ff619280565b602002602001018190525061591b8560e00151600001516167ac565b8282615926816193ed565b935060ff168151811061593b5761593b619280565b60200260200101819052505b60e085015160200151156159f15760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615994816193ed565b935060ff16815181106159a9576159a9619280565b60200260200101819052506159c58560e00151602001516167ac565b82826159d0816193ed565b935060ff16815181106159e5576159e5619280565b60200260200101819052505b60e08501516040015115615a9b5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282615a3e816193ed565b935060ff1681518110615a5357615a53619280565b6020026020010181905250615a6f8560e00151604001516167ac565b8282615a7a816193ed565b935060ff1681518110615a8f57615a8f619280565b60200260200101819052505b60e08501516060015115615b455760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615ae8816193ed565b935060ff1681518110615afd57615afd619280565b6020026020010181905250615b198560e00151606001516167ac565b8282615b24816193ed565b935060ff1681518110615b3957615b39619280565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615b6357615b636189a4565b604051908082528060200260200182016040528015615b9657816020015b6060815260200190600190039081615b815790505b50905060005b8260ff168160ff161015615bef57838160ff1681518110615bbf57615bbf619280565b6020026020010151828260ff1681518110615bdc57615bdc619280565b6020908102919091010152600101615b9c565b5093505050505b949350505050565b615c256040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615cab91869101619477565b600060405180830381865afa158015615cc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615cf09190810190618f1a565b90506000615cfe868361733b565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615d2e919061866b565b6000604051808303816000875af1158015615d4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d7591908101906194be565b805190915060030b15801590615d8e5750602081015151155b8015615d9d5750604081015151155b15614d775781600081518110615db557615db5619280565b60200260200101516040516020016143cc9190619574565b60606000615e028560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150615e399082905b90617490565b15615f96576000615eb682615eb084615eaa615e7c8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906174b7565b90617519565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615f1a908290617490565b15615f8457604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f81905b829061759e565b90505b615f8d816175c4565b925050506142f9565b8215615faf5784846040516020016143cc929190619760565b50506040805160208101909152600081526142f9565b509392505050565b6000808251602084016000f09392505050565b8160a0015115615fef57505050565b6000615ffc84848461762d565b9050600061600982615bfe565b602081015181519192509060030b1580156160a55750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160a590604080518082018252600080825260209182015281518083019092528451825280850190820152615e33565b156160b257505050505050565b604082015151156160d25781604001516040516020016143cc9190619807565b806040516020016143cc9190619865565b606060006161188360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061617d905b829061674b565b156161ec57604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526142f9906161e7908390617bc8565b6175c4565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261624e905b8290617c52565b60010361631b57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162b490615f7a565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526142f9906161e7905b839061759e565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261637a90616176565b156164b157604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906163e2908390617cec565b9050600081600183516163f59190618b4e565b8151811061640557616405619280565b602002602001015190506164a86161e761647b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617bc8565b95945050505050565b826040516020016143cc91906198d0565b50919050565b606060006164fd8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061655f90616176565b1561656d576142f9816175c4565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165cc90616247565b60010361663657604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526142f9906161e790616314565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261669590616176565b156164b157604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906166fd908390617cec565b90506001815111156167395780600282516167189190618b4e565b8151811061672857616728619280565b602002602001015192505050919050565b50826040516020016143cc91906198d0565b8051825160009111156167605750600061427f565b8151835160208501516000929161677691618991565b6167809190618b4e565b90508260200151810361679757600191505061427f565b82516020840151819020912014905092915050565b606060006167b983617d91565b600101905060008167ffffffffffffffff8111156167d9576167d96189a4565b6040519080825280601f01601f191660200182016040528015616803576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461680d57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916168d8905b8290617e73565b1561691857505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616977906168d1565b156169b757505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a16906168d1565b15616a5657505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ab5906168d1565b80616b1a5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b1a906168d1565b15616b5a57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bb9906168d1565b80616c1e5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c1e906168d1565b15616c5e57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616cbd906168d1565b80616d225750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d22906168d1565b15616d6257505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616dc1906168d1565b80616e265750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e26906168d1565b15616e6657505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ec5906168d1565b15616f0557505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f64906168d1565b15616fa457505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617003906168d1565b1561704357505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170a2906168d1565b156170e257505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617141906168d1565b1561718157505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171e0906168d1565b806172455750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617245906168d1565b1561728557505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172e4906168d1565b1561732457505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516143cc92906020016199ae565b60608060005b84518110156173c6578185828151811061735d5761735d619280565b6020026020010151604051602001617376929190618df9565b6040516020818303038152906040529150600185516173959190618b4e565b81146173be57816040516020016173ac9190619b17565b60405160208183030381529060405291505b600101617341565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816173df579050509050838160008151811061740a5761740a619280565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061745e5761745e619280565b6020026020010181905250818160028151811061747d5761747d619280565b6020908102919091010152949350505050565b60208083015183518351928401516000936174ae9291849190617e87565b14159392505050565b604080518082019091526000808252602082015260006174e98460000151856020015185600001518660200151617f98565b90508360200151816174fb9190618b4e565b8451859061750a908390618b4e565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561753e57508161427f565b60208083015190840151600191146175655750815160208481015190840151829020919020145b80156175965782518451859061757c908390618b4e565b9052508251602085018051617592908390618991565b9052505b509192915050565b60408051808201909152600080825260208201526175bd8383836180b8565b5092915050565b60606000826000015167ffffffffffffffff8111156175e5576175e56189a4565b6040519080825280601f01601f19166020018201604052801561760f576020820181803683370190505b50905060006020820190506175bd8185602001518660000151618163565b606060006176396145f6565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161765657905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806176b1906193ed565b935060ff16815181106176c6576176c6619280565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016177179190619b58565b604051602081830303815290604052828280617732906193ed565b935060ff168151811061774757617747619280565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617794906193ed565b935060ff16815181106177a9576177a9619280565b6020026020010181905250826040516020016177c5919061931b565b6040516020818303038152906040528282806177e0906193ed565b935060ff16815181106177f5576177f5619280565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617842906193ed565b935060ff168151811061785757617857619280565b602002602001018190525061786c87846181dd565b8282617877816193ed565b935060ff168151811061788c5761788c619280565b6020908102919091010152855151156179385760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826178de816193ed565b935060ff16815181106178f3576178f3619280565b602002602001018190525061790c8660000151846181dd565b8282617917816193ed565b935060ff168151811061792c5761792c619280565b60200260200101819052505b8560800151156179a65760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617981816193ed565b935060ff168151811061799657617996619280565b6020026020010181905250617a0c565b8415617a0c5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826179eb816193ed565b935060ff1681518110617a0057617a00619280565b60200260200101819052505b60408601515115617aa85760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282617a56816193ed565b935060ff1681518110617a6b57617a6b619280565b60200260200101819052508560400151828280617a87906193ed565b935060ff1681518110617a9c57617a9c619280565b60200260200101819052505b856060015115617b125760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617af1816193ed565b935060ff1681518110617b0657617b06619280565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617b3057617b306189a4565b604051908082528060200260200182016040528015617b6357816020015b6060815260200190600190039081617b4e5790505b50905060005b8260ff168160ff161015617bbc57838160ff1681518110617b8c57617b8c619280565b6020026020010151828260ff1681518110617ba957617ba9619280565b6020908102919091010152600101617b69565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617bed57508161427f565b81518351602085015160009291617c0391618991565b617c0d9190618b4e565b60208401519091506001908214617c2e575082516020840151819020908220145b8015617c4957835185518690617c45908390618b4e565b9052505b50929392505050565b6000808260000151617c768560000151866020015186600001518760200151617f98565b617c809190618991565b90505b83516020850151617c949190618991565b81116175bd5781617ca481619b9d565b9250508260000151617cdb856020015183617cbf9190618b4e565b8651617ccb9190618b4e565b8386600001518760200151617f98565b617ce59190618991565b9050617c83565b60606000617cfa8484617c52565b617d05906001618991565b67ffffffffffffffff811115617d1d57617d1d6189a4565b604051908082528060200260200182016040528015617d5057816020015b6060815260200190600190039081617d3b5790505b50905060005b8151811015615fc557617d6c6161e7868661759e565b828281518110617d7e57617d7e619280565b6020908102919091010152600101617d56565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617dda577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617e06576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310617e2457662386f26fc10000830492506010015b6305f5e1008310617e3c576305f5e100830492506008015b6127108310617e5057612710830492506004015b60648310617e62576064830492506002015b600a831061427f5760010192915050565b6000617e7f838361821d565b159392505050565b600080858411617f8e5760208411617f3a5760008415617ed2576001617eae866020618b4e565b617eb9906008619bb7565b617ec4906002619cb5565b617ece9190618b4e565b1990505b8351811685617ee18989618991565b617eeb9190618b4e565b805190935082165b818114617f2557878411617f0d5787945050505050615bf6565b83617f1781619cc1565b945050828451169050617ef3565b617f2f8785618991565b945050505050615bf6565b838320617f478588618b4e565b617f519087618991565b91505b858210617f8c57848220808203617f7957617f6f8684618991565b9350505050615bf6565b617f84600184618b4e565b925050617f54565b505b5092949350505050565b600083818685116180a357602085116180525760008515617fe4576001617fc0876020618b4e565b617fcb906008619bb7565b617fd6906002619cb5565b617fe09190618b4e565b1990505b84518116600087617ff58b8b618991565b617fff9190618b4e565b855190915083165b8281146180445781861061802c5761801f8b8b618991565b9650505050505050615bf6565b8561803681619b9d565b965050838651169050618007565b859650505050505050615bf6565b508383206000905b6180648689618b4e565b82116180a1578583208082036180805783945050505050615bf6565b61808b600185618991565b935050818061809990619b9d565b92505061805a565b505b6180ad8787618991565b979650505050505050565b604080518082019091526000808252602082015260006180ea8560000151866020015186600001518760200151617f98565b6020808701805191860191909152519091506181069082618b4e565b8352845160208601516181199190618991565b8103618128576000855261815a565b835183516181369190618991565b85518690618145908390618b4e565b90525083516181549082618991565b60208601525b50909392505050565b6020811061819b578151835261817a602084618991565b9250618187602083618991565b9150618194602082618b4e565b9050618163565b60001981156181ca5760016181b1836020618b4e565b6181bd90610100619cb5565b6181c79190618b4e565b90505b9151835183169219169190911790915250565b606060006181eb84846146c9565b805160208083015160405193945061820593909101619cd8565b60405160208183030381529060405291505092915050565b8151815160009190811115618230575081515b6020808501519084015160005b838110156182e957825182518082146182b95760001960208710156182985760018461826a896020618b4e565b6182749190618991565b61827f906008619bb7565b61828a906002619cb5565b6182949190618b4e565b1990505b81811683821681810391146182b657975061427f9650505050505050565b50505b6182c4602086618991565b94506182d1602085618991565b935050506020816182e29190618991565b905061823d565b5084518651614d779190619d30565b610c9f80619d5183390190565b6112a68061a9f083390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161835561835a565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016183556040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561840c5783516001600160a01b03168352602093840193909201916001016183e5565b509095945050505050565b60005b8381101561843257818101518382015260200161841a565b50506000910152565b60008151808452618453816020860160208601618417565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618563577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618549577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261853384865161843b565b60209586019590945092909201916001016184f9565b50919750505060209485019492909201915060010161848f565b50929695505050505050565b600081518084526020840193506020830160005b828110156185c35781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618583565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618563577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618639604088018261843b565b9050602082015191508681036020880152618654818361856f565b9650505060209384019391909101906001016185f5565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618563577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526186cd85835161843b565b94506020938401939190910190600101618693565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618563577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618763604087018261856f565b955050602093840193919091019060010161870a565b600181811c9082168061878d57607f821691505b6020821081036164c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a060608501526000815461881081618779565b8060a0880152600182166000811461882f57600181146188695761889d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b890101935061889d565b84600052602060002060005b838110156188945781548a820160c00152600190910190602001618875565b890160c0019450505b50505060038401546080860152809250505092915050565b6001600160a01b03861681528460208201526001600160a01b038416604082015260a0606082015260006188ec60a083018561843b565b82810360808401526188fe81856187c6565b98975050505050505050565b6001600160a01b0383168152604060208201526000615bf660408301846187c6565b8381526001600160a01b0383166020820152608060408201526000608082015260a0606082015260006164a860a08301846187c6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561427f5761427f618962565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561082c57806000526020600020601f840160051c810160208510156189fa5750805b601f840160051c820191505b81811015611a0b5760008155600101618a06565b815167ffffffffffffffff811115618a3457618a346189a4565b618a4881618a428454618779565b846189d3565b6020601f821160018114618a7c5760008315618a645750848201515b600019600385901b1c1916600184901b178455611a0b565b600084815260208120601f198516915b82811015618aac5787850151825560209485019460019092019101618a8c565b5084821015618aca5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215618aeb57600080fd5b5051919050565b600060208284031215618b0457600080fd5b815180151581146142f957600080fd5b8481526001600160a01b0384166020820152608060408201526000618b3c608083018561843b565b82810360608401526180ad81856187c6565b8181038181111561427f5761427f618962565b600082618b97577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0384168152606060208201526000618bbe606083018561843b565b8281036040840152614d7781856187c6565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000614d7760808301846187c6565b604081526000618c1a604083018561843b565b82810360208401526142f581856187c6565b6001600160a01b0383168152604060208201526000615bf6604083018461843b565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618c8681601a850160208801618417565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351618cc381601c840160208801618417565b01601c01949350505050565b6020815260006142f9602083018461843b565b600060208284031215618cf457600080fd5b81516001600160a01b03811681146142f957600080fd5b6040516060810167ffffffffffffffff81118282101715618d2e57618d2e6189a4565b60405290565b60008067ffffffffffffffff841115618d4f57618d4f6189a4565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715618d7e57618d7e6189a4565b604052838152905080828401851015618d9657600080fd5b615fc5846020830185618417565b600082601f830112618db557600080fd5b6142f983835160208501618d34565b600060208284031215618dd657600080fd5b815167ffffffffffffffff811115618ded57600080fd5b61427b84828501618da4565b60008351618e0b818460208801618417565b835190830190618e1f818360208801618417565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618e6081601a850160208801618417565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618e9d816033840160208801618417565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006142f9608083018461843b565b600060208284031215618f2c57600080fd5b815167ffffffffffffffff811115618f4357600080fd5b8201601f81018413618f5457600080fd5b61427b84825160208401618d34565b60008551618f75818460208a01618417565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618faf816001840160208a01618417565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618fed816002840160208901618417565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161902f816002840160208801618417565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061907a604083018461843b565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e20617274696661637420008152600082516190f181601f850160208701618417565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061915e604083018461843b565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006191b0604083018461843b565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619227816014850160208701618417565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061926e604083018561843b565b82810360208401526142f5818561843b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516192e7816001850160208701618417565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161932d818460208701618417565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516193e081604b850160208701618417565b91909101604b0192915050565b600060ff821660ff810361940357619403618962565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161946a816029850160208701618417565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006142f9608083018461843b565b6000602082840312156194d057600080fd5b815167ffffffffffffffff8111156194e757600080fd5b8201606081850312156194f957600080fd5b619501618d0b565b81518060030b811461951257600080fd5b8152602082015167ffffffffffffffff81111561952e57600080fd5b61953a86828501618da4565b602083015250604082015167ffffffffffffffff81111561955a57600080fd5b61956686828501618da4565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516195d2816021850160208701618417565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516197be816021850160208801618417565b7f2720696e206f75747075743a200000000000000000000000000000000000000060219184019182015283516197fb81602e840160208801618417565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161946a816029850160208701618417565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516198c3816022850160208701618417565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161990881600e850160208701618417565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516199e6816018850160208801618417565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619a2381601c840160208801618417565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619b29818460208701618417565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251619b9081601c850160208701618417565b91909101601c0192915050565b60006000198203619bb057619bb0618962565b5060010190565b808202811582820484141761427f5761427f618962565b6001815b6001841115619c0957808504811115619bed57619bed618962565b6001841615619bfb57908102905b60019390931c928002619bd2565b935093915050565b600082619c205750600161427f565b81619c2d5750600061427f565b8160018114619c435760028114619c4d57619c69565b600191505061427f565b60ff841115619c5e57619c5e618962565b50506001821b61427f565b5060208310610133831016604e8410600b8410161715619c8c575081810a61427f565b619c996000198484619bce565b8060001904821115619cad57619cad618962565b029392505050565b60006142f98383619c11565b600081619cd057619cd0618962565b506000190190565b60008351619cea818460208801618417565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619d24816001840160208801618417565b01600101949350505050565b81810360008312801583831316838312821617156175bd576175bd61896256fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a0033a2646970667358221220027768e2d9e302c353f19baee8345321de968afbb39a60268228885931d919c264736f6c634300081a0033", } // GatewayEVMInboundTestABI is the input ABI used to generate the binding from. @@ -713,6 +713,27 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestDeposi return _GatewayEVMInboundTest.Contract.TestDepositERC20ToCustody(&_GatewayEVMInboundTest.TransactOpts) } +// TestDepositERC20ToCustodyFailsIfPayloadSizeExceeded is a paid mutator transaction binding the contract method 0x4ce25c0a. +// +// Solidity: function testDepositERC20ToCustodyFailsIfPayloadSizeExceeded() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactor) TestDepositERC20ToCustodyFailsIfPayloadSizeExceeded(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMInboundTest.contract.Transact(opts, "testDepositERC20ToCustodyFailsIfPayloadSizeExceeded") +} + +// TestDepositERC20ToCustodyFailsIfPayloadSizeExceeded is a paid mutator transaction binding the contract method 0x4ce25c0a. +// +// Solidity: function testDepositERC20ToCustodyFailsIfPayloadSizeExceeded() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestSession) TestDepositERC20ToCustodyFailsIfPayloadSizeExceeded() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestDepositERC20ToCustodyFailsIfPayloadSizeExceeded(&_GatewayEVMInboundTest.TransactOpts) +} + +// TestDepositERC20ToCustodyFailsIfPayloadSizeExceeded is a paid mutator transaction binding the contract method 0x4ce25c0a. +// +// Solidity: function testDepositERC20ToCustodyFailsIfPayloadSizeExceeded() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestDepositERC20ToCustodyFailsIfPayloadSizeExceeded() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestDepositERC20ToCustodyFailsIfPayloadSizeExceeded(&_GatewayEVMInboundTest.TransactOpts) +} + // TestDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted is a paid mutator transaction binding the contract method 0xb2849063. // // Solidity: function testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted() returns() @@ -860,27 +881,6 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestDeposi return _GatewayEVMInboundTest.Contract.TestDepositEthToTssWithPayloadFailsIfPayloadSizeExceeded(&_GatewayEVMInboundTest.TransactOpts) } -// TestDepositZetaToConnector is a paid mutator transaction binding the contract method 0xe306a978. -// -// Solidity: function testDepositZetaToConnector() returns() -func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactor) TestDepositZetaToConnector(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMInboundTest.contract.Transact(opts, "testDepositZetaToConnector") -} - -// TestDepositZetaToConnector is a paid mutator transaction binding the contract method 0xe306a978. -// -// Solidity: function testDepositZetaToConnector() returns() -func (_GatewayEVMInboundTest *GatewayEVMInboundTestSession) TestDepositZetaToConnector() (*types.Transaction, error) { - return _GatewayEVMInboundTest.Contract.TestDepositZetaToConnector(&_GatewayEVMInboundTest.TransactOpts) -} - -// TestDepositZetaToConnector is a paid mutator transaction binding the contract method 0xe306a978. -// -// Solidity: function testDepositZetaToConnector() returns() -func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestDepositZetaToConnector() (*types.Transaction, error) { - return _GatewayEVMInboundTest.Contract.TestDepositZetaToConnector(&_GatewayEVMInboundTest.TransactOpts) -} - // TestFailDepositERC20ToCustodyIfAmountIs0 is a paid mutator transaction binding the contract method 0xf96c02df. // // Solidity: function testFailDepositERC20ToCustodyIfAmountIs0() returns() @@ -986,6 +986,27 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestFailDe return _GatewayEVMInboundTest.Contract.TestFailDepositEthToTssIfAmountIs0(&_GatewayEVMInboundTest.TransactOpts) } +// TestFailDepositEthToTssIfPayloadSizeExceeded is a paid mutator transaction binding the contract method 0xa48abc2a. +// +// Solidity: function testFailDepositEthToTssIfPayloadSizeExceeded() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactor) TestFailDepositEthToTssIfPayloadSizeExceeded(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMInboundTest.contract.Transact(opts, "testFailDepositEthToTssIfPayloadSizeExceeded") +} + +// TestFailDepositEthToTssIfPayloadSizeExceeded is a paid mutator transaction binding the contract method 0xa48abc2a. +// +// Solidity: function testFailDepositEthToTssIfPayloadSizeExceeded() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestSession) TestFailDepositEthToTssIfPayloadSizeExceeded() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestFailDepositEthToTssIfPayloadSizeExceeded(&_GatewayEVMInboundTest.TransactOpts) +} + +// TestFailDepositEthToTssIfPayloadSizeExceeded is a paid mutator transaction binding the contract method 0xa48abc2a. +// +// Solidity: function testFailDepositEthToTssIfPayloadSizeExceeded() returns() +func (_GatewayEVMInboundTest *GatewayEVMInboundTestTransactorSession) TestFailDepositEthToTssIfPayloadSizeExceeded() (*types.Transaction, error) { + return _GatewayEVMInboundTest.Contract.TestFailDepositEthToTssIfPayloadSizeExceeded(&_GatewayEVMInboundTest.TransactOpts) +} + // TestFailDepositEthToTssIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x1806a9a5. // // Solidity: function testFailDepositEthToTssIfReceiverIsZeroAddress() returns() @@ -2282,9 +2303,9 @@ type GatewayEVMInboundTestReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*GatewayEVMInboundTestReceivedRevertIterator, error) { logs, sub, err := _GatewayEVMInboundTest.contract.FilterLogs(opts, "ReceivedRevert") @@ -2294,9 +2315,9 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) FilterReceivedRever return &GatewayEVMInboundTestReceivedRevertIterator{contract: _GatewayEVMInboundTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *GatewayEVMInboundTestReceivedRevert) (event.Subscription, error) { logs, sub, err := _GatewayEVMInboundTest.contract.WatchLogs(opts, "ReceivedRevert") @@ -2331,9 +2352,9 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) WatchReceivedRevert }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) ParseReceivedRevert(log types.Log) (*GatewayEVMInboundTestReceivedRevert, error) { event := new(GatewayEVMInboundTestReceivedRevert) if err := _GatewayEVMInboundTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { @@ -2420,9 +2441,9 @@ type GatewayEVMInboundTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMInboundTestRevertedIterator, error) { var toRule []interface{} @@ -2441,9 +2462,9 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) FilterReverted(opts return &GatewayEVMInboundTestRevertedIterator{contract: _GatewayEVMInboundTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMInboundTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2487,9 +2508,9 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) WatchReverted(opts }), nil } -// ParseReverted is a log parse operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) ParseReverted(log types.Log) (*GatewayEVMInboundTestReverted, error) { event := new(GatewayEVMInboundTestReverted) if err := _GatewayEVMInboundTest.contract.UnpackLog(event, "Reverted", log); err != nil { @@ -2568,13 +2589,14 @@ func (it *GatewayEVMInboundTestUpdatedGatewayTSSAddressIterator) Close() error { // GatewayEVMInboundTestUpdatedGatewayTSSAddress represents a UpdatedGatewayTSSAddress event raised by the GatewayEVMInboundTest contract. type GatewayEVMInboundTestUpdatedGatewayTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) FilterUpdatedGatewayTSSAddress(opts *bind.FilterOpts) (*GatewayEVMInboundTestUpdatedGatewayTSSAddressIterator, error) { logs, sub, err := _GatewayEVMInboundTest.contract.FilterLogs(opts, "UpdatedGatewayTSSAddress") @@ -2584,9 +2606,9 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) FilterUpdatedGatewa return &GatewayEVMInboundTestUpdatedGatewayTSSAddressIterator{contract: _GatewayEVMInboundTest.contract, event: "UpdatedGatewayTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) WatchUpdatedGatewayTSSAddress(opts *bind.WatchOpts, sink chan<- *GatewayEVMInboundTestUpdatedGatewayTSSAddress) (event.Subscription, error) { logs, sub, err := _GatewayEVMInboundTest.contract.WatchLogs(opts, "UpdatedGatewayTSSAddress") @@ -2621,9 +2643,9 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) WatchUpdatedGateway }), nil } -// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) ParseUpdatedGatewayTSSAddress(log types.Log) (*GatewayEVMInboundTestUpdatedGatewayTSSAddress, error) { event := new(GatewayEVMInboundTestUpdatedGatewayTSSAddress) if err := _GatewayEVMInboundTest.contract.UnpackLog(event, "UpdatedGatewayTSSAddress", log); err != nil { diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go index 153562ae8..5763dc097 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -65,8 +65,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMTestMetaData contains all meta data concerning the GatewayEVMTest contract. var GatewayEVMTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveOnRevertFails\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testRevertWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgrade\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfSenderIsNotTSSUpdater\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b50620111a2806200003e6000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c806385f438c11161017b578063ce5871e1116100d8578063e6afc7901161008c578063fa18c09b11610071578063fa18c09b146104b8578063fa7626d4146104c0578063fe7bdbb2146104cd57600080fd5b8063e6afc790146104a8578063f68bd1c0146104b057600080fd5b8063dd51e82f116100bd578063dd51e82f14610471578063e20c9f7114610479578063e63ab1e91461048157600080fd5b8063ce5871e114610461578063cebad2a61461046957600080fd5b8063b0464fdc1161012f578063b5508aa911610114578063b5508aa914610439578063ba414fa614610441578063ccf206161461045957600080fd5b8063b0464fdc14610429578063b124dbf51461043157600080fd5b8063a217fddf11610160578063a217fddf146103f2578063a56f7a4b146103fa578063a783c7891461040257600080fd5b806385f438c1146103b6578063916a17c6146103dd57600080fd5b80633f7286f4116102295780635d62c860116101dd5780637d7f772a116101c25780637d7f772a146103915780637ebf744f1461039957806385226c81146103a157600080fd5b80635d62c8601461034757806366d9a9a01461037c57600080fd5b80634df42da11161020e5780634df42da11461032f57806351010e491461033757806352ff59391461033f57600080fd5b80633f7286f41461031f57806344671b941461032757600080fd5b8063130daf59116102805780631ed7831c116102655780631ed7831c146102e45780632ade3880146103025780633e5e3c231461031757600080fd5b8063130daf59146102d45780631855c337146102dc57600080fd5b806304b974f9146102b2578063070f2ad0146102bc5780630a9254e4146102c45780631226c655146102cc575b600080fd5b6102ba6104d5565b005b6102ba6106e2565b6102ba6108e3565b6102ba6112bf565b6102ba611430565b6102ba6115f7565b6102ec61176c565b6040516102f991906192ed565b60405180910390f35b61030a6117ce565b6040516102f99190619389565b6102ec611910565b6102ec611970565b6102ba6119d0565b6102ba611cd2565b6102ba611e43565b6102ba61201f565b61036e7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6040519081526020016102f9565b610384612580565b6040516102f991906194ef565b6102ba612702565b6102ba612a65565b6103a9612bda565b6040516102f991906195e9565b61036e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6103e5612caa565b6040516102f991906195fc565b61036e600081565b6102ba612da5565b61036e7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103e5612ef7565b6102ba612ff2565b6103a9613299565b610449613369565b60405190151581526020016102f9565b6102ba61343d565b6102ba61358f565b6102ba613700565b6102ba613924565b6102ec614119565b61036e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102ba614179565b6102ba6143e7565b6102ba6147dc565b601f546104499060ff1681565b6102ba614b3e565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052602854925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa79261057c926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561059657600080fd5b505af11580156105aa573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561063357600080fd5b505af1158015610647573d6000803e3d6000fd5b50506020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631cff79cd9150610697906000908590600401619693565b6000604051808303816000875af11580156106b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106de919081019061979d565b5050565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561075457600080fd5b505af1158015610768573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061083491906004016197d2565b600060405180830381600087803b15801561084e57600080fd5b505af1158015610862573d6000803e3d6000fd5b50506020546026546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063950837aa91506024015b600060405180830381600087803b1580156108c957600080fd5b505af11580156108dd573d6000803e3d6000fd5b50505050565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116301790915560278054821661123417905560288054909116615678179055604051610935906191ee565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156109ba573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040519116908190610a03906191fc565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610a36573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610b25919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614fb3565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602854602654604051929391821692911690610bb19061920a565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610bed573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546025546028546026546040519385169492831693918316921690610c4890619218565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610c8c573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560285460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610d1157600080fd5b505af1158015610d25573d6000803e3d6000fd5b50506025546028546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152911692506315d57fd49150604401600060405180830381600087803b158015610d9657600080fd5b505af1158015610daa573d6000803e3d6000fd5b50505050604051610dba90619226565b604051809103906000f080158015610dd6573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610e8257600080fd5b505af1158015610e96573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610f0c57600080fd5b505af1158015610f20573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610f8657600080fd5b505af1158015610f9a573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561100057600080fd5b505af1158015611014573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561107657600080fd5b505af115801561108a573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b1580156110fb57600080fd5b505af115801561110f573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015611185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a991906197e5565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561122a57600080fd5b505af115801561123e573d6000803e3d6000fd5b5050604080516060810182526024546001600160a01b0390811682526001602080840191825284519081018552600081529383018490528251602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190931617825551602e559093509150602f906112ba908261989b565b505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561133157600080fd5b505af1158015611345573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156113ce57600080fd5b505af11580156113e2573d6000803e3d6000fd5b50506020546040517fae7a3a6f000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063ae7a3a6f91506024016108af565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9b0a73c00000000000000000000000000000000000000000000000000000000179052602854925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa7926114d7926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b1580156114f157600080fd5b505af1158015611505573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ff3459a96000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561158f57600080fd5b505af11580156115a3573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061069792909116908590600401619693565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561166957600080fd5b505af115801561167d573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb337f378000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561170757600080fd5b505af115801561171b573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f91506024016108af565b606060168054806020026020016040519081016040528092919081815260200182805480156117c457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117a6575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561190757600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156118f057838290600052602060002001805461186390619807565b80601f016020809104026020016040519081016040528092919081815260200182805461188f90619807565b80156118dc5780601f106118b1576101008083540402835291602001916118dc565b820191906000526020600020905b8154815290600101906020018083116118bf57829003601f168201915b505050505081526020019060010190611844565b5050505081525050815260200190600101906117f2565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156117c4576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116117a6575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156117c4576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116117a6575050505050905090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611a86926001600160a01b03169160009187910161995a565b600060405180830381600087803b158015611aa057600080fd5b505af1158015611ab4573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611b4657600080fd5b505af1158015611b5a573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611c2c57600080fd5b505af1158015611c40573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611c86906000908590619982565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611575565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015611d4457600080fd5b505af1158015611d58573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611de157600080fd5b505af1158015611df5573d6000803e3d6000fd5b50506020546040517f950837aa000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063950837aa91506024016108af565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ee357600080fd5b505af1158015611ef7573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611f8057600080fd5b505af1158015611f94573d6000803e3d6000fd5b50506020546040517f14fd2d480000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506314fd2d4891508490611fe9906000908690602d90600401619a65565b6000604051808303818588803b15801561200257600080fd5b505af1158015612016573d6000803e3d6000fd5b50505050505050565b6020546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb600482015261432160248201819052916000916001600160a01b03909116906391d1485490604401602060405180830381865afa1580156120ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d291906197e5565b90506120dd81614fd2565b6020546028546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa15801561216d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219191906197e5565b905061219c8161504c565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561220e57600080fd5b505af1158015612222573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156122b457600080fd5b505af11580156122c8573d6000803e3d6000fd5b50506040516001600160a01b03861681527f7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a059250602001905060405180910390a16020546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169063950837aa90602401600060405180830381600087803b15801561236957600080fd5b505af115801561237d573d6000803e3d6000fd5b505060208054604080517f5b112591000000000000000000000000000000000000000000000000000000008152905161240e95508894506001600160a01b0390921692635b112591926004808401938290030181865afa1580156123e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124099190619a99565b61509e565b6020546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b038581166024830152909116906391d1485490604401602060405180830381865afa158015612497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bb91906197e5565b91506124c68261504c565b6020546028546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa158015612551573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257591906197e5565b90506112ba81614fd2565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561190757838290600052602060002090600202016040518060400160405290816000820180546125d790619807565b80601f016020809104026020016040519081016040528092919081815260200182805461260390619807565b80156126505780601f1061262557610100808354040283529160200191612650565b820191906000526020600020905b81548152906001019060200180831161263357829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156126ea57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116126975790505b505050505081525050815260200190600101906125a4565b604080516001808252818301909252600091816020015b60608152602001906001900390816127195790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e6472792100000000000000000000000000000000008152508160008151811061277957612779619ac2565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a816000815181106127bd576127bd619ac2565b60209081029190910101526040516001906000906127e390859085908590602401619b23565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561289657600080fd5b505af11580156128aa573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061299591906004016197d2565b600060405180830381600087803b1580156129af57600080fd5b505af11580156129c3573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350612a1792909116908590600401619693565b6000604051808303816000875af1158015612a36573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a5e919081019061979d565b5050505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612ad757600080fd5b505af1158015612aeb573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0c8dc016000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015612b7557600080fd5b505af1158015612b89573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef91506024016108af565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611907578382906000526020600020018054612c1d90619807565b80601f0160208091040260200160405190810160405280929190818152602001828054612c4990619807565b8015612c965780601f10612c6b57610100808354040283529160200191612c96565b820191906000526020600020905b815481529060010190602001808311612c7957829003601f168201915b505050505081526020019060010190612bfe565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156119075760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612d8d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612d3a5790505b50505050508152505081526020019060010190612cce565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612e1757600080fd5b505af1158015612e2b573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506116ed91906004016197d2565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156119075760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612fda57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f875790505b50505050508152505081526020019060010190612f1b565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156130d657600080fd5b505af11580156130ea573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506131d591906004016197d2565b600060405180830381600087803b1580156131ef57600080fd5b505af1158015613203573d6000803e3d6000fd5b50506020546024546027546040517fece697b30000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063ece697b3945061326393928316929091169087908790602d90600401619b5b565b600060405180830381600087803b15801561327d57600080fd5b505af1158015613291573d6000803e3d6000fd5b505050505050565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156119075783829060005260206000200180546132dc90619807565b80601f016020809104026020016040519081016040528092919081815260200182805461330890619807565b80156133555780601f1061332a57610100808354040283529160200191613355565b820191906000526020600020905b81548152906001019060200180831161333857829003601f168201915b5050505050815260200190600101906132bd565b60085460009060ff1615613381575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134369190619bb0565b1415905090565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156134af57600080fd5b505af11580156134c3573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612b5b91906004016197d2565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561369e57600080fd5b505af11580156136b2573d6000803e3d6000fd5b50506020546040517f10188aef000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b0390911692506310188aef91506024016108af565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156137a057600080fd5b505af11580156137b4573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061389f91906004016197d2565b600060405180830381600087803b1580156138b957600080fd5b505af11580156138cd573d6000803e3d6000fd5b50506020546021546040517f14fd2d480000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506314fd2d4893508692611fe99216908690602d90600401619a65565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561397d57600080fd5b505af1158015613991573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613a7c91906004016197d2565b600060405180830381600087803b158015613a9657600080fd5b505af1158015613aaa573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613afe57600080fd5b505af1158015613b12573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613b6f57600080fd5b505af1158015613b83573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613c6e91906004016197d2565b600060405180830381600087803b158015613c8857600080fd5b505af1158015613c9c573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cf057600080fd5b505af1158015613d04573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613d6157600080fd5b505af1158015613d75573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613dc957600080fd5b505af1158015613ddd573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b158015613ebf57600080fd5b505af1158015613ed3573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613f3057600080fd5b505af1158015613f44573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350613f9892909116908590600401619693565b6000604051808303816000875af1158015613fb7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613fdf919081019061979d565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561403957600080fd5b505af115801561404d573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156140a157600080fd5b505af11580156140b5573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba39250611a86916001600160a01b031690600090869060040161995a565b606060158054806020026020016040519081016040528092919081815260200182805480156117c4576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116117a6575050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561425d57600080fd5b505af1158015614271573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061435c91906004016197d2565b600060405180830381600087803b15801561437657600080fd5b505af115801561438a573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab59945061326393928316929091169087908790600401619bc9565b604080516001808252818301909252600091816020015b60608152602001906001900390816143fe5790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e6472792100000000000000000000000000000000008152508160008151811061445e5761445e619ac2565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a816000815181106144a2576144a2619ac2565b60209081029190910101526040516001906000906144c890859085908590602401619b23565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614585916001600160a01b039190911690600090869060040161995a565b600060405180830381600087803b15801561459f57600080fd5b505af11580156145b3573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561464557600080fd5b505af1158015614659573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b14693506146a092506001600160a01b0390911690879087908790619c00565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561473657600080fd5b505af115801561474a573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150614790906000908590619982565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401612995565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b03163161483b816000615127565b6021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156148c957600080fd5b505af11580156148dd573d6000803e3d6000fd5b50506020546040517fcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5935061492192506001600160a01b0390911690602d90619c48565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156149b757600080fd5b505af11580156149cb573d6000803e3d6000fd5b5050602154604051600093506001600160a01b0390911691507fbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c90614a1e90670de0b6b3a7640000908790602d90619c6a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a7f57600080fd5b505af1158015614a93573d6000803e3d6000fd5b50506020546021546040517f14fd2d480000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506314fd2d4893508792614aea9216908790602d90600401619a65565b6000604051808303818588803b158015614b0357600080fd5b505af1158015614b17573d6000803e3d6000fd5b50506021546001600160a01b03163192506108dd9150829050670de0b6b3a7640000615127565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090614b9b906000906001600160a01b031631615127565b6000848484604051602401614bb293929190619c83565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614c76916001600160a01b039190911690670de0b6b3a764000090869060040161995a565b600060405180830381600087803b158015614c9057600080fd5b505af1158015614ca4573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614d3657600080fd5b505af1158015614d4a573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa9350614d9392506001600160a01b03909116908590899089908990619cad565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614e2957600080fd5b505af1158015614e3d573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150614e8a90670de0b6b3a7640000908590619982565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614eeb57600080fd5b505af1158015614eff573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508692614f539216908690600401619693565b60006040518083038185885af1158015614f71573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052614f9a919081019061979d565b50602154612a5e9083906001600160a01b031631615127565b6000614fbd619234565b614fc884848361517f565b9150505b92915050565b6040517fa59828850000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a5982885906024015b60006040518083038186803b15801561503857600080fd5b505afa158015612a5e573d6000803e3d6000fd5b6040517f0c9fd5810000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90630c9fd58190602401615020565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f6906044015b60006040518083038186803b15801561511357600080fd5b505afa158015613291573d6000803e3d6000fd5b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044016150fb565b60008061518c85846151fa565b90506151ef6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016151da929190619693565b60405160208183030381529060405285615206565b9150505b9392505050565b60006151f38383615234565b60c0810151516000901561522a5761522384848460c0015161524f565b90506151f3565b61522384846153f5565b600061524083836154e0565b6151f383836020015184615206565b60008061525a6154ec565b9050600061526886836155bf565b9050600061527f8260600151836020015185615a65565b9050600061528f83838989615c77565b9050600061529c82616af4565b602081015181519192509060030b1561530f578982604001516040516020016152c6929190619cee565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252615306916004016197d2565b60405180910390fd5b60006153526040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616cc3565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906153a59084906004016197d2565b602060405180830381865afa1580156153c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153e69190619a99565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061544a9087906004016197d2565b600060405180830381865afa158015615467573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261548f919081019061979d565b905060006154bd82856040516020016154a9929190619d6f565b604051602081830303815290604052616ec3565b90506001600160a01b038116614fc85784846040516020016152c6929190619d9e565b6106de82826000616ed6565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90615573908490600401619e49565b600060405180830381865afa158015615590573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526155b89190810190619e90565b9250505090565b6155f16040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061563c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61564585616fd9565b60208201526000615655866173be565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615697573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156bf9190810190619e90565b868385602001516040516020016156d99493929190619ed9565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906157319085906004016197d2565b600060405180830381865afa15801561574e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157769190810190619e90565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906157be908490600401619fdd565b602060405180830381865afa1580156157db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906157ff91906197e5565b61581457816040516020016152c6919061a02f565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061585990849060040161a0c1565b600060405180830381865afa158015615876573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261589e9190810190619e90565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906158e590849060040161a113565b602060405180830381865afa158015615902573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061592691906197e5565b156159bb576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061597090849060040161a113565b600060405180830381865afa15801561598d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526159b59190810190619e90565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016159e0919061a165565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615a0c92919061a1d1565b600060405180830381865afa158015615a29573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a519190810190619e90565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615a815790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615ae157615ae1619ac2565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615b3557615b35619ac2565b602002602001018190525084604051602001615b51919061a1f6565b60405160208183030381529060405281600281518110615b7357615b73619ac2565b602002602001018190525082604051602001615b8f919061a262565b60405160208183030381529060405281600381518110615bb157615bb1619ac2565b60200260200101819052506000615bc782616af4565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615c589060408051808201825260008082526020918201528151808301909252845182528085019082015290617641565b615c6d57856040516020016152c6919061a2a3565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615cc7565b511590565b615e3b57826020015115615d83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401615306565b8260c0015115615e3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401615306565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615e5457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615eaf9061a363565b935060ff1681518110615ec457615ec4619ac2565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615f15919061a382565b604051602081830303815290604052828280615f309061a363565b935060ff1681518110615f4557615f45619ac2565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615f929061a363565b935060ff1681518110615fa757615fa7619ac2565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615ff49061a363565b935060ff168151811061600957616009619ac2565b602002602001018190525087602001518282806160259061a363565b935060ff168151811061603a5761603a619ac2565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806160879061a363565b935060ff168151811061609c5761609c619ac2565b6020908102919091010152875182826160b48161a363565b935060ff16815181106160c9576160c9619ac2565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806161169061a363565b935060ff168151811061612b5761612b619ac2565b602002602001018190525061613f466176a2565b828261614a8161a363565b935060ff168151811061615f5761615f619ac2565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806161ac9061a363565b935060ff16815181106161c1576161c1619ac2565b6020026020010181905250868282806161d99061a363565b935060ff16815181106161ee576161ee619ac2565b60209081029190910101528551156163155760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261623f8161a363565b935060ff168151811061625457616254619ac2565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906162a49089906004016197d2565b600060405180830381865afa1580156162c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162e99190810190619e90565b82826162f48161a363565b935060ff168151811061630957616309619ac2565b60200260200101819052505b8460200151156163e55760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261635e8161a363565b935060ff168151811061637357616373619ac2565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806163c09061a363565b935060ff16815181106163d5576163d5619ac2565b60200260200101819052506165ac565b61641d615cc28660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6164b05760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826164608161a363565b935060ff168151811061647557616475619ac2565b60200260200101819052508460a00151604051602001616495919061a1f6565b6040516020818303038152906040528282806163c09061a363565b8460c001511580156164f35750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526164f190511590565b155b156165ac5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826165378161a363565b935060ff168151811061654c5761654c619ac2565b602002602001018190525061656088617742565b604051602001616570919061a1f6565b60405160208183030381529060405282828061658b9061a363565b935060ff16815181106165a0576165a0619ac2565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526165e090511590565b6166755760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826166238161a363565b935060ff168151811061663857616638619ac2565b602002602001018190525084604001518282806166549061a363565b935060ff168151811061666957616669619ac2565b60200260200101819052505b6060850151156167965760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826166be8161a363565b935060ff16815181106166d3576166d3619ac2565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616742573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261676a9190810190619e90565b82826167758161a363565b935060ff168151811061678a5761678a619ac2565b60200260200101819052505b60e0850151511561683d5760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826167e08161a363565b935060ff16815181106167f5576167f5619ac2565b60200260200101819052506168118560e00151600001516176a2565b828261681c8161a363565b935060ff168151811061683157616831619ac2565b60200260200101819052505b60e085015160200151156168e75760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261688a8161a363565b935060ff168151811061689f5761689f619ac2565b60200260200101819052506168bb8560e00151602001516176a2565b82826168c68161a363565b935060ff16815181106168db576168db619ac2565b60200260200101819052505b60e085015160400151156169915760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826169348161a363565b935060ff168151811061694957616949619ac2565b60200260200101819052506169658560e00151604001516176a2565b82826169708161a363565b935060ff168151811061698557616985619ac2565b60200260200101819052505b60e08501516060015115616a3b5760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826169de8161a363565b935060ff16815181106169f3576169f3619ac2565b6020026020010181905250616a0f8560e00151606001516176a2565b8282616a1a8161a363565b935060ff1681518110616a2f57616a2f619ac2565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616a5957616a596196b5565b604051908082528060200260200182016040528015616a8c57816020015b6060815260200190600190039081616a775790505b50905060005b8260ff168160ff161015616ae557838160ff1681518110616ab557616ab5619ac2565b6020026020010151828260ff1681518110616ad257616ad2619ac2565b6020908102919091010152600101616a92565b5093505050505b949350505050565b616b1b6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91616ba19186910161a3ed565b600060405180830381865afa158015616bbe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616be69190810190619e90565b90506000616bf48683618231565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401616c2491906195e9565b6000604051808303816000875af1158015616c43573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616c6b919081019061a434565b805190915060030b15801590616c845750602081015151155b8015616c935750604081015151155b15615c6d5781600081518110616cab57616cab619ac2565b60200260200101516040516020016152c6919061a4ea565b60606000616cf88560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616d2f9082905b90618386565b15616e8c576000616dac82616da684616da0616d728a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906183ad565b9061840f565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616e10908290618386565b15616e7a57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e77905b8290618494565b90505b616e83816184ba565b925050506151f3565b8215616ea55784846040516020016152c692919061a6d6565b50506040805160208101909152600081526151f3565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616ee557505050565b6000616ef2848484618523565b90506000616eff82616af4565b602081015181519192509060030b158015616f9b5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f9b90604080518082018252600080825260209182015281518083019092528451825280850190820152616d29565b15616fa857505050505050565b60408201515115616fc85781604001516040516020016152c6919061a77d565b806040516020016152c6919061a7db565b6060600061700e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617073905b8290617641565b156170e257604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526151f3906170dd908390618abe565b6184ba565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617144905b8290618b48565b60010361721157604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171aa90616e70565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526151f3906170dd905b8390618494565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172709061706c565b156173a757604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906172d8908390618be2565b9050600081600183516172eb919061a846565b815181106172fb576172fb619ac2565b6020026020010151905061739e6170dd6173716040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618abe565b95945050505050565b826040516020016152c6919061a859565b50919050565b606060006173f38360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506174559061706c565b15617463576151f3816184ba565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174c29061713d565b60010361752c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526151f3906170dd9061720a565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261758b9061706c565b156173a757604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906175f3908390618be2565b905060018151111561762f57806002825161760e919061a846565b8151811061761e5761761e619ac2565b602002602001015192505050919050565b50826040516020016152c6919061a859565b80518251600091111561765657506000614fcc565b8151835160208501516000929161766c9161a937565b617676919061a846565b90508260200151810361768d576001915050614fcc565b82516020840151819020912014905092915050565b606060006176af83618c87565b600101905060008167ffffffffffffffff8111156176cf576176cf6196b5565b6040519080825280601f01601f1916602001820160405280156176f9576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461770357509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916177ce905b8290618d69565b1561780e57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261786d906177c7565b156178ad57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261790c906177c7565b1561794c57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179ab906177c7565b80617a105750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a10906177c7565b15617a5057505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617aaf906177c7565b80617b145750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b14906177c7565b15617b5457505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bb3906177c7565b80617c185750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c18906177c7565b15617c5857505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cb7906177c7565b80617d1c5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d1c906177c7565b15617d5c57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dbb906177c7565b15617dfb57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5a906177c7565b15617e9a57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ef9906177c7565b15617f3957505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f98906177c7565b15617fd857505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618037906177c7565b1561807757505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180d6906177c7565b8061813b5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261813b906177c7565b1561817b57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526181da906177c7565b1561821a57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516152c6929060200161a94a565b60608060005b84518110156182bc578185828151811061825357618253619ac2565b602002602001015160405160200161826c929190619d6f565b60405160208183030381529060405291506001855161828b919061a846565b81146182b457816040516020016182a2919061aab3565b60405160208183030381529060405291505b600101618237565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816182d5579050509050838160008151811061830057618300619ac2565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061835457618354619ac2565b6020026020010181905250818160028151811061837357618373619ac2565b6020908102919091010152949350505050565b60208083015183518351928401516000936183a49291849190618d7d565b14159392505050565b604080518082019091526000808252602082015260006183df8460000151856020015185600001518660200151618e8e565b90508360200151816183f1919061a846565b8451859061840090839061a846565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015618434575081614fcc565b602080830151908401516001911461845b5750815160208481015190840151829020919020145b801561848c5782518451859061847290839061a846565b905250825160208501805161848890839061a937565b9052505b509192915050565b60408051808201909152600080825260208201526184b3838383618fae565b5092915050565b60606000826000015167ffffffffffffffff8111156184db576184db6196b5565b6040519080825280601f01601f191660200182016040528015618505576020820181803683370190505b50905060006020820190506184b38185602001518660000151619059565b6060600061852f6154ec565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161854c57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806185a79061a363565b935060ff16815181106185bc576185bc619ac2565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161860d919061aaf4565b6040516020818303038152906040528282806186289061a363565b935060ff168151811061863d5761863d619ac2565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061868a9061a363565b935060ff168151811061869f5761869f619ac2565b6020026020010181905250826040516020016186bb919061a262565b6040516020818303038152906040528282806186d69061a363565b935060ff16815181106186eb576186eb619ac2565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806187389061a363565b935060ff168151811061874d5761874d619ac2565b602002602001018190525061876287846190d3565b828261876d8161a363565b935060ff168151811061878257618782619ac2565b60209081029190910101528551511561882e5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826187d48161a363565b935060ff16815181106187e9576187e9619ac2565b60200260200101819052506188028660000151846190d3565b828261880d8161a363565b935060ff168151811061882257618822619ac2565b60200260200101819052505b85608001511561889c5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826188778161a363565b935060ff168151811061888c5761888c619ac2565b6020026020010181905250618902565b84156189025760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826188e18161a363565b935060ff16815181106188f6576188f6619ac2565b60200260200101819052505b6040860151511561899e5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261894c8161a363565b935060ff168151811061896157618961619ac2565b6020026020010181905250856040015182828061897d9061a363565b935060ff168151811061899257618992619ac2565b60200260200101819052505b856060015115618a085760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826189e78161a363565b935060ff16815181106189fc576189fc619ac2565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618a2657618a266196b5565b604051908082528060200260200182016040528015618a5957816020015b6060815260200190600190039081618a445790505b50905060005b8260ff168160ff161015618ab257838160ff1681518110618a8257618a82619ac2565b6020026020010151828260ff1681518110618a9f57618a9f619ac2565b6020908102919091010152600101618a5f565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618ae3575081614fcc565b81518351602085015160009291618af99161a937565b618b03919061a846565b60208401519091506001908214618b24575082516020840151819020908220145b8015618b3f57835185518690618b3b90839061a846565b9052505b50929392505050565b6000808260000151618b6c8560000151866020015186600001518760200151618e8e565b618b76919061a937565b90505b83516020850151618b8a919061a937565b81116184b35781618b9a8161ab39565b9250508260000151618bd1856020015183618bb5919061a846565b8651618bc1919061a846565b8386600001518760200151618e8e565b618bdb919061a937565b9050618b79565b60606000618bf08484618b48565b618bfb90600161a937565b67ffffffffffffffff811115618c1357618c136196b5565b604051908082528060200260200182016040528015618c4657816020015b6060815260200190600190039081618c315790505b50905060005b8151811015616ebb57618c626170dd8686618494565b828281518110618c7457618c74619ac2565b6020908102919091010152600101618c4c565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618cd0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618cfc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618d1a57662386f26fc10000830492506010015b6305f5e1008310618d32576305f5e100830492506008015b6127108310618d4657612710830492506004015b60648310618d58576064830492506002015b600a8310614fcc5760010192915050565b6000618d758383619113565b159392505050565b600080858411618e845760208411618e305760008415618dc8576001618da486602061a846565b618daf90600861ab53565b618dba90600261ac51565b618dc4919061a846565b1990505b8351811685618dd7898961a937565b618de1919061a846565b805190935082165b818114618e1b57878411618e035787945050505050616aec565b83618e0d8161ac5d565b945050828451169050618de9565b618e25878561a937565b945050505050616aec565b838320618e3d858861a846565b618e47908761a937565b91505b858210618e8257848220808203618e6f57618e65868461a937565b9350505050616aec565b618e7a60018461a846565b925050618e4a565b505b5092949350505050565b60008381868511618f995760208511618f485760008515618eda576001618eb687602061a846565b618ec190600861ab53565b618ecc90600261ac51565b618ed6919061a846565b1990505b84518116600087618eeb8b8b61a937565b618ef5919061a846565b855190915083165b828114618f3a57818610618f2257618f158b8b61a937565b9650505050505050616aec565b85618f2c8161ab39565b965050838651169050618efd565b859650505050505050616aec565b508383206000905b618f5a868961a846565b8211618f9757858320808203618f765783945050505050616aec565b618f8160018561a937565b9350508180618f8f9061ab39565b925050618f50565b505b618fa3878761a937565b979650505050505050565b60408051808201909152600080825260208201526000618fe08560000151866020015186600001518760200151618e8e565b602080870180519186019190915251909150618ffc908261a846565b83528451602086015161900f919061a937565b810361901e5760008552619050565b8351835161902c919061a937565b8551869061903b90839061a846565b905250835161904a908261a937565b60208601525b50909392505050565b60208110619091578151835261907060208461a937565b925061907d60208361a937565b915061908a60208261a846565b9050619059565b60001981156190c05760016190a783602061a846565b6190b39061010061ac51565b6190bd919061a846565b90505b9151835183169219169190911790915250565b606060006190e184846155bf565b80516020808301516040519394506190fb9390910161ac74565b60405160208183030381529060405291505092915050565b8151815160009190811115619126575081515b6020808501519084015160005b838110156191df57825182518082146191af57600019602087101561918e5760018461916089602061a846565b61916a919061a937565b61917590600861ab53565b61918090600261ac51565b61918a919061a846565b1990505b81811683821681810391146191ac579750614fcc9650505050505050565b50505b6191ba60208661a937565b94506191c760208561a937565b935050506020816191d8919061a937565b9050619133565b5084518651615c6d919061accc565b610c9f806200aced83390190565b6112a6806200b98c83390190565b611de7806200cc3283390190565b611993806200ea1983390190565b610dc180620103ac83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161927761927c565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016192776040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561932e5783516001600160a01b0316835260209384019390920191600101619307565b509095945050505050565b60005b8381101561935457818101518382015260200161933c565b50506000910152565b60008151808452619375816020860160208601619339565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619485577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561946b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261945584865161935d565b602095860195909450929092019160010161941b565b5091975050506020948501949290920191506001016193b1565b50929695505050505050565b600081518084526020840193506020830160005b828110156194e55781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016194a5565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619485577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261955b604088018261935d565b90506020820151915086810360208801526195768183619491565b965050506020938401939190910190600101619517565b600082825180855260208501945060208160051b8301016020850160005b838110156195dd57601f198584030188526195c783835161935d565b60209889019890935091909101906001016195ab565b50909695505050505050565b6020815260006151f3602083018461958d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619485577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261967d6040870182619491565b9550506020938401939190910190600101619624565b6001600160a01b0383168152604060208201526000616aec604083018461935d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619707576197076196b5565b60405290565b60008067ffffffffffffffff841115619728576197286196b5565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619757576197576196b5565b60405283815290508082840185101561976f57600080fd5b616ebb846020830185619339565b600082601f83011261978e57600080fd5b6151f38383516020850161970d565b6000602082840312156197af57600080fd5b815167ffffffffffffffff8111156197c657600080fd5b614fc88482850161977d565b6020815260006151f3602083018461935d565b6000602082840312156197f757600080fd5b815180151581146151f357600080fd5b600181811c9082168061981b57607f821691505b6020821081036173b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f8211156112ba57806000526020600020601f840160051c8101602085101561987b5750805b601f840160051c820191505b81811015612a5e5760008155600101619887565b815167ffffffffffffffff8111156198b5576198b56196b5565b6198c9816198c38454619807565b84619854565b6020601f8211600181146198fd57600083156198e55750848201515b600019600385901b1c1916600184901b178455612a5e565b600084815260208120601f198516915b8281101561992d578785015182556020948501946001909201910161990d565b508482101561994b5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b038416815282602082015260606040820152600061739e606083018461935d565b828152604060208201526000616aec604083018461935d565b6001600160a01b0381541682526001810154602083015260006002820160606040850152600081546199cc81619807565b80606088015260018216600081146199eb5760018114619a2557619a59565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b8901019350619a59565b84600052602060002060005b83811015619a505781548a820160800152600190910190602001619a31565b89016080019450505b50919695505050505050565b6001600160a01b0384168152606060208201526000619a87606083018561935d565b8281036040840152615c6d818561999b565b600060208284031215619aab57600080fd5b81516001600160a01b03811681146151f357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b828110156194e5578151865260209586019590910190600101619b05565b606081526000619b36606083018661958d565b8281036020840152619b488186619af1565b9150508215156040830152949350505050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260a060608201526000619b9260a083018561935d565b8281036080840152619ba4818561999b565b98975050505050505050565b600060208284031215619bc257600080fd5b5051919050565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000615c6d608083018461935d565b6001600160a01b0385168152608060208201526000619c22608083018661958d565b8281036040840152619c348186619af1565b915050821515606083015295945050505050565b6001600160a01b0383168152604060208201526000616aec604083018461999b565b838152606060208201526000619a87606083018561935d565b606081526000619c96606083018661935d565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a060408201526000619cd560a083018661935d565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619d2681601a850160208801619339565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351619d6381601c840160208801619339565b01601c01949350505050565b60008351619d81818460208801619339565b835190830190619d95818360208801619339565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619dd681601a850160208801619339565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351619e13816033840160208801619339565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006151f3608083018461935d565b600060208284031215619ea257600080fd5b815167ffffffffffffffff811115619eb957600080fd5b8201601f81018413619eca57600080fd5b614fc88482516020840161970d565b60008551619eeb818460208a01619339565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619f25816001840160208a01619339565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619f63816002840160208901619339565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619fa5816002840160208801619339565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619ff0604083018461935d565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a06781601f850160208701619339565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a0d4604083018461935d565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a126604083018461935d565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a19d816014850160208701619339565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061a1e4604083018561935d565b82810360208401526151ef818561935d565b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a22e816001850160208701619339565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a274818460208701619339565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a32781604b850160208701619339565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff810361a3795761a37961a334565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a3e0816029850160208701619339565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006151f3608083018461935d565b60006020828403121561a44657600080fd5b815167ffffffffffffffff81111561a45d57600080fd5b82016060818503121561a46f57600080fd5b61a4776196e4565b81518060030b811461a48857600080fd5b8152602082015167ffffffffffffffff81111561a4a457600080fd5b61a4b08682850161977d565b602083015250604082015167ffffffffffffffff81111561a4d057600080fd5b61a4dc8682850161977d565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a548816021850160208701619339565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a734816021850160208801619339565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a77181602e840160208801619339565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a3e0816029850160208701619339565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a839816022850160208701619339565b9190910160220192915050565b81810381811115614fcc57614fcc61a334565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a89181600e850160208701619339565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115614fcc57614fcc61a334565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a982816018850160208801619339565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a9bf81601c840160208801619339565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161aac5818460208701619339565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161ab2c81601c850160208701619339565b91909101601c0192915050565b6000600019820361ab4c5761ab4c61a334565b5060010190565b8082028115828204841417614fcc57614fcc61a334565b6001815b600184111561aba55780850481111561ab895761ab8961a334565b600184161561ab9757908102905b60019390931c92800261ab6e565b935093915050565b60008261abbc57506001614fcc565b8161abc957506000614fcc565b816001811461abdf576002811461abe95761ac05565b6001915050614fcc565b60ff84111561abfa5761abfa61a334565b50506001821b614fcc565b5060208310610133831016604e8410600b841016171561ac28575081810a614fcc565b61ac35600019848461ab6a565b806000190482111561ac495761ac4961a334565b029392505050565b60006151f3838361abad565b60008161ac6c5761ac6c61a334565b506000190190565b6000835161ac86818460208801619339565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161acc0816001840160208801619339565b01600101949350505050565b81810360008312801583831316838312821617156184b3576184b361a33456fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a003360a060405234801561001057600080fd5b50604051611de7380380611de783398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611dc78339815191528261014c565b50610143600080516020611dc78339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611b50610277600039600081816101d501528181610574015281816105c9015281816107e6015261083b0152611b506000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638456cb59116100ee578063a217fddf11610097578063d9caed1211610071578063d9caed12146103e0578063e609055e146103f3578063e63ab1e914610406578063eab103df1461042d57600080fd5b8063a217fddf146103a2578063d547741f146103aa578063d936547e146103bd57600080fd5b8063950837aa116100c8578063950837aa146103695780639a5904271461037c5780639b19251a1461038f57600080fd5b80638456cb591461030157806385f438c11461030957806391d148541461033057600080fd5b806336568abe116101505780635b1125911161012a5780635b112591146102d05780635c975abb146102e35780637ab697e7146102ee57600080fd5b806336568abe1461028e5780633f4ba83a146102a1578063570618e1146102a957600080fd5b8063248a9ca311610181578063248a9ca314610224578063252f07bf146102565780632f2ff15d1461027b57600080fd5b806301ffc9a7146101a8578063116191b6146101d057806321fc65f21461020f575b600080fd5b6101bb6101b636600461155e565b610440565b60405190151581526020015b60405180910390f35b6101f77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c7565b61022261021d3660046115fe565b6104d9565b005b610248610232366004611671565b6000908152600160208190526040909120015490565b6040519081526020016101c7565b6004546101bb9074010000000000000000000000000000000000000000900460ff1681565b61022261028936600461168a565b610699565b61022261029c36600461168a565b6106c5565b610222610716565b6102487f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101f7906001600160a01b031681565b60025460ff166101bb565b6102226102fc3660046116ba565b61074b565b610222610910565b6102487f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101bb61033e36600461168a565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61022261037736600461175d565b610942565b61022261038a36600461175d565b610ac0565b61022261039d36600461175d565b610b74565b610248600081565b6102226103b836600461168a565b610c2b565b6101bb6103cb36600461175d565b60036020526000908152604090205460ff1681565b6102226103ee36600461177a565b610c51565b6102226104013660046117bb565b610d49565b6102487f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61022261043b36600461185a565b610f75565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104e1610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461050b8161100e565b610513611018565b6001600160a01b03851660009081526003602052604090205460ff16610565576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105996001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086611057565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106069088908a908990899089906004016118c0565b600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161067f93929190611903565b60405180910390a3506106926001600055565b5050505050565b600082815260016020819052604090912001546106b58161100e565b6106bf83836110cb565b50505050565b6001600160a01b0381163314610707576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610711828261115e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107408161100e565b6107486111e5565b50565b610753610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461077d8161100e565b610785611018565b6001600160a01b03861660009081526003602052604090205460ff166107d7576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61080b6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087611057565b6040517fece697b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ece697b39061087a9089908b908a908a908a908a906004016119bf565b600060405180830381600087803b15801561089457600080fd5b505af11580156108a8573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640878787876040516108f59493929190611a16565b60405180910390a3506109086001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61093a8161100e565b610748611237565b600061094d8161100e565b6001600160a01b03821661098d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546109c4907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661115e565b506004546109fc907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661115e565b50610a277f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836110cb565b50610a527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a836110cb565b50600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527f086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba9060200160405180910390a15050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610aea8161100e565b6001600160a01b038216610b2a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610b9e8161100e565b6001600160a01b038216610bde576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610c478161100e565b6106bf838361115e565b610c59610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610c838161100e565b610c8b611018565b6001600160a01b03831660009081526003602052604090205460ff16610cdd576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf16001600160a01b0384168584611057565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610d3691815260200190565b60405180910390a3506107116001600055565b610d51610fcb565b610d59611018565b60045474010000000000000000000000000000000000000000900460ff16610dad576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610dff576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a42565b9050610e9a6001600160a01b038616333087611274565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f459190611a42565b610f4f9190611a5b565b8787604051610f62959493929190611a95565b60405180910390a2506109086001600055565b6000610f808161100e565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403611007576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61074881336112ad565b60025460ff1615611055576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611324565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166111565760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104d3565b5060006104d3565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16156111565760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104d3565b6111ed6113a0565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61123f611018565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861121a3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106bf9186918216906323b872dd90608401611084565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611320576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b60006113396001600160a01b038416836113dc565b9050805160001415801561135e57508080602001905181019061135c9190611ace565b155b15610711576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611317565b60025460ff16611055576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606113ea838360006113f1565b9392505050565b60608147101561142f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611317565b600080856001600160a01b0316848660405161144b9190611aeb565b60006040518083038185875af1925050503d8060008114611488576040519150601f19603f3d011682016040523d82523d6000602084013e61148d565b606091505b509150915061149d8683836114a7565b9695505050505050565b6060826114bc576114b78261151c565b6113ea565b81511580156114d357506001600160a01b0384163b155b15611515576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611317565b50806113ea565b80511561152c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561157057600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113ea57600080fd5b6001600160a01b038116811461074857600080fd5b60008083601f8401126115c757600080fd5b50813567ffffffffffffffff8111156115df57600080fd5b6020830191508360208285010111156115f757600080fd5b9250929050565b60008060008060006080868803121561161657600080fd5b8535611621816115a0565b94506020860135611631816115a0565b935060408601359250606086013567ffffffffffffffff81111561165457600080fd5b611660888289016115b5565b969995985093965092949392505050565b60006020828403121561168357600080fd5b5035919050565b6000806040838503121561169d57600080fd5b8235915060208301356116af816115a0565b809150509250929050565b60008060008060008060a087890312156116d357600080fd5b86356116de816115a0565b955060208701356116ee816115a0565b945060408701359350606087013567ffffffffffffffff81111561171157600080fd5b61171d89828a016115b5565b909450925050608087013567ffffffffffffffff81111561173d57600080fd5b87016060818a03121561174f57600080fd5b809150509295509295509295565b60006020828403121561176f57600080fd5b81356113ea816115a0565b60008060006060848603121561178f57600080fd5b833561179a816115a0565b925060208401356117aa816115a0565b929592945050506040919091013590565b600080600080600080608087890312156117d457600080fd5b863567ffffffffffffffff8111156117eb57600080fd5b6117f789828a016115b5565b909750955050602087013561180b816115a0565b935060408701359250606087013567ffffffffffffffff81111561182e57600080fd5b61183a89828a016115b5565b979a9699509497509295939492505050565b801515811461074857600080fd5b60006020828403121561186c57600080fd5b81356113ea8161184c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b03851660208201528360408201526080606082015260006118f8608083018486611877565b979650505050505050565b83815260406020820152600061191d604083018486611877565b95945050505050565b60008135611933816115a0565b6001600160a01b03168352602082810135908401526040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261197e57600080fd5b820160208101903567ffffffffffffffff81111561199b57600080fd5b8036038213156119aa57600080fd5b6060604086015261191d606086018284611877565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006119f760a083018587611877565b8281036080840152611a098185611926565b9998505050505050505050565b848152606060208201526000611a30606083018587611877565b82810360408401526118f88185611926565b600060208284031215611a5457600080fd5b5051919050565b818103818111156104d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611aa9606083018789611877565b8560208401528281036040840152611ac2818587611877565b98975050505050505050565b600060208284031215611ae057600080fd5b81516113ea8161184c565b6000825160005b81811015611b0c5760208186018101518583015201611af2565b50600092019182525091905056fea2646970667358221220a57d389b60850bdfffcd53692f80a9c416ca5b9b4d1b7d58052beba77fb7a96b64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960045534801561001657600080fd5b5060405161199338038061199383398101604081905261003591610238565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100dd60008261016c565b506101087f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361016c565b506101337f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361016c565b5061015e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261016c565b50505050505050505061028c565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166102125760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610216565b5060005b92915050565b80516001600160a01b038116811461023357600080fd5b919050565b6000806000806080858703121561024e57600080fd5b6102578561021c565b93506102656020860161021c565b92506102736040860161021c565b91506102816060860161021c565b905092959194509250565b60805160a0516116a36102f060003960008181610220015281816106d80152818161084a01528181610b6301528181610ce40152610e060152600081816101d401528181610648015281816106ab01528181610ad30152610b3601526116a36000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80636f8b44b0116100e3578063a217fddf1161008c578063d547741f11610066578063d547741f146103cf578063d5abeb01146103e2578063e63ab1e9146103eb57600080fd5b8063a217fddf1461038d578063a783c78914610395578063afd2dce4146103bc57600080fd5b806385f438c1116100bd57806385f438c11461030d57806391d1485414610334578063950837aa1461037a57600080fd5b80636f8b44b0146102df578063743e0c9b146102f25780638456cb591461030557600080fd5b80632f2ff15d116101455780635b1125911161011f5780635b112591146102a15780635c975abb146102c15780635e3e9fef146102cc57600080fd5b80632f2ff15d1461027357806336568abe146102865780633f4ba83a1461029957600080fd5b8063116191b611610176578063116191b6146101cf57806321e093b11461021b578063248a9ca31461024257600080fd5b806301ffc9a714610192578063106e6290146101ba575b600080fd5b6101a56101a03660046111c8565b610412565b60405190151581526020015b60405180910390f35b6101cd6101c836600461123a565b6104ab565b005b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b61026561025036600461126d565b60009081526002602052604090206001015490565b6040519081526020016101b1565b6101cd610281366004611286565b610550565b6101cd610294366004611286565b61057b565b6101cd6105d4565b6003546101f69073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff166101a5565b6101cd6102da3660046112fb565b610609565b6101cd6102ed36600461126d565b61079e565b6101cd61030036600461126d565b61080d565b6101cd6108b7565b6102657f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a5610342366004611286565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cd61038836600461135d565b6108e9565b610265600081565b6102657f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101cd6103ca366004611378565b610a94565b6101cd6103dd366004611286565b610c2e565b61026560045481565b6102657f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104a557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104b3610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104dd81610c96565b6104e5610ca0565b6104f0848484610cdf565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161053891815260200190565b60405180910390a25061054b6001600055565b505050565b60008281526002602052604090206001015461056b81610c96565b6105758383610e67565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146105ca576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61054b8282610f67565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fe81610c96565b610606611026565b50565b610611610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461063b81610c96565b610643610ca0565b61066e7f00000000000000000000000000000000000000000000000000000000000000008684610cdf565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610708907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611459565b600060405180830381600087803b15801561072257600080fd5b505af1158015610736573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610784939291906114b6565b60405180910390a2506107976001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c881610c96565b6107d0610ca0565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c906020015b60405180910390a15050565b610815610ca0565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156108a357600080fd5b505af1158015610797573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108e181610c96565b6106066110a3565b60006108f481610c96565b73ffffffffffffffffffffffffffffffffffffffff8216610941576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354610985907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e49073ffffffffffffffffffffffffffffffffffffffff16610f67565b506003546109ca907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb9073ffffffffffffffffffffffffffffffffffffffff16610f67565b506109f57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610e67565b50610a207f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610e67565b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f190602001610801565b610a9c610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ac681610c96565b610ace610ca0565b610af97f00000000000000000000000000000000000000000000000000000000000000008785610cdf565b6040517fece697b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ece697b390610b95907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161157d565b600060405180830381600087803b158015610baf57600080fd5b505af1158015610bc3573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac87878786604051610c1394939291906115ee565b60405180910390a250610c266001600055565b505050505050565b600082815260026020526040902060010154610c4981610c96565b6105758383610f67565b600260005403610c8f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61060681336110fc565b60015460ff1615610cdd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d71919061161a565b610d7b9084611633565b1115610db3576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610e4a57600080fd5b505af1158015610e5e573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610efd3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016104a5565b5060006104a5565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104a5565b61102e61118c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6110ab610ca0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611079565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611188576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610cdd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156111da57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461120a57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461123557600080fd5b919050565b60008060006060848603121561124f57600080fd5b61125884611211565b95602085013595506040909401359392505050565b60006020828403121561127f57600080fd5b5035919050565b6000806040838503121561129957600080fd5b823591506112a960208401611211565b90509250929050565b60008083601f8401126112c457600080fd5b50813567ffffffffffffffff8111156112dc57600080fd5b6020830191508360208285010111156112f457600080fd5b9250929050565b60008060008060006080868803121561131357600080fd5b61131c86611211565b945060208601359350604086013567ffffffffffffffff81111561133f57600080fd5b61134b888289016112b2565b96999598509660600135949350505050565b60006020828403121561136f57600080fd5b61120a82611211565b60008060008060008060a0878903121561139157600080fd5b61139a87611211565b955060208701359450604087013567ffffffffffffffff8111156113bd57600080fd5b6113c989828a016112b2565b90955093505060608701359150608087013567ffffffffffffffff8111156113f057600080fd5b87016060818a03121561140257600080fd5b809150509295509295509295565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114ab608083018486611410565b979650505050505050565b8381526040602082015260006114d0604083018486611410565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff6114f782611211565b1682526020818101359083015260006040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261153c57600080fd5b820160208101903567ffffffffffffffff81111561155957600080fd5b80360382131561156857600080fd5b606060408601526114d0606086018284611410565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a0606082015260006115cf60a083018587611410565b82810360808401526115e181856114d9565b9998505050505050505050565b848152606060208201526000611608606083018587611410565b82810360408401526114ab81856114d9565b60006020828403121561162c57600080fd5b5051919050565b808201808211156104a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206fa68043397322d1636dba3251c7e40948706562c8e08173e2df059302eb268d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d9d806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c578063a9b0a73c146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106f9565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7fcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e53382604051610210929190610a2f565b60405180910390a150565b61022361036f565b6000610230600285610b38565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610be1565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c6b565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d2e565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d4b565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610a6d83610694565b166040820152600080602084013590508060608401525060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ab957600080fd5b830160208101903567ffffffffffffffff811115610ad657600080fd5b803603821315610ae557600080fd5b606060808501528060a0850152808260c0860137600060c0828601015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509392505050565b600082610b6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b8e578181015183820152602001610b76565b50506000910152565b60008151808452610baf816020860160208601610b73565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c1660a0830186610b97565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c61578151865260209586019590910190600101610c43565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610cfe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610ce9858351610b97565b94506020938401939190910190600101610caf565b505050508281036040840152610d148186610c2f565b915050610d25606083018415159052565b95945050505050565b600060208284031215610d4057600080fd5b81516104f681610840565b60008251610d5d818460208701610b73565b919091019291505056fea264697066735822122098725982494f2e15151404f3fbfc80b0517e09c0b3e8ae0e6602ac62c5ba8d0d64736f6c634300081a0033a264697066735822122064cbfb82a30047b24c6d6295743f8ce0d80ebdbb79b1fe985918cf4260a5b41964736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveOnRevertFails\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testRevertWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgrade\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfSenderIsNotTSSUpdater\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e82e8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c806385f438c11161017b578063ce5871e1116100d8578063e6afc7901161008c578063fa18c09b11610071578063fa18c09b146104db578063fa7626d4146104e3578063fe7bdbb2146104f057600080fd5b8063e6afc790146104cb578063f68bd1c0146104d357600080fd5b8063dd51e82f116100bd578063dd51e82f14610494578063e20c9f711461049c578063e63ab1e9146104a457600080fd5b8063ce5871e114610484578063cebad2a61461048c57600080fd5b8063b0464fdc1161012f578063b5508aa911610114578063b5508aa91461045c578063ba414fa614610464578063ccf206161461047c57600080fd5b8063b0464fdc1461044c578063b124dbf51461045457600080fd5b8063a217fddf11610160578063a217fddf14610415578063a56f7a4b1461041d578063a783c7891461042557600080fd5b806385f438c1146103d9578063916a17c61461040057600080fd5b806344671b941161022957806366d9a9a0116101dd5780637d7f772a116101c25780637d7f772a146103b45780637ebf744f146103bc57806385226c81146103c457600080fd5b806366d9a9a0146103975780637a380ebf146103ac57600080fd5b806351010e491161020e57806351010e491461035257806352ff59391461035a5780635d62c8601461036257600080fd5b806344671b94146103425780634df42da11461034a57600080fd5b80631855c337116102805780632ade3880116102655780632ade38801461031d5780633e5e3c23146103325780633f7286f41461033a57600080fd5b80631855c337146102f75780631ed7831c146102ff57600080fd5b80630a9254e4116102b15780630a9254e4146102df5780631226c655146102e7578063130daf59146102ef57600080fd5b806304b974f9146102cd578063070f2ad0146102d7575b600080fd5b6102d56104f8565b005b6102d5610709565b6102d561090f565b6102d561136a565b6102d56114df565b6102d56116ab565b610307611825565b604051610314919061a07c565b60405180910390f35b610325611887565b604051610314919061a118565b6103076119c9565b610307611a29565b6102d5611a89565b6102d5611d93565b6102d5611f08565b6102d56120e8565b6103897f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b604051908152602001610314565b61039f612669565b604051610314919061a27e565b6102d56127eb565b6102d5612e52565b6102d56131ba565b6103cc613334565b604051610314919061a378565b6103897f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610408613404565b604051610314919061a38b565b610389600081565b6102d56134ff565b6103897f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b610408613651565b6102d561374c565b6103cc6139fa565b61046c613aca565b6040519015158152602001610314565b6102d5613b9e565b6102d5613cf0565b6102d5613e65565b6102d561408e565b610307614888565b6103897f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102d56148e8565b6102d5614b5d565b6102d5614f5c565b601f5461046c9060ff1681565b6102d56152d3565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052602754925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa79261059f926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561065657600080fd5b505af115801561066a573d6000803e3d6000fd5b5050601f546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169250631cff79cd91506106be90600090859060040161a422565b6000604051808303816000875af11580156106dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610705919081019061a52c565b5050565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561077b57600080fd5b505af115801561078f573d6000803e3d6000fd5b5050602754604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061085b919060040161a561565b600060405180830381600087803b15801561087557600080fd5b505af1158015610889573d6000803e3d6000fd5b5050601f546025546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063950837aa91506024015b600060405180830381600087803b1580156108f557600080fd5b505af1158015610909573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805482166156781790556028805490911661987617905560405161096d90619f9c565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156109f2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040519116908190610a3b90619fa9565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610a6e573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152600091610b62916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052615759565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c0000000000000000000000000000000060208201526027546025549251939095048416602484015293831660448301529091166064820152919250610c0591608401610b05565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691909117909155604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c0000000000006020820152601f546024805460275460255495516101009094048716928401929092528516604483015284166064820152919092166084820152919250610d0c9160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e00000000000000000000000000000000000000000000000000000000179052615759565b602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038381169190911790915560275460405163ca669fa760e01b815291166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610d9757600080fd5b505af1158015610dab573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610e1e57600080fd5b505af1158015610e32573d6000803e3d6000fd5b50505050604051610e4290619fb6565b604051809103906000f080158015610e5e573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610f0a57600080fd5b505af1158015610f1e573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610f9457600080fd5b505af1158015610fa8573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b15801561101357600080fd5b505af1158015611027573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b15801561109257600080fd5b505af11580156110a6573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561110857600080fd5b505af115801561111c573d6000803e3d6000fd5b50506023546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561118b57600080fd5b505af115801561119f573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af1158015611213573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611237919061a574565b506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156112b857600080fd5b505af11580156112cc573d6000803e3d6000fd5b5050604080516060810182526023546001600160a01b0390811682526001602080840191825284519081018552600081529383018490528251602d8054925167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931691909316171781559093509150602e90610909908261a62a565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156113dc57600080fd5b505af11580156113f0573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561147957600080fd5b505af115801561148d573d6000803e3d6000fd5b5050601f546040517fae7a3a6f000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ae7a3a6f91506024016108db565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f660b9de000000000000000000000000000000000000000000000000000000000179052602754925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa792611586926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b1580156115a057600080fd5b505af11580156115b4573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ff3459a96000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561163e57600080fd5b505af1158015611652573d6000803e3d6000fd5b5050601f546020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b039081169450631cff79cd93506106be92911690859060040161a422565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561171d57600080fd5b505af1158015611731573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb337f378000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156117bb57600080fd5b505af11580156117cf573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f91506024016108db565b6060601680548060200260200160405190810160405280929190818152602001828054801561187d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161185f575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156119c057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156119a957838290600052602060002001805461191c9061a596565b80601f01602080910402602001604051908101604052809291908181526020018280546119489061a596565b80156119955780601f1061196a57610100808354040283529160200191611995565b820191906000526020600020905b81548152906001019060200180831161197857829003601f168201915b5050505050815260200190600101906118fd565b5050505081525050815260200190600101906118ab565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561187d576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161185f575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561187d576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161185f575050505050905090565b604080516004808252602482018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611b3e926001600160a01b03169160009187910161a6e9565b600060405180830381600087803b158015611b5857600080fd5b505af1158015611b6c573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611bfe57600080fd5b505af1158015611c12573d6000803e3d6000fd5b5050601f546040516101009091046001600160a01b031681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09250602001905060405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611ced57600080fd5b505af1158015611d01573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611d4790600090859061a711565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611624565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015611e0557600080fd5b505af1158015611e19573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611ea257600080fd5b505af1158015611eb6573d6000803e3d6000fd5b5050601f546040517f950837aa000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063950837aa91506024016108db565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611fa857600080fd5b505af1158015611fbc573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561204557600080fd5b505af1158015612059573d6000803e3d6000fd5b5050601f546040517ff7ad60db0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316925063f7ad60db915084906120b2906000908690602d9060040161a7ff565b6000604051808303818588803b1580156120cb57600080fd5b505af11580156120df573d6000803e3d6000fd5b50505050505050565b601f546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb600482015261432160248201819052916000916101009091046001600160a01b0316906391d1485490604401602060405180830381865afa15801561217b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219f919061a574565b90506121aa81615778565b601f546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b0391821660248201526000926101009004909116906391d1485490604401602060405180830381865afa15801561223e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612262919061a574565b905061226d816157f2565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156122df57600080fd5b505af11580156122f3573d6000803e3d6000fd5b5050601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561238957600080fd5b505af115801561239d573d6000803e3d6000fd5b5050602754604080516001600160a01b03928316815291871660208301527f3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579935001905060405180910390a1601f546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526101009092049091169063950837aa90602401600060405180830381600087803b15801561244f57600080fd5b505af1158015612463573d6000803e3d6000fd5b505050506124e783601f60019054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e2919061a833565b615844565b601f546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b038581166024830152610100909204909116906391d1485490604401602060405180830381865afa158015612576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259a919061a574565b91506125a5826157f2565b601f546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b03918216602482015261010090920416906391d1485490604401602060405180830381865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612659919061a574565b905061266481615778565b505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156119c057838290600052602060002090600202016040518060400160405290816000820180546126c09061a596565b80601f01602080910402602001604051908101604052809291908181526020018280546126ec9061a596565b80156127395780601f1061270e57610100808354040283529160200191612739565b820191906000526020600020905b81548152906001019060200180831161271c57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156127d357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127805790505b5050505050815250508152602001906001019061268d565b601f54604080518082018252601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000602080830191909152825190810190925260008252602554612850936001600160a01b0361010090910481169391166158cd565b601f54604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516101009092046001600160a01b031691600091839163dda79b75916004808201926020929091908290030181865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e0919061a833565b90506000601f60019054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295b919061a833565b604080518082018252600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152905191925090602a90600190670de0b6b3a7640000906000906129b99086908690869060240161a85c565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f97000000000000000000000000000000000000000000000000000000001790525490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612a74916001600160a01b0391909116908690869060040161a6e9565b600060405180830381600087803b158015612a8e57600080fd5b505af1158015612aa2573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612b3457600080fd5b505af1158015612b48573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031683878787604051612b9895949392919061a886565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612c3257600080fd5b505af1158015612c46573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e85469150612c8b908590859061a711565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cec57600080fd5b505af1158015612d00573d6000803e3d6000fd5b50506020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b03808d169450631cff79cd93508692612d5292911690869060040161a422565b60006040518083038185885af1158015612d70573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612d99919081019061a52c565b50612df187601f60019054906101000a90046001600160a01b03166001600160a01b031663dda79b756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124be573d6000803e3d6000fd5b612e4886601f60019054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124be573d6000803e3d6000fd5b5050505050505050565b604080516001808252818301909252600091816020015b6060815260200190600190039081612e695790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110612ec957612ec961a8c7565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110612f0d57612f0d61a8c7565b6020908102919091010152604051600190600090612f339085908590859060240161a928565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612fe657600080fd5b505af1158015612ffa573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506130e5919060040161a561565b600060405180830381600087803b1580156130ff57600080fd5b505af1158015613113573d6000803e3d6000fd5b5050601f546020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b039081169450631cff79cd935061316c92911690859060040161a422565b6000604051808303816000875af115801561318b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131b3919081019061a52c565b5050505050565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561322c57600080fd5b505af1158015613240573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0c8dc016000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156132ca57600080fd5b505af11580156132de573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef91506024016108db565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156119c05783829060005260206000200180546133779061a596565b80601f01602080910402602001604051908101604052809291908181526020018280546133a39061a596565b80156133f05780601f106133c5576101008083540402835291602001916133f0565b820191906000526020600020905b8154815290600101906020018083116133d357829003601f168201915b505050505081526020019060010190613358565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156119c05760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156134e757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116134945790505b50505050508152505081526020019060010190613428565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561357157600080fd5b505af1158015613585573d6000803e3d6000fd5b5050602754604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506117a1919060040161a561565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156119c05760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561373457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116136e15790505b50505050508152505081526020019060010190613675565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561383257600080fd5b505af1158015613846573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613931919060040161a561565b600060405180830381600087803b15801561394b57600080fd5b505af115801561395f573d6000803e3d6000fd5b5050601f546023546026546040517fd0b492c30000000000000000000000000000000000000000000000000000000081526101009093046001600160a01b03908116955063d0b492c394506139c4939281169291169087908790602d9060040161a960565b600060405180830381600087803b1580156139de57600080fd5b505af11580156139f2573d6000803e3d6000fd5b505050505050565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156119c0578382906000526020600020018054613a3d9061a596565b80601f0160208091040260200160405190810160405280929190818152602001828054613a699061a596565b8015613ab65780601f10613a8b57610100808354040283529160200191613ab6565b820191906000526020600020905b815481529060010190602001808311613a9957829003601f168201915b505050505081526020019060010190613a1e565b60085460009060ff1615613ae2575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b97919061a9b5565b1415905090565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015613c1057600080fd5b505af1158015613c24573d6000803e3d6000fd5b5050602754604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506132b0919060040161a561565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015613d6257600080fd5b505af1158015613d76573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613dff57600080fd5b505af1158015613e13573d6000803e3d6000fd5b5050601f546040517f10188aef000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b031692506310188aef91506024016108db565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f0557600080fd5b505af1158015613f19573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614004919060040161a561565b600060405180830381600087803b15801561401e57600080fd5b505af1158015614032573d6000803e3d6000fd5b5050601f546020546040517ff7ad60db0000000000000000000000000000000000000000000000000000000081526001600160a01b036101009093048316945063f7ad60db935086926120b29216908690602d9060040161a7ff565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156140e757600080fd5b505af11580156140fb573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506141e6919060040161a561565b600060405180830381600087803b15801561420057600080fd5b505af1158015614214573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561426857600080fd5b505af115801561427c573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156142d957600080fd5b505af11580156142ed573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506143d8919060040161a561565b600060405180830381600087803b1580156143f257600080fd5b505af1158015614406573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561445a57600080fd5b505af115801561446e573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156144cb57600080fd5b505af11580156144df573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561453357600080fd5b505af1158015614547573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b15801561462957600080fd5b505af115801561463d573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561469a57600080fd5b505af11580156146ae573d6000803e3d6000fd5b5050601f546020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b039081169450631cff79cd935061470792911690859060040161a422565b6000604051808303816000875af1158015614726573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261474e919081019061a52c565b5060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156147a857600080fd5b505af11580156147bc573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561481057600080fd5b505af1158015614824573d6000803e3d6000fd5b50506020546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba39250611b3e916001600160a01b031690600090869060040161a6e9565b6060601580548060200260200160405190810160405280929190818152602001828054801561187d576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161185f575050505050905090565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156149ce57600080fd5b505af11580156149e2573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614acd919060040161a561565b600060405180830381600087803b158015614ae757600080fd5b505af1158015614afb573d6000803e3d6000fd5b5050601f546023546026546040517f5131ab590000000000000000000000000000000000000000000000000000000081526101009093046001600160a01b039081169550635131ab5994506139c493928116929116908790879060040161a9ce565b604080516001808252818301909252600091816020015b6060815260200190600190039081614b745790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110614bd457614bd461a8c7565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110614c1857614c1861a8c7565b6020908102919091010152604051600190600090614c3e9085908590859060240161a928565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf000000000000000000000000000000000000000000000000000000001790525490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614cfa916001600160a01b039190911690600090869060040161a6e9565b600060405180830381600087803b158015614d1457600080fd5b505af1158015614d28573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614dba57600080fd5b505af1158015614dce573d6000803e3d6000fd5b505050507f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146601f60019054906101000a90046001600160a01b0316858585604051614e1c949392919061aa05565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614eb657600080fd5b505af1158015614eca573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150614f1090600090859061a711565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024016130e5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051601f198184030181529190526020549091506001600160a01b031631614fc08160006158e2565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561504e57600080fd5b505af1158015615062573d6000803e3d6000fd5b505050507f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e601f60019054906101000a90046001600160a01b0316602d6040516150ad92919061aa4d565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561514757600080fd5b505af115801561515b573d6000803e3d6000fd5b5050602054604051600093506001600160a01b0390911691507f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436906151ae90670de0b6b3a7640000908790602d9061aa6f565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561520f57600080fd5b505af1158015615223573d6000803e3d6000fd5b5050601f546020546040517ff7ad60db0000000000000000000000000000000000000000000000000000000081526001600160a01b036101009093048316945063f7ad60db9350879261527f9216908790602d9060040161a7ff565b6000604051808303818588803b15801561529857600080fd5b505af11580156152ac573d6000803e3d6000fd5b50506020546001600160a01b03163192506109099150829050670de0b6b3a76400006158e2565b60408051808201909152600f81527f48656c6c6f2c20466f756e64727921000000000000000000000000000000000060208083019190915254602a90600190670de0b6b3a764000090615332906000906001600160a01b0316316158e2565b60008484846040516024016153499392919061a85c565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f97000000000000000000000000000000000000000000000000000000001790525490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161540c916001600160a01b039190911690670de0b6b3a764000090869060040161a6e9565b600060405180830381600087803b15801561542657600080fd5b505af115801561543a573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156154cc57600080fd5b505af11580156154e0573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b03168387878760405161553095949392919061a886565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156155ca57600080fd5b505af11580156155de573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061562b90670de0b6b3a764000090859061a711565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561568c57600080fd5b505af11580156156a0573d6000803e3d6000fd5b5050601f546020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd935086926156f9921690869060040161a422565b60006040518083038185885af1158015615717573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052615740919081019061a52c565b506020546131b39083906001600160a01b0316316158e2565b6000615763619fc3565b61576e84848361593a565b9150505b92915050565b6040517fa59828850000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a5982885906024015b60006040518083038186803b1580156157de57600080fd5b505afa1580156131b3573d6000803e3d6000fd5b6040517f0c9fd5810000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90630c9fd581906024016157c6565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f6906044015b60006040518083038186803b1580156158b957600080fd5b505afa1580156139f2573d6000803e3d6000fd5b6158d5619fc3565b6131b385858584866159b5565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044016158a1565b6000806159478584615ab5565b90506159aa6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161599592919061a422565b60405160208183030381529060405285615ac1565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015615a2757600080fd5b505af1925050508015615a38575060015b615a4d57615a4887878787615aef565b6120df565b615a5987878787615aef565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015615a9457600080fd5b505af1158015615aa8573d6000803e3d6000fd5b5050505050505050505050565b60006159ae8383615b08565b60c08101515160009015615ae557615ade84848460c00151615b23565b90506159ae565b615ade8484615cc9565b6000615afb8483615db4565b90506131b3858285615dc0565b6000615b14838361618a565b6159ae83836020015184615ac1565b600080615b2e616196565b90506000615b3c8683616269565b90506000615b53826060015183602001518561670f565b90506000615b6383838989616921565b90506000615b708261779e565b602081015181519192509060030b15615be357898260400151604051602001615b9a92919061aa88565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252615bda9160040161a561565b60405180910390fd5b6000615c266040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161796d565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90615c7990849060040161a561565b602060405180830381865afa158015615c96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615cba919061a833565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590615d1e90879060040161a561565b600060405180830381865afa158015615d3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d63919081019061a52c565b90506000615d918285604051602001615d7d92919061ab09565b604051602081830303815290604052617b6d565b90506001600160a01b03811661576e578484604051602001615b9a92919061ab38565b6000615b148383617b80565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015615e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615e80919061a9b5565b905080616027576000615e9286617b8c565b604080518082018252600581527f352e302e3000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615f1d905b60408051808201825260008082526020918201528151808301909252845182528085019082015290617c84565b80615f29575060008451115b15615fac576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef28690615f75908890889060040161a422565b600060405180830381600087803b158015615f8f57600080fd5b505af1158015615fa3573d6000803e3d6000fd5b50505050616021565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561600857600080fd5b505af115801561601c573d6000803e3d6000fd5b505050505b506131b3565b80600061603382617b8c565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061609590615ef0565b806160a1575060008551115b15616126576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d906160ef908a908a908a9060040161abe3565b600060405180830381600087803b15801561610957600080fd5b505af115801561611d573d6000803e3d6000fd5b505050506120df565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015615a9457600080fd5b61070582826000617c98565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061621d90849060040161ac14565b600060405180830381865afa15801561623a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616262919081019061ac5b565b9250505090565b61629b6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506162e66040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6162ef85617d9b565b602082015260006162ff86618180565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616341573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616369919081019061ac5b565b86838560200151604051602001616383949392919061aca4565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906163db90859060040161a561565b600060405180830381865afa1580156163f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616420919081019061ac5b565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061646890849060040161ada8565b602060405180830381865afa158015616485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906164a9919061a574565b6164be5781604051602001615b9a919061adfa565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061650390849060040161ae8c565b600060405180830381865afa158015616520573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616548919081019061ac5b565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061658f90849060040161aede565b602060405180830381865afa1580156165ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906165d0919061a574565b15616665576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061661a90849060040161aede565b600060405180830381865afa158015616637573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261665f919081019061ac5b565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161668a919061af30565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016166b692919061af9c565b600060405180830381865afa1580156166d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526166fb919081019061ac5b565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161672b5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061678b5761678b61a8c7565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106167df576167df61a8c7565b6020026020010181905250846040516020016167fb919061afc1565b6040516020818303038152906040528160028151811061681d5761681d61a8c7565b602002602001018190525082604051602001616839919061b02d565b6040516020818303038152906040528160038151811061685b5761685b61a8c7565b602002602001018190525060006168718261779e565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506169029060408051808201825260008082526020918201528151808301909252845182528085019082015290618403565b6169175785604051602001615b9a919061b06e565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616971565b511590565b616ae557826020015115616a2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401615bda565b8260c0015115616ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401615bda565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616afe57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616b599061b12e565b935060ff1681518110616b6e57616b6e61a8c7565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616bbf919061b14d565b604051602081830303815290604052828280616bda9061b12e565b935060ff1681518110616bef57616bef61a8c7565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616c3c9061b12e565b935060ff1681518110616c5157616c5161a8c7565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616c9e9061b12e565b935060ff1681518110616cb357616cb361a8c7565b60200260200101819052508760200151828280616ccf9061b12e565b935060ff1681518110616ce457616ce461a8c7565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616d319061b12e565b935060ff1681518110616d4657616d4661a8c7565b602090810291909101015287518282616d5e8161b12e565b935060ff1681518110616d7357616d7361a8c7565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280616dc09061b12e565b935060ff1681518110616dd557616dd561a8c7565b6020026020010181905250616de946618464565b8282616df48161b12e565b935060ff1681518110616e0957616e0961a8c7565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280616e569061b12e565b935060ff1681518110616e6b57616e6b61a8c7565b602002602001018190525086828280616e839061b12e565b935060ff1681518110616e9857616e9861a8c7565b6020908102919091010152855115616fbf5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282616ee98161b12e565b935060ff1681518110616efe57616efe61a8c7565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616f4e90899060040161a561565b600060405180830381865afa158015616f6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616f93919081019061ac5b565b8282616f9e8161b12e565b935060ff1681518110616fb357616fb361a8c7565b60200260200101819052505b84602001511561708f5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826170088161b12e565b935060ff168151811061701d5761701d61a8c7565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061706a9061b12e565b935060ff168151811061707f5761707f61a8c7565b6020026020010181905250617256565b6170c761696c8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61715a5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261710a8161b12e565b935060ff168151811061711f5761711f61a8c7565b60200260200101819052508460a0015160405160200161713f919061afc1565b60405160208183030381529060405282828061706a9061b12e565b8460c0015115801561719d57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261719b90511590565b155b156172565760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826171e18161b12e565b935060ff16815181106171f6576171f661a8c7565b602002602001018190525061720a88618504565b60405160200161721a919061afc1565b6040516020818303038152906040528282806172359061b12e565b935060ff168151811061724a5761724a61a8c7565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261728a90511590565b61731f5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826172cd8161b12e565b935060ff16815181106172e2576172e261a8c7565b602002602001018190525084604001518282806172fe9061b12e565b935060ff16815181106173135761731361a8c7565b60200260200101819052505b6060850151156174405760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826173688161b12e565b935060ff168151811061737d5761737d61a8c7565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156173ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617414919081019061ac5b565b828261741f8161b12e565b935060ff16815181106174345761743461a8c7565b60200260200101819052505b60e085015151156174e75760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261748a8161b12e565b935060ff168151811061749f5761749f61a8c7565b60200260200101819052506174bb8560e0015160000151618464565b82826174c68161b12e565b935060ff16815181106174db576174db61a8c7565b60200260200101819052505b60e085015160200151156175915760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826175348161b12e565b935060ff16815181106175495761754961a8c7565b60200260200101819052506175658560e0015160200151618464565b82826175708161b12e565b935060ff16815181106175855761758561a8c7565b60200260200101819052505b60e0850151604001511561763b5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826175de8161b12e565b935060ff16815181106175f3576175f361a8c7565b602002602001018190525061760f8560e0015160400151618464565b828261761a8161b12e565b935060ff168151811061762f5761762f61a8c7565b60200260200101819052505b60e085015160600151156176e55760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826176888161b12e565b935060ff168151811061769d5761769d61a8c7565b60200260200101819052506176b98560e0015160600151618464565b82826176c48161b12e565b935060ff16815181106176d9576176d961a8c7565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156177035761770361a444565b60405190808252806020026020018201604052801561773657816020015b60608152602001906001900390816177215790505b50905060005b8260ff168160ff16101561778f57838160ff168151811061775f5761775f61a8c7565b6020026020010151828260ff168151811061777c5761777c61a8c7565b602090810291909101015260010161773c565b5093505050505b949350505050565b6177c56040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161784b9186910161b1b8565b600060405180830381865afa158015617868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617890919081019061ac5b565b9050600061789e8683618ff3565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016178ce919061a378565b6000604051808303816000875af11580156178ed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617915919081019061b1ff565b805190915060030b1580159061792e5750602081015151155b801561793d5750604081015151155b1561691757816000815181106179555761795561a8c7565b6020026020010151604051602001615b9a919061b2b5565b606060006179a28560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506179d99082905b90619148565b15617b36576000617a5682617a5084617a4a617a1c8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061916f565b906191d1565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617aba908290619148565b15617b2457604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b21905b8290619256565b90505b617b2d8161927c565b925050506159ae565b8215617b4f578484604051602001615b9a92919061b4a1565b50506040805160208101909152600081526159ae565b509392505050565b6000808251602084016000f09392505050565b61070582826001617c98565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691617c01919061b548565b600060405180830381855afa9150503d8060008114617c3c576040519150601f19603f3d011682016040523d82523d6000602084013e617c41565b606091505b5091509150818015617c54575060208151115b15617c6d5780806020019051810190617796919061ac5b565b505060408051602081019091526000815292915050565b6000617c9083836192e5565b159392505050565b8160a0015115617ca757505050565b6000617cb48484846193c0565b90506000617cc18261779e565b602081015181519192509060030b158015617d5d5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d5d906040805180820182526000808252602091820152815180830190925284518252808501908201526179d3565b15617d6a57505050505050565b60408201515115617d8a578160400151604051602001615b9a919061b564565b80604051602001615b9a919061b5c2565b60606000617dd08360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617e35905b8290618403565b15617ea457604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159ae90617e9f90839061995b565b61927c565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f06905b82906199e5565b600103617fd357604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f6c90617b1a565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159ae90617e9f905b8390619256565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261803290617e2e565b1561816957604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061809a908390619a7f565b9050600081600183516180ad919061b62d565b815181106180bd576180bd61a8c7565b60200260200101519050618160617e9f6181336040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061995b565b95945050505050565b82604051602001615b9a919061b640565b50919050565b606060006181b58360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061821790617e2e565b15618225576159ae8161927c565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261828490617eff565b6001036182ee57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159ae90617e9f90617fcc565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261834d90617e2e565b1561816957604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906183b5908390619a7f565b90506001815111156183f15780600282516183d0919061b62d565b815181106183e0576183e061a8c7565b602002602001015192505050919050565b5082604051602001615b9a919061b640565b80518251600091111561841857506000615772565b8151835160208501516000929161842e9161b71e565b618438919061b62d565b90508260200151810361844f576001915050615772565b82516020840151819020912014905092915050565b6060600061847183619b24565b600101905060008167ffffffffffffffff8111156184915761849161a444565b6040519080825280601f01601f1916602001820160405280156184bb576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846184c557509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618590905b8290617c84565b156185d057505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261862f90618589565b1561866f57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526186ce90618589565b1561870e57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261876d90618589565b806187d25750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187d290618589565b1561881257505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261887190618589565b806188d65750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188d690618589565b1561891657505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261897590618589565b806189da5750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189da90618589565b15618a1a57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a7990618589565b80618ade5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ade90618589565b15618b1e57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b7d90618589565b15618bbd57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c1c90618589565b15618c5c57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cbb90618589565b15618cfb57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d5a90618589565b15618d9a57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618df990618589565b15618e3957505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e9890618589565b80618efd5750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618efd90618589565b15618f3d57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f9c90618589565b15618fdc57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151615b9a929060200161b731565b60608060005b845181101561907e57818582815181106190155761901561a8c7565b602002602001015160405160200161902e92919061ab09565b60405160208183030381529060405291506001855161904d919061b62d565b81146190765781604051602001619064919061b89a565b60405160208183030381529060405291505b600101618ff9565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161909757905050905083816000815181106190c2576190c261a8c7565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106191165761911661a8c7565b602002602001018190525081816002815181106191355761913561a8c7565b6020908102919091010152949350505050565b60208083015183518351928401516000936191669291849190619c06565b14159392505050565b604080518082019091526000808252602082015260006191a18460000151856020015185600001518660200151619d17565b90508360200151816191b3919061b62d565b845185906191c290839061b62d565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156191f6575081615772565b602080830151908401516001911461921d5750815160208481015190840151829020919020145b801561924e5782518451859061923490839061b62d565b905250825160208501805161924a90839061b71e565b9052505b509192915050565b6040805180820190915260008082526020820152619275838383619e37565b5092915050565b60606000826000015167ffffffffffffffff81111561929d5761929d61a444565b6040519080825280601f01601f1916602001820160405280156192c7576020820181803683370190505b50905060006020820190506192758185602001518660000151619ee2565b81518151600091908111156192f8575081515b6020808501519084015160005b838110156193b157825182518082146193815760001960208710156193605760018461933289602061b62d565b61933c919061b71e565b61934790600861b8db565b61935290600261b9d9565b61935c919061b62d565b1990505b818116838216818103911461937e5797506157729650505050505050565b50505b61938c60208661b71e565b945061939960208561b71e565b935050506020816193aa919061b71e565b9050619305565b5084518651616917919061b9e5565b606060006193cc616196565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816193e957905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806194449061b12e565b935060ff16815181106194595761945961a8c7565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016194aa919061ba05565b6040516020818303038152906040528282806194c59061b12e565b935060ff16815181106194da576194da61a8c7565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806195279061b12e565b935060ff168151811061953c5761953c61a8c7565b602002602001018190525082604051602001619558919061b02d565b6040516020818303038152906040528282806195739061b12e565b935060ff16815181106195885761958861a8c7565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806195d59061b12e565b935060ff16815181106195ea576195ea61a8c7565b60200260200101819052506195ff8784619f5c565b828261960a8161b12e565b935060ff168151811061961f5761961f61a8c7565b6020908102919091010152855151156196cb5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826196718161b12e565b935060ff16815181106196865761968661a8c7565b602002602001018190525061969f866000015184619f5c565b82826196aa8161b12e565b935060ff16815181106196bf576196bf61a8c7565b60200260200101819052505b8560800151156197395760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826197148161b12e565b935060ff16815181106197295761972961a8c7565b602002602001018190525061979f565b841561979f5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261977e8161b12e565b935060ff16815181106197935761979361a8c7565b60200260200101819052505b6040860151511561983b5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826197e98161b12e565b935060ff16815181106197fe576197fe61a8c7565b6020026020010181905250856040015182828061981a9061b12e565b935060ff168151811061982f5761982f61a8c7565b60200260200101819052505b8560600151156198a55760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826198848161b12e565b935060ff16815181106198995761989961a8c7565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156198c3576198c361a444565b6040519080825280602002602001820160405280156198f657816020015b60608152602001906001900390816198e15790505b50905060005b8260ff168160ff16101561994f57838160ff168151811061991f5761991f61a8c7565b6020026020010151828260ff168151811061993c5761993c61a8c7565b60209081029190910101526001016198fc565b50979650505050505050565b6040805180820190915260008082526020820152815183511015619980575081615772565b815183516020850151600092916199969161b71e565b6199a0919061b62d565b602084015190915060019082146199c1575082516020840151819020908220145b80156199dc578351855186906199d890839061b62d565b9052505b50929392505050565b6000808260000151619a098560000151866020015186600001518760200151619d17565b619a13919061b71e565b90505b83516020850151619a27919061b71e565b81116192755781619a378161ba4a565b9250508260000151619a6e856020015183619a52919061b62d565b8651619a5e919061b62d565b8386600001518760200151619d17565b619a78919061b71e565b9050619a16565b60606000619a8d84846199e5565b619a9890600161b71e565b67ffffffffffffffff811115619ab057619ab061a444565b604051908082528060200260200182016040528015619ae357816020015b6060815260200190600190039081619ace5790505b50905060005b8151811015617b6557619aff617e9f8686619256565b828281518110619b1157619b1161a8c7565b6020908102919091010152600101619ae9565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619b6d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619b99576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619bb757662386f26fc10000830492506010015b6305f5e1008310619bcf576305f5e100830492506008015b6127108310619be357612710830492506004015b60648310619bf5576064830492506002015b600a83106157725760010192915050565b600080858411619d0d5760208411619cb95760008415619c51576001619c2d86602061b62d565b619c3890600861b8db565b619c4390600261b9d9565b619c4d919061b62d565b1990505b8351811685619c60898961b71e565b619c6a919061b62d565b805190935082165b818114619ca457878411619c8c5787945050505050617796565b83619c968161ba64565b945050828451169050619c72565b619cae878561b71e565b945050505050617796565b838320619cc6858861b62d565b619cd0908761b71e565b91505b858210619d0b57848220808203619cf857619cee868461b71e565b9350505050617796565b619d0360018461b62d565b925050619cd3565b505b5092949350505050565b60008381868511619e225760208511619dd15760008515619d63576001619d3f87602061b62d565b619d4a90600861b8db565b619d5590600261b9d9565b619d5f919061b62d565b1990505b84518116600087619d748b8b61b71e565b619d7e919061b62d565b855190915083165b828114619dc357818610619dab57619d9e8b8b61b71e565b9650505050505050617796565b85619db58161ba4a565b965050838651169050619d86565b859650505050505050617796565b508383206000905b619de3868961b62d565b8211619e2057858320808203619dff5783945050505050617796565b619e0a60018561b71e565b9350508180619e189061ba4a565b925050619dd9565b505b619e2c878761b71e565b979650505050505050565b60408051808201909152600080825260208201526000619e698560000151866020015186600001518760200151619d17565b602080870180519186019190915251909150619e85908261b62d565b835284516020860151619e98919061b71e565b8103619ea75760008552619ed9565b83518351619eb5919061b71e565b85518690619ec490839061b62d565b9052508351619ed3908261b71e565b60208601525b50909392505050565b60208110619f1a5781518352619ef960208461b71e565b9250619f0660208361b71e565b9150619f1360208261b62d565b9050619ee2565b6000198115619f49576001619f3083602061b62d565b619f3c9061010061b9d9565b619f46919061b62d565b90505b9151835183169219169190911790915250565b60606000619f6a8484616269565b8051602080830151604051939450619f849390910161ba7b565b60405160208183030381529060405291505092915050565b610c9f8061bad483390190565b6112a68061c77383390190565b610de08061da1983390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a00661a00b565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a0066040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a0bd5783516001600160a01b031683526020938401939092019160010161a096565b509095945050505050565b60005b8381101561a0e357818101518382015260200161a0cb565b50506000910152565b6000815180845261a10481602086016020860161a0c8565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a214577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a1fa577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a1e484865161a0ec565b602095860195909450929092019160010161a1aa565b50919750505060209485019492909201915060010161a140565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a2745781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a234565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a214577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a2ea604088018261a0ec565b905060208201519150868103602088015261a305818361a220565b96505050602093840193919091019060010161a2a6565b600082825180855260208501945060208160051b8301016020850160005b8381101561a36c57601f1985840301885261a35683835161a0ec565b602098890198909350919091019060010161a33a565b50909695505050505050565b6020815260006159ae602083018461a31c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a214577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a40c604087018261a220565b955050602093840193919091019060010161a3b3565b6001600160a01b0383168152604060208201526000617796604083018461a0ec565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561a4965761a49661a444565b60405290565b60008067ffffffffffffffff84111561a4b75761a4b761a444565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a4e65761a4e661a444565b60405283815290508082840185101561a4fe57600080fd5b617b6584602083018561a0c8565b600082601f83011261a51d57600080fd5b6159ae8383516020850161a49c565b60006020828403121561a53e57600080fd5b815167ffffffffffffffff81111561a55557600080fd5b61576e8482850161a50c565b6020815260006159ae602083018461a0ec565b60006020828403121561a58657600080fd5b815180151581146159ae57600080fd5b600181811c9082168061a5aa57607f821691505b60208210810361817a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561266457806000526020600020601f840160051c8101602085101561a60a5750805b601f840160051c820191505b818110156131b3576000815560010161a616565b815167ffffffffffffffff81111561a6445761a64461a444565b61a6588161a652845461a596565b8461a5e3565b6020601f82116001811461a68c576000831561a6745750848201515b600019600385901b1c1916600184901b1784556131b3565b600084815260208120601f198516915b8281101561a6bc578785015182556020948501946001909201910161a69c565b508482101561a6da5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b0384168152826020820152606060408201526000618160606083018461a0ec565b828152604060208201526000617796604083018461a0ec565b600081546001600160a01b038116845267ffffffffffffffff8160a01c1660208501525060018201606060408501526000815461a7668161a596565b806060880152600182166000811461a785576001811461a7bf5761a7f3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b890101935061a7f3565b84600052602060002060005b8381101561a7ea5781548a82016080015260019091019060200161a7cb565b89016080019450505b50919695505050505050565b6001600160a01b038416815260606020820152600061a821606083018561a0ec565b8281036040840152616917818561a72a565b60006020828403121561a84557600080fd5b81516001600160a01b03811681146159ae57600080fd5b60608152600061a86f606083018661a0ec565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a06040820152600061a8ae60a083018661a0ec565b6060830194909452509015156080909101529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561a27457815186526020958601959091019060010161a90a565b60608152600061a93b606083018661a31c565b828103602084015261a94d818661a8f6565b9150508215156040830152949350505050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260a06060820152600061a99760a083018561a0ec565b828103608084015261a9a9818561a72a565b98975050505050505050565b60006020828403121561a9c757600080fd5b5051919050565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000616917608083018461a0ec565b6001600160a01b038516815260806020820152600061aa27608083018661a31c565b828103604084015261aa39818661a8f6565b915050821515606083015295945050505050565b6001600160a01b0383168152604060208201526000617796604083018461a72a565b83815260606020820152600061a821606083018561a0ec565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161aac081601a85016020880161a0c8565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161aafd81601c84016020880161a0c8565b01601c01949350505050565b6000835161ab1b81846020880161a0c8565b83519083019061ab2f81836020880161a0c8565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ab7081601a85016020880161a0c8565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161abad81603384016020880161a0c8565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b0383166020820152606060408201526000618160606083018461a0ec565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006159ae608083018461a0ec565b60006020828403121561ac6d57600080fd5b815167ffffffffffffffff81111561ac8457600080fd5b8201601f8101841361ac9557600080fd5b61576e8482516020840161a49c565b6000855161acb6818460208a0161a0c8565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161acf0816001840160208a0161a0c8565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161ad2e81600284016020890161a0c8565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161ad7081600284016020880161a0c8565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061adbb604083018461a0ec565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161ae3281601f85016020870161a0c8565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061ae9f604083018461a0ec565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061aef1604083018461a0ec565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161af6881601485016020870161a0c8565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061afaf604083018561a0ec565b82810360208401526159aa818561a0ec565b7f220000000000000000000000000000000000000000000000000000000000000081526000825161aff981600185016020870161a0c8565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b03f81846020870161a0c8565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b0f281604b85016020870161a0c8565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff810361b1445761b14461b0ff565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b1ab81602985016020870161a0c8565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006159ae608083018461a0ec565b60006020828403121561b21157600080fd5b815167ffffffffffffffff81111561b22857600080fd5b82016060818503121561b23a57600080fd5b61b24261a473565b81518060030b811461b25357600080fd5b8152602082015167ffffffffffffffff81111561b26f57600080fd5b61b27b8682850161a50c565b602083015250604082015167ffffffffffffffff81111561b29b57600080fd5b61b2a78682850161a50c565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b31381602185016020870161a0c8565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b4ff81602185016020880161a0c8565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b53c81602e84016020880161a0c8565b01602e01949350505050565b6000825161b55a81846020870161a0c8565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b1ab81602985016020870161a0c8565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b62081602285016020870161a0c8565b9190910160220192915050565b818103818111156157725761577261b0ff565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b67881600e85016020870161a0c8565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b808201808211156157725761577261b0ff565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b76981601885016020880161a0c8565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b7a681601c84016020880161a0c8565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161b8ac81846020870161a0c8565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b80820281158282048414176157725761577261b0ff565b6001815b600184111561b92d5780850481111561b9115761b91161b0ff565b600184161561b91f57908102905b60019390931c92800261b8f6565b935093915050565b60008261b94457506001615772565b8161b95157506000615772565b816001811461b967576002811461b9715761b98d565b6001915050615772565b60ff84111561b9825761b98261b0ff565b50506001821b615772565b5060208310610133831016604e8410600b841016171561b9b0575081810a615772565b61b9bd600019848461b8f2565b806000190482111561b9d15761b9d161b0ff565b029392505050565b60006159ae838361b935565b81810360008312801583831316838312821617156192755761927561b0ff565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161ba3d81601c85016020870161a0c8565b91909101601c0192915050565b6000600019820361ba5d5761ba5d61b0ff565b5060010190565b60008161ba735761ba7361b0ff565b506000190190565b6000835161ba8d81846020880161a0c8565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bac781600184016020880161a0c8565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610dbc806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c578063660b9de01461008c5780636ed70169146100ac57005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6100a73660046106f9565b6101aa565b3480156100b857600080fd5b5061006a6101e6565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e33826040516101db929190610a78565b60405180910390a150565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61022361036f565b6000610230600285610b57565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610c00565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c8a565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d4d565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d6a565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610ab683610694565b1660408201526000602083013567ffffffffffffffff8116808214610ada57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610b1657600080fd5b830160208101903567ffffffffffffffff811115610b3357600080fd5b803603821315610b4257600080fd5b606060808501526105b660a085018284610a2f565b600082610b8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610bad578181015183820152602001610b95565b50506000910152565b60008151808452610bce816020860160208601610b92565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c3560a0830186610bb6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c80578151865260209586019590910190600101610c62565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610d1d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610d08858351610bb6565b94506020938401939190910190600101610cce565b505050508281036040840152610d338186610c4e565b915050610d44606083018415159052565b95945050505050565b600060208284031215610d5f57600080fd5b81516104f681610840565b60008251610d7c818460208701610b92565b919091019291505056fea2646970667358221220084d92a79207d5024a4431b52d5d0038017908edb40aae1ce1d94a5ec3de914064736f6c634300081a0033a2646970667358221220bb9d1c8aead8ebbc6e4e69c79f4098cfc6e477d992e17ad98be913d9d23c312a64736f6c634300081a0033", } // GatewayEVMTestABI is the input ABI used to generate the binding from. @@ -1225,6 +1225,27 @@ func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestTSSUpgradeFailsIfZer return _GatewayEVMTest.Contract.TestTSSUpgradeFailsIfZeroAddress(&_GatewayEVMTest.TransactOpts) } +// TestUpgradeAndForwardCallToReceivePayable is a paid mutator transaction binding the contract method 0x7a380ebf. +// +// Solidity: function testUpgradeAndForwardCallToReceivePayable() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestUpgradeAndForwardCallToReceivePayable(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testUpgradeAndForwardCallToReceivePayable") +} + +// TestUpgradeAndForwardCallToReceivePayable is a paid mutator transaction binding the contract method 0x7a380ebf. +// +// Solidity: function testUpgradeAndForwardCallToReceivePayable() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestUpgradeAndForwardCallToReceivePayable() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestUpgradeAndForwardCallToReceivePayable(&_GatewayEVMTest.TransactOpts) +} + +// TestUpgradeAndForwardCallToReceivePayable is a paid mutator transaction binding the contract method 0x7a380ebf. +// +// Solidity: function testUpgradeAndForwardCallToReceivePayable() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestUpgradeAndForwardCallToReceivePayable() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestUpgradeAndForwardCallToReceivePayable(&_GatewayEVMTest.TransactOpts) +} + // GatewayEVMTestCalledIterator is returned from FilterCalled and is used to iterate over the raw logs and unpacked data for Called events raised by the GatewayEVMTest contract. type GatewayEVMTestCalledIterator struct { Event *GatewayEVMTestCalled // Event containing the contract specifics and raw log @@ -1830,6 +1851,152 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) ParseExecuted(log types.Log) (*Ga return event, nil } +// GatewayEVMTestExecutedV2Iterator is returned from FilterExecutedV2 and is used to iterate over the raw logs and unpacked data for ExecutedV2 events raised by the GatewayEVMTest contract. +type GatewayEVMTestExecutedV2Iterator struct { + Event *GatewayEVMTestExecutedV2 // 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 *GatewayEVMTestExecutedV2Iterator) 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(GatewayEVMTestExecutedV2) + 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(GatewayEVMTestExecutedV2) + 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 *GatewayEVMTestExecutedV2Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GatewayEVMTestExecutedV2Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GatewayEVMTestExecutedV2 represents a ExecutedV2 event raised by the GatewayEVMTest contract. +type GatewayEVMTestExecutedV2 struct { + Destination common.Address + Value *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecutedV2 is a free log retrieval operation binding the contract event 0x373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546. +// +// Solidity: event ExecutedV2(address indexed destination, uint256 value, bytes data) +func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterExecutedV2(opts *bind.FilterOpts, destination []common.Address) (*GatewayEVMTestExecutedV2Iterator, error) { + + var destinationRule []interface{} + for _, destinationItem := range destination { + destinationRule = append(destinationRule, destinationItem) + } + + logs, sub, err := _GatewayEVMTest.contract.FilterLogs(opts, "ExecutedV2", destinationRule) + if err != nil { + return nil, err + } + return &GatewayEVMTestExecutedV2Iterator{contract: _GatewayEVMTest.contract, event: "ExecutedV2", logs: logs, sub: sub}, nil +} + +// WatchExecutedV2 is a free log subscription operation binding the contract event 0x373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546. +// +// Solidity: event ExecutedV2(address indexed destination, uint256 value, bytes data) +func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchExecutedV2(opts *bind.WatchOpts, sink chan<- *GatewayEVMTestExecutedV2, destination []common.Address) (event.Subscription, error) { + + var destinationRule []interface{} + for _, destinationItem := range destination { + destinationRule = append(destinationRule, destinationItem) + } + + logs, sub, err := _GatewayEVMTest.contract.WatchLogs(opts, "ExecutedV2", destinationRule) + 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(GatewayEVMTestExecutedV2) + if err := _GatewayEVMTest.contract.UnpackLog(event, "ExecutedV2", 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 +} + +// ParseExecutedV2 is a log parse operation binding the contract event 0x373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546. +// +// Solidity: event ExecutedV2(address indexed destination, uint256 value, bytes data) +func (_GatewayEVMTest *GatewayEVMTestFilterer) ParseExecutedV2(log types.Log) (*GatewayEVMTestExecutedV2, error) { + event := new(GatewayEVMTestExecutedV2) + if err := _GatewayEVMTest.contract.UnpackLog(event, "ExecutedV2", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // GatewayEVMTestExecutedWithERC20Iterator is returned from FilterExecutedWithERC20 and is used to iterate over the raw logs and unpacked data for ExecutedWithERC20 events raised by the GatewayEVMTest contract. type GatewayEVMTestExecutedWithERC20Iterator struct { Event *GatewayEVMTestExecutedWithERC20 // Event containing the contract specifics and raw log @@ -2605,9 +2772,9 @@ type GatewayEVMTestReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*GatewayEVMTestReceivedRevertIterator, error) { logs, sub, err := _GatewayEVMTest.contract.FilterLogs(opts, "ReceivedRevert") @@ -2617,9 +2784,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterReceivedRevert(opts *bind.F return &GatewayEVMTestReceivedRevertIterator{contract: _GatewayEVMTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *GatewayEVMTestReceivedRevert) (event.Subscription, error) { logs, sub, err := _GatewayEVMTest.contract.WatchLogs(opts, "ReceivedRevert") @@ -2654,9 +2821,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchReceivedRevert(opts *bind.Wa }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) ParseReceivedRevert(log types.Log) (*GatewayEVMTestReceivedRevert, error) { event := new(GatewayEVMTestReceivedRevert) if err := _GatewayEVMTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { @@ -2743,9 +2910,9 @@ type GatewayEVMTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMTestRevertedIterator, error) { var toRule []interface{} @@ -2764,9 +2931,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterReverted(opts *bind.FilterO return &GatewayEVMTestRevertedIterator{contract: _GatewayEVMTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2810,9 +2977,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchReverted(opts *bind.WatchOpt }), nil } -// ParseReverted is a log parse operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) ParseReverted(log types.Log) (*GatewayEVMTestReverted, error) { event := new(GatewayEVMTestReverted) if err := _GatewayEVMTest.contract.UnpackLog(event, "Reverted", log); err != nil { @@ -3035,13 +3202,14 @@ func (it *GatewayEVMTestUpdatedCustodyTSSAddressIterator) Close() error { // GatewayEVMTestUpdatedCustodyTSSAddress represents a UpdatedCustodyTSSAddress event raised by the GatewayEVMTest contract. type GatewayEVMTestUpdatedCustodyTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedCustodyTSSAddress is a free log retrieval operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// FilterUpdatedCustodyTSSAddress is a free log retrieval operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterUpdatedCustodyTSSAddress(opts *bind.FilterOpts) (*GatewayEVMTestUpdatedCustodyTSSAddressIterator, error) { logs, sub, err := _GatewayEVMTest.contract.FilterLogs(opts, "UpdatedCustodyTSSAddress") @@ -3051,9 +3219,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterUpdatedCustodyTSSAddress(op return &GatewayEVMTestUpdatedCustodyTSSAddressIterator{contract: _GatewayEVMTest.contract, event: "UpdatedCustodyTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedCustodyTSSAddress is a free log subscription operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// WatchUpdatedCustodyTSSAddress is a free log subscription operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchUpdatedCustodyTSSAddress(opts *bind.WatchOpts, sink chan<- *GatewayEVMTestUpdatedCustodyTSSAddress) (event.Subscription, error) { logs, sub, err := _GatewayEVMTest.contract.WatchLogs(opts, "UpdatedCustodyTSSAddress") @@ -3088,9 +3256,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchUpdatedCustodyTSSAddress(opt }), nil } -// ParseUpdatedCustodyTSSAddress is a log parse operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// ParseUpdatedCustodyTSSAddress is a log parse operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMTest *GatewayEVMTestFilterer) ParseUpdatedCustodyTSSAddress(log types.Log) (*GatewayEVMTestUpdatedCustodyTSSAddress, error) { event := new(GatewayEVMTestUpdatedCustodyTSSAddress) if err := _GatewayEVMTest.contract.UnpackLog(event, "UpdatedCustodyTSSAddress", log); err != nil { @@ -3169,13 +3337,14 @@ func (it *GatewayEVMTestUpdatedGatewayTSSAddressIterator) Close() error { // GatewayEVMTestUpdatedGatewayTSSAddress represents a UpdatedGatewayTSSAddress event raised by the GatewayEVMTest contract. type GatewayEVMTestUpdatedGatewayTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterUpdatedGatewayTSSAddress(opts *bind.FilterOpts) (*GatewayEVMTestUpdatedGatewayTSSAddressIterator, error) { logs, sub, err := _GatewayEVMTest.contract.FilterLogs(opts, "UpdatedGatewayTSSAddress") @@ -3185,9 +3354,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterUpdatedGatewayTSSAddress(op return &GatewayEVMTestUpdatedGatewayTSSAddressIterator{contract: _GatewayEVMTest.contract, event: "UpdatedGatewayTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchUpdatedGatewayTSSAddress(opts *bind.WatchOpts, sink chan<- *GatewayEVMTestUpdatedGatewayTSSAddress) (event.Subscription, error) { logs, sub, err := _GatewayEVMTest.contract.WatchLogs(opts, "UpdatedGatewayTSSAddress") @@ -3222,9 +3391,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchUpdatedGatewayTSSAddress(opt }), nil } -// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMTest *GatewayEVMTestFilterer) ParseUpdatedGatewayTSSAddress(log types.Log) (*GatewayEVMTestUpdatedGatewayTSSAddress, error) { event := new(GatewayEVMTestUpdatedGatewayTSSAddress) if err := _GatewayEVMTest.contract.UnpackLog(event, "UpdatedGatewayTSSAddress", log); err != nil { @@ -3764,9 +3933,9 @@ type GatewayEVMTestWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMTestWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -3785,9 +3954,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterWithdrawnAndReverted(opts * return &GatewayEVMTestWithdrawnAndRevertedIterator{contract: _GatewayEVMTest.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMTestWithdrawnAndReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -3831,9 +4000,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchWithdrawnAndReverted(opts *b }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) ParseWithdrawnAndReverted(log types.Log) (*GatewayEVMTestWithdrawnAndReverted, error) { event := new(GatewayEVMTestWithdrawnAndReverted) if err := _GatewayEVMTest.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go index 3cd9b1933..b07a8b6c0 100644 --- a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go +++ b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go @@ -29,53 +29,15 @@ var ( _ = abi.ConvertType ) -// RevertContext is an auto generated low-level Go binding around an user-defined struct. -type RevertContext struct { - Asset common.Address - Amount *big.Int - RevertMessage []byte -} - -// RevertOptions is an auto generated low-level Go binding around an user-defined struct. -type RevertOptions struct { - RevertAddress common.Address - CallOnRevert bool - AbortAddress common.Address - RevertMessage []byte - OnRevertGasLimit *big.Int -} - // GatewayEVMEchidnaTestMetaData contains all meta data concerning the GatewayEVMEchidnaTest contract. var GatewayEVMEchidnaTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_PAYLOAD_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f80613dec83390190565b611de780614a8b83390190565b608051613ba361024960003960008181612498015281816124c1015261294d0152613ba36000f3fe60806040526004361061026a5760003560e01c80635d62c86011610153578063a2ba1934116100cb578063d09e3b781161007f578063dda79b7511610064578063dda79b751461075e578063e63ab1e91461077e578063ece697b3146107b257600080fd5b8063d09e3b781461071e578063d547741f1461073e57600080fd5b8063ad3cb1cc116100b0578063ad3cb1cc14610695578063ae7a3a6f146106de578063c0c53b8b146106fe57600080fd5b8063a2ba19341461064b578063a783c7891461066157600080fd5b806381100bf01161012257806391d148541161010757806391d14854146105b1578063950837aa14610616578063a217fddf1461063657600080fd5b806381100bf01461057c5780638456cb591461059c57600080fd5b80635d62c860146105025780636ab90f9b14610536578063726ac97c14610556578063744b9b8b1461056957600080fd5b806336568abe116101e65780635131ab59116101b557806357bec62f1161019a57806357bec62f1461048b5780635b112591146104ab5780635c975abb146104cb57600080fd5b80635131ab591461045657806352d1902d1461047657600080fd5b806336568abe146103ee5780633c2f05a81461040e5780633f4ba83a1461042e5780634f1ef2861461044357600080fd5b80631becceb41161023d57806321e093b11161022257806321e093b114610339578063248a9ca3146103715780632f2ff15d146103ce57600080fd5b80631becceb4146102f95780631cff79cd1461031957600080fd5b806301ffc9a71461026f57806310188aef146102a4578063102614b0146102c657806314fd2d48146102e6575b600080fd5b34801561027b57600080fd5b5061028f61028a3660046130c2565b6107d2565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b506102c46102bf366004613120565b61086b565b005b3480156102d257600080fd5b506102c46102e1366004613153565b610946565b6102c46102f4366004613216565b610a40565b34801561030557600080fd5b506102c4610314366004613289565b610c28565b61032c6103273660046132f0565b610cf8565b60405161029b91906133b1565b34801561034557600080fd5b50600354610359906001600160a01b031681565b6040516001600160a01b03909116815260200161029b565b34801561037d57600080fd5b506103c061038c3660046133c4565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161029b565b3480156103da57600080fd5b506102c46103e93660046133dd565b610de2565b3480156103fa57600080fd5b506102c46104093660046133dd565b610e26565b34801561041a57600080fd5b50600454610359906001600160a01b031681565b34801561043a57600080fd5b506102c4610e77565b6102c4610451366004613438565b610eac565b34801561046257600080fd5b506102c461047136600461353f565b610ecb565b34801561048257600080fd5b506103c06111cb565b34801561049757600080fd5b50600254610359906001600160a01b031681565b3480156104b757600080fd5b50600154610359906001600160a01b031681565b3480156104d757600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661028f565b34801561050e57600080fd5b506103c07f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561054257600080fd5b506102c46105513660046135ae565b6111fa565b6102c4610564366004613608565b611325565b6102c4610577366004613289565b61149d565b34801561058857600080fd5b50600554610359906001600160a01b031681565b3480156105a857600080fd5b506102c461166b565b3480156105bd57600080fd5b5061028f6105cc3660046133dd565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561062257600080fd5b506102c4610631366004613120565b61169d565b34801561064257600080fd5b506103c0600081565b34801561065757600080fd5b506103c061040081565b34801561066d57600080fd5b506103c07f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156106a157600080fd5b5061032c6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156106ea57600080fd5b506102c46106f9366004613120565b61179f565b34801561070a57600080fd5b506102c4610719366004613656565b61187a565b34801561072a57600080fd5b506102c4610739366004613699565b611b16565b34801561074a57600080fd5b506102c46107593660046133dd565b611c60565b34801561076a57600080fd5b50600054610359906001600160a01b031681565b34801561078a57600080fd5b506103c07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156107be57600080fd5b506102c46107cd366004613731565b611ca4565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061086557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061087681611e4d565b6001600160a01b03821661089d5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156108e0576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61090a7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611e57565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61094e611f44565b610956611fa2565b82600003610990576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109b75760405163d92e233d60e01b815260040160405180910390fd5b6109c2338385612023565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c858585604051610a09939291906138f4565b60405180910390a3610a3a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a6a81611e4d565b610a72611f44565b610a7a611fa2565b6001600160a01b038516610aa15760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610aee576040519150601f19603f3d011682016040523d82523d6000602084013e610af3565b606091505b5050905080610b2e576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa9b0a73c0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063a9b0a73c90610b7390869060040161396c565b600060405180830381600087803b158015610b8d57600080fd5b505af1158015610ba1573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167fbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c34888888604051610bef949392919061397f565b60405180910390a350610c2160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610c30611f44565b610c38611fa2565b6001600160a01b038416610c5f5760405163d92e233d60e01b815260040160405180910390fd5b610400610c6f60608301836139b6565b610c7a915084613a1b565b10610cb1576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d974858585604051610a0993929190613a55565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610d2481611e4d565b610d2c611f44565b610d34611fa2565b6001600160a01b038516610d5b5760405163d92e233d60e01b815260040160405180910390fd5b6000610d68868686612286565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610da793929190613a7b565b60405180910390a29150610dda60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e1c81611e4d565b610a3a8383611e57565b6001600160a01b0381163314610e68576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e728282612339565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ea181611e4d565b610ea96123fd565b50565b610eb461248d565b610ebd8261255d565b610ec78282612568565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ef581611e4d565b610efd611f44565b610f05611fa2565b83600003610f3f576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610f665760405163d92e233d60e01b815260040160405180910390fd5b610f70868661268c565b610fa6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af115801561100e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110329190613a95565b611068576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611073858484612286565b5061107e868661268c565b6110b4576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111389190613ab2565b9050801561114a5761114a878261271c565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161119193929190613a7b565b60405180910390a3506111c360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006111d5612942565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561126057600080fd5b505af1158015611274573d6000803e3d6000fd5b505060045461129292506001600160a01b0316905085858585610ecb565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa1580156112f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113189190613ab2565b15610a3a57610a3a613acb565b61132d611f44565b611335611fa2565b3460000361136f576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166113965760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146113e3576040519150601f19603f3d011682016040523d82523d6000602084013e6113e8565b606091505b5050905080611423576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008660405161146b939291906138f4565b60405180910390a350610ec760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6114a5611f44565b6114ad611fa2565b346000036114e7576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661150e5760405163d92e233d60e01b815260040160405180910390fd5b61040061151e60608301836139b6565b611529915084613a1b565b10611560576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146115ad576040519150601f19603f3d011682016040523d82523d6000602084013e6115b2565b606091505b50509050806115ed576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000888888604051611639959493929190613afa565b60405180910390a350610a3a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61169581611e4d565b610ea96129a4565b60006116a881611e4d565b6001600160a01b0382166116cf5760405163d92e233d60e01b815260040160405180910390fd5b600154611706907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b0316612339565b506117317f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611e57565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527f7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a059060200160405180910390a15050565b60006117aa81611e4d565b6001600160a01b0382166117d15760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611814576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61183e7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611e57565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156118c55750825b905060008267ffffffffffffffff1660011480156118e25750303b155b9050811580156118f0575080155b15611927576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156119885784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806119a557506001600160a01b038716155b156119c35760405163d92e233d60e01b815260040160405180910390fd5b6119cb612a1d565b6119d3612a25565b6119db612a1d565b6119e3612a35565b6119ee600087611e57565b50611a197f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611e57565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a16179055611a777f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611e57565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611b0c5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611b1e611f44565b611b26611fa2565b84600003611b60576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611b875760405163d92e233d60e01b815260040160405180910390fd5b610400611b9760608301836139b6565b611ba2915084613a1b565b10611bd9576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611be4338587612023565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611c2f959493929190613afa565b60405180910390a36111c360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c9a81611e4d565b610a3a8383612339565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9611cce81611e4d565b611cd6611f44565b611cde611fa2565b84600003611d18576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611d3f5760405163d92e233d60e01b815260040160405180910390fd5b611d536001600160a01b0388168787612a45565b6040517fa9b0a73c0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063a9b0a73c90611d9890859060040161396c565b600060405180830381600087803b158015611db257600080fd5b505af1158015611dc6573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167fbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c87878787604051611e13949392919061397f565b60405180910390a3611e4460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610ea98133612ab9565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611f3a576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ef03390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610865565b6000915050610865565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611fa0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161201d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b03908116908316036121875761204e6001600160a01b038316843084612b46565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156120ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120de9190613a95565b612114576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561217357600080fd5b505af1158015611e44573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156121ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220e9190613a95565b612244576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610e72906001600160a01b038481169186911684612b46565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606122928383612b7f565b600080856001600160a01b03163486866040516122b0929190613b41565b60006040518083038185875af1925050503d80600081146122ed576040519150601f19603f3d011682016040523d82523d6000602084013e6122f2565b606091505b50915091508161232e576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611f3a576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610865565b612405612c04565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061252657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661251a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611fa0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ec781611e4d565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156125e0575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526125dd91810190613ab2565b60015b612626576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612682576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161261d565b610e728383612c5f565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156126f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123329190613a95565b6003546001600160a01b039081169083160361286b576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561279e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c29190613a95565b6127f8576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561285757600080fd5b505af11580156111c3573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156128ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f29190613a95565b612928576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610ec7906001600160a01b03848116911683612a45565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611fa0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129ac611f44565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361246f565b611fa0612cb5565b612a2d612cb5565b611fa0612d1c565b612a3d612cb5565b611fa0612d24565b6040516001600160a01b03838116602483015260448201839052610e7291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d75565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ec7576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161261d565b6040516001600160a01b038481166024830152838116604483015260648201839052610a3a9186918216906323b872dd90608401612a72565b60048110610ec75781357f564f58c4000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610e72576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611fa0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c6882612df1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612cad57610e728282612e99565b610ec7612f0f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611fa0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612260612cb5565b612d2c612cb5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000612d8a6001600160a01b03841683612f47565b90508051600014158015612daf575080806020019051810190612dad9190613a95565b155b15610e72576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161261d565b806001600160a01b03163b600003612e40576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161261d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612eb69190613b51565b600060405180830381855af49150503d8060008114612ef1576040519150601f19603f3d011682016040523d82523d6000602084013e612ef6565b606091505b5091509150612f06858383612f55565b95945050505050565b3415611fa0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061233283836000612fca565b606082612f6a57612f6582613080565b612332565b8151158015612f8157506001600160a01b0384163b155b15612fc3576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161261d565b5080612332565b606081471015613008576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161261d565b600080856001600160a01b031684866040516130249190613b51565b60006040518083038185875af1925050503d8060008114613061576040519150601f19603f3d011682016040523d82523d6000602084013e613066565b606091505b5091509150613076868383612f55565b9695505050505050565b8051156130905780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156130d457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461233257600080fd5b80356001600160a01b038116811461311b57600080fd5b919050565b60006020828403121561313257600080fd5b61233282613104565b600060a0828403121561314d57600080fd5b50919050565b6000806000806080858703121561316957600080fd5b61317285613104565b93506020850135925061318760408601613104565b9150606085013567ffffffffffffffff8111156131a357600080fd5b6131af8782880161313b565b91505092959194509250565b60008083601f8401126131cd57600080fd5b50813567ffffffffffffffff8111156131e557600080fd5b6020830191508360208285010111156131fd57600080fd5b9250929050565b60006060828403121561314d57600080fd5b6000806000806060858703121561322c57600080fd5b61323585613104565b9350602085013567ffffffffffffffff81111561325157600080fd5b61325d878288016131bb565b909450925050604085013567ffffffffffffffff81111561327d57600080fd5b6131af87828801613204565b6000806000806060858703121561329f57600080fd5b6132a885613104565b9350602085013567ffffffffffffffff8111156132c457600080fd5b6132d0878288016131bb565b909450925050604085013567ffffffffffffffff8111156131a357600080fd5b60008060006040848603121561330557600080fd5b61330e84613104565b9250602084013567ffffffffffffffff81111561332a57600080fd5b613336868287016131bb565b9497909650939450505050565b60005b8381101561335e578181015183820152602001613346565b50506000910152565b6000815180845261337f816020860160208601613343565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006123326020830184613367565b6000602082840312156133d657600080fd5b5035919050565b600080604083850312156133f057600080fd5b8235915061340060208401613104565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561344b57600080fd5b61345483613104565b9150602083013567ffffffffffffffff81111561347057600080fd5b8301601f8101851361348157600080fd5b803567ffffffffffffffff81111561349b5761349b613409565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561350757613507613409565b60405281815282820160200187101561351f57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561355757600080fd5b61356086613104565b945061356e60208701613104565b935060408601359250606086013567ffffffffffffffff81111561359157600080fd5b61359d888289016131bb565b969995985093965092949392505050565b600080600080606085870312156135c457600080fd5b6135cd85613104565b935060208501359250604085013567ffffffffffffffff8111156135f057600080fd5b6135fc878288016131bb565b95989497509550505050565b6000806040838503121561361b57600080fd5b61362483613104565b9150602083013567ffffffffffffffff81111561364057600080fd5b61364c8582860161313b565b9150509250929050565b60008060006060848603121561366b57600080fd5b61367484613104565b925061368260208501613104565b915061369060408501613104565b90509250925092565b60008060008060008060a087890312156136b257600080fd5b6136bb87613104565b9550602087013594506136d060408801613104565b9350606087013567ffffffffffffffff8111156136ec57600080fd5b6136f889828a016131bb565b909450925050608087013567ffffffffffffffff81111561371857600080fd5b61372489828a0161313b565b9150509295509295509295565b60008060008060008060a0878903121561374a57600080fd5b61375387613104565b955061376160208801613104565b945060408701359350606087013567ffffffffffffffff81111561378457600080fd5b61379089828a016131bb565b909450925050608087013567ffffffffffffffff8111156137b057600080fd5b61372489828a01613204565b8015158114610ea957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126137ff57600080fd5b830160208101925035905067ffffffffffffffff81111561381f57600080fd5b8036038213156131fd57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361388882613104565b1682526000602082013561389b816137bc565b151560208401526001600160a01b036138b660408401613104565b1660408401526138c960608301836137ca565b60a060608601526138de60a08601828461382e565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612f0660a0830184613877565b6001600160a01b0361393b82613104565b16825260208181013590830152600061395760408301836137ca565b60606040860152612f0660608601828461382e565b602081526000612332602083018461392a565b84815260606020820152600061399960608301858761382e565b82810360408401526139ab818561392a565b979650505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126139eb57600080fd5b83018035915067ffffffffffffffff821115613a0657600080fd5b6020019150368190038213156131fd57600080fd5b80820180821115610865577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b604081526000613a6960408301858761382e565b82810360208401526130768185613877565b838152604060208201526000612f0660408301848661382e565b600060208284031215613aa757600080fd5b8151612332816137bc565b600060208284031215613ac457600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8581526001600160a01b0385166020820152608060408201526000613b2360808301858761382e565b8281036060840152613b358185613877565b98975050505050505050565b8183823760009101908152919050565b60008251613b63818460208701613343565b919091019291505056fea2646970667358221220d0ff27bd352b2148cd445d2c43d8f500b3cda384d5f01fbd2523efe656572af764736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611de7380380611de783398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611dc78339815191528261014c565b50610143600080516020611dc78339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611b50610277600039600081816101d501528181610574015281816105c9015281816107e6015261083b0152611b506000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638456cb59116100ee578063a217fddf11610097578063d9caed1211610071578063d9caed12146103e0578063e609055e146103f3578063e63ab1e914610406578063eab103df1461042d57600080fd5b8063a217fddf146103a2578063d547741f146103aa578063d936547e146103bd57600080fd5b8063950837aa116100c8578063950837aa146103695780639a5904271461037c5780639b19251a1461038f57600080fd5b80638456cb591461030157806385f438c11461030957806391d148541461033057600080fd5b806336568abe116101505780635b1125911161012a5780635b112591146102d05780635c975abb146102e35780637ab697e7146102ee57600080fd5b806336568abe1461028e5780633f4ba83a146102a1578063570618e1146102a957600080fd5b8063248a9ca311610181578063248a9ca314610224578063252f07bf146102565780632f2ff15d1461027b57600080fd5b806301ffc9a7146101a8578063116191b6146101d057806321fc65f21461020f575b600080fd5b6101bb6101b636600461155e565b610440565b60405190151581526020015b60405180910390f35b6101f77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c7565b61022261021d3660046115fe565b6104d9565b005b610248610232366004611671565b6000908152600160208190526040909120015490565b6040519081526020016101c7565b6004546101bb9074010000000000000000000000000000000000000000900460ff1681565b61022261028936600461168a565b610699565b61022261029c36600461168a565b6106c5565b610222610716565b6102487f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101f7906001600160a01b031681565b60025460ff166101bb565b6102226102fc3660046116ba565b61074b565b610222610910565b6102487f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101bb61033e36600461168a565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61022261037736600461175d565b610942565b61022261038a36600461175d565b610ac0565b61022261039d36600461175d565b610b74565b610248600081565b6102226103b836600461168a565b610c2b565b6101bb6103cb36600461175d565b60036020526000908152604090205460ff1681565b6102226103ee36600461177a565b610c51565b6102226104013660046117bb565b610d49565b6102487f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61022261043b36600461185a565b610f75565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104e1610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461050b8161100e565b610513611018565b6001600160a01b03851660009081526003602052604090205460ff16610565576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105996001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086611057565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106069088908a908990899089906004016118c0565b600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161067f93929190611903565b60405180910390a3506106926001600055565b5050505050565b600082815260016020819052604090912001546106b58161100e565b6106bf83836110cb565b50505050565b6001600160a01b0381163314610707576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610711828261115e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107408161100e565b6107486111e5565b50565b610753610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461077d8161100e565b610785611018565b6001600160a01b03861660009081526003602052604090205460ff166107d7576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61080b6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087611057565b6040517fece697b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ece697b39061087a9089908b908a908a908a908a906004016119bf565b600060405180830381600087803b15801561089457600080fd5b505af11580156108a8573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640878787876040516108f59493929190611a16565b60405180910390a3506109086001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61093a8161100e565b610748611237565b600061094d8161100e565b6001600160a01b03821661098d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546109c4907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661115e565b506004546109fc907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661115e565b50610a277f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836110cb565b50610a527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a836110cb565b50600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527f086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba9060200160405180910390a15050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610aea8161100e565b6001600160a01b038216610b2a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610b9e8161100e565b6001600160a01b038216610bde576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610c478161100e565b6106bf838361115e565b610c59610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610c838161100e565b610c8b611018565b6001600160a01b03831660009081526003602052604090205460ff16610cdd576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf16001600160a01b0384168584611057565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610d3691815260200190565b60405180910390a3506107116001600055565b610d51610fcb565b610d59611018565b60045474010000000000000000000000000000000000000000900460ff16610dad576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610dff576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a42565b9050610e9a6001600160a01b038616333087611274565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f459190611a42565b610f4f9190611a5b565b8787604051610f62959493929190611a95565b60405180910390a2506109086001600055565b6000610f808161100e565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403611007576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61074881336112ad565b60025460ff1615611055576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611324565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166111565760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104d3565b5060006104d3565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16156111565760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104d3565b6111ed6113a0565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61123f611018565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861121a3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106bf9186918216906323b872dd90608401611084565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611320576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b60006113396001600160a01b038416836113dc565b9050805160001415801561135e57508080602001905181019061135c9190611ace565b155b15610711576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611317565b60025460ff16611055576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606113ea838360006113f1565b9392505050565b60608147101561142f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611317565b600080856001600160a01b0316848660405161144b9190611aeb565b60006040518083038185875af1925050503d8060008114611488576040519150601f19603f3d011682016040523d82523d6000602084013e61148d565b606091505b509150915061149d8683836114a7565b9695505050505050565b6060826114bc576114b78261151c565b6113ea565b81511580156114d357506001600160a01b0384163b155b15611515576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611317565b50806113ea565b80511561152c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561157057600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113ea57600080fd5b6001600160a01b038116811461074857600080fd5b60008083601f8401126115c757600080fd5b50813567ffffffffffffffff8111156115df57600080fd5b6020830191508360208285010111156115f757600080fd5b9250929050565b60008060008060006080868803121561161657600080fd5b8535611621816115a0565b94506020860135611631816115a0565b935060408601359250606086013567ffffffffffffffff81111561165457600080fd5b611660888289016115b5565b969995985093965092949392505050565b60006020828403121561168357600080fd5b5035919050565b6000806040838503121561169d57600080fd5b8235915060208301356116af816115a0565b809150509250929050565b60008060008060008060a087890312156116d357600080fd5b86356116de816115a0565b955060208701356116ee816115a0565b945060408701359350606087013567ffffffffffffffff81111561171157600080fd5b61171d89828a016115b5565b909450925050608087013567ffffffffffffffff81111561173d57600080fd5b87016060818a03121561174f57600080fd5b809150509295509295509295565b60006020828403121561176f57600080fd5b81356113ea816115a0565b60008060006060848603121561178f57600080fd5b833561179a816115a0565b925060208401356117aa816115a0565b929592945050506040919091013590565b600080600080600080608087890312156117d457600080fd5b863567ffffffffffffffff8111156117eb57600080fd5b6117f789828a016115b5565b909750955050602087013561180b816115a0565b935060408701359250606087013567ffffffffffffffff81111561182e57600080fd5b61183a89828a016115b5565b979a9699509497509295939492505050565b801515811461074857600080fd5b60006020828403121561186c57600080fd5b81356113ea8161184c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b03851660208201528360408201526080606082015260006118f8608083018486611877565b979650505050505050565b83815260406020820152600061191d604083018486611877565b95945050505050565b60008135611933816115a0565b6001600160a01b03168352602082810135908401526040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261197e57600080fd5b820160208101903567ffffffffffffffff81111561199b57600080fd5b8036038213156119aa57600080fd5b6060604086015261191d606086018284611877565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006119f760a083018587611877565b8281036080840152611a098185611926565b9998505050505050505050565b848152606060208201526000611a30606083018587611877565b82810360408401526118f88185611926565b600060208284031215611a5457600080fd5b5051919050565b818103818111156104d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611aa9606083018789611877565b8560208401528281036040840152611ac2818587611877565b98975050505050505050565b600060208284031215611ae057600080fd5b81516113ea8161184c565b6000825160005b81811015611b0c5760208186018101518583015201611af2565b50600092019182525091905056fea2646970667358221220a57d389b60850bdfffcd53692f80a9c416ca5b9b4d1b7d58052beba77fb7a96b64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a", + ABI: "[]", } // GatewayEVMEchidnaTestABI is the input ABI used to generate the binding from. // Deprecated: Use GatewayEVMEchidnaTestMetaData.ABI instead. var GatewayEVMEchidnaTestABI = GatewayEVMEchidnaTestMetaData.ABI -// GatewayEVMEchidnaTestBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use GatewayEVMEchidnaTestMetaData.Bin instead. -var GatewayEVMEchidnaTestBin = GatewayEVMEchidnaTestMetaData.Bin - -// DeployGatewayEVMEchidnaTest deploys a new Ethereum contract, binding an instance of GatewayEVMEchidnaTest to it. -func DeployGatewayEVMEchidnaTest(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *GatewayEVMEchidnaTest, error) { - parsed, err := GatewayEVMEchidnaTestMetaData.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(GatewayEVMEchidnaTestBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &GatewayEVMEchidnaTest{GatewayEVMEchidnaTestCaller: GatewayEVMEchidnaTestCaller{contract: contract}, GatewayEVMEchidnaTestTransactor: GatewayEVMEchidnaTestTransactor{contract: contract}, GatewayEVMEchidnaTestFilterer: GatewayEVMEchidnaTestFilterer{contract: contract}}, nil -} - // GatewayEVMEchidnaTest is an auto generated Go binding around an Ethereum contract. type GatewayEVMEchidnaTest struct { GatewayEVMEchidnaTestCaller // Read-only binding to the contract @@ -217,2885 +179,3 @@ func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorRaw) Transfer(opts func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { return _GatewayEVMEchidnaTest.Contract.contract.Transact(opts, method, params...) } - -// ASSETHANDLERROLE is a free data retrieval call binding the contract method 0x5d62c860. -// -// Solidity: function ASSET_HANDLER_ROLE() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) ASSETHANDLERROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "ASSET_HANDLER_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ASSETHANDLERROLE is a free data retrieval call binding the contract method 0x5d62c860. -// -// Solidity: function ASSET_HANDLER_ROLE() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) ASSETHANDLERROLE() ([32]byte, error) { - return _GatewayEVMEchidnaTest.Contract.ASSETHANDLERROLE(&_GatewayEVMEchidnaTest.CallOpts) -} - -// ASSETHANDLERROLE is a free data retrieval call binding the contract method 0x5d62c860. -// -// Solidity: function ASSET_HANDLER_ROLE() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) ASSETHANDLERROLE() ([32]byte, error) { - return _GatewayEVMEchidnaTest.Contract.ASSETHANDLERROLE(&_GatewayEVMEchidnaTest.CallOpts) -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) DEFAULTADMINROLE() ([32]byte, error) { - return _GatewayEVMEchidnaTest.Contract.DEFAULTADMINROLE(&_GatewayEVMEchidnaTest.CallOpts) -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) DEFAULTADMINROLE() ([32]byte, error) { - return _GatewayEVMEchidnaTest.Contract.DEFAULTADMINROLE(&_GatewayEVMEchidnaTest.CallOpts) -} - -// MAXPAYLOADSIZE is a free data retrieval call binding the contract method 0xa2ba1934. -// -// Solidity: function MAX_PAYLOAD_SIZE() view returns(uint256) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) MAXPAYLOADSIZE(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "MAX_PAYLOAD_SIZE") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MAXPAYLOADSIZE is a free data retrieval call binding the contract method 0xa2ba1934. -// -// Solidity: function MAX_PAYLOAD_SIZE() view returns(uint256) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) MAXPAYLOADSIZE() (*big.Int, error) { - return _GatewayEVMEchidnaTest.Contract.MAXPAYLOADSIZE(&_GatewayEVMEchidnaTest.CallOpts) -} - -// MAXPAYLOADSIZE is a free data retrieval call binding the contract method 0xa2ba1934. -// -// Solidity: function MAX_PAYLOAD_SIZE() view returns(uint256) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) MAXPAYLOADSIZE() (*big.Int, error) { - return _GatewayEVMEchidnaTest.Contract.MAXPAYLOADSIZE(&_GatewayEVMEchidnaTest.CallOpts) -} - -// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. -// -// Solidity: function PAUSER_ROLE() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "PAUSER_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. -// -// Solidity: function PAUSER_ROLE() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) PAUSERROLE() ([32]byte, error) { - return _GatewayEVMEchidnaTest.Contract.PAUSERROLE(&_GatewayEVMEchidnaTest.CallOpts) -} - -// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. -// -// Solidity: function PAUSER_ROLE() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) PAUSERROLE() ([32]byte, error) { - return _GatewayEVMEchidnaTest.Contract.PAUSERROLE(&_GatewayEVMEchidnaTest.CallOpts) -} - -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. -// -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "TSS_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. -// -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) TSSROLE() ([32]byte, error) { - return _GatewayEVMEchidnaTest.Contract.TSSROLE(&_GatewayEVMEchidnaTest.CallOpts) -} - -// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. -// -// Solidity: function TSS_ROLE() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) TSSROLE() ([32]byte, error) { - return _GatewayEVMEchidnaTest.Contract.TSSROLE(&_GatewayEVMEchidnaTest.CallOpts) -} - -// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. -// -// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. -// -// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) UPGRADEINTERFACEVERSION() (string, error) { - return _GatewayEVMEchidnaTest.Contract.UPGRADEINTERFACEVERSION(&_GatewayEVMEchidnaTest.CallOpts) -} - -// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. -// -// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) UPGRADEINTERFACEVERSION() (string, error) { - return _GatewayEVMEchidnaTest.Contract.UPGRADEINTERFACEVERSION(&_GatewayEVMEchidnaTest.CallOpts) -} - -// Custody is a free data retrieval call binding the contract method 0xdda79b75. -// -// Solidity: function custody() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) Custody(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "custody") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Custody is a free data retrieval call binding the contract method 0xdda79b75. -// -// Solidity: function custody() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) Custody() (common.Address, error) { - return _GatewayEVMEchidnaTest.Contract.Custody(&_GatewayEVMEchidnaTest.CallOpts) -} - -// Custody is a free data retrieval call binding the contract method 0xdda79b75. -// -// Solidity: function custody() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) Custody() (common.Address, error) { - return _GatewayEVMEchidnaTest.Contract.Custody(&_GatewayEVMEchidnaTest.CallOpts) -} - -// EchidnaCaller is a free data retrieval call binding the contract method 0x81100bf0. -// -// Solidity: function echidnaCaller() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) EchidnaCaller(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "echidnaCaller") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// EchidnaCaller is a free data retrieval call binding the contract method 0x81100bf0. -// -// Solidity: function echidnaCaller() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) EchidnaCaller() (common.Address, error) { - return _GatewayEVMEchidnaTest.Contract.EchidnaCaller(&_GatewayEVMEchidnaTest.CallOpts) -} - -// EchidnaCaller is a free data retrieval call binding the contract method 0x81100bf0. -// -// Solidity: function echidnaCaller() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) EchidnaCaller() (common.Address, error) { - return _GatewayEVMEchidnaTest.Contract.EchidnaCaller(&_GatewayEVMEchidnaTest.CallOpts) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "getRoleAdmin", role) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _GatewayEVMEchidnaTest.Contract.GetRoleAdmin(&_GatewayEVMEchidnaTest.CallOpts, role) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _GatewayEVMEchidnaTest.Contract.GetRoleAdmin(&_GatewayEVMEchidnaTest.CallOpts, role) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "hasRole", role, account) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _GatewayEVMEchidnaTest.Contract.HasRole(&_GatewayEVMEchidnaTest.CallOpts, role, account) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _GatewayEVMEchidnaTest.Contract.HasRole(&_GatewayEVMEchidnaTest.CallOpts, role, account) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.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 (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) Paused() (bool, error) { - return _GatewayEVMEchidnaTest.Contract.Paused(&_GatewayEVMEchidnaTest.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) Paused() (bool, error) { - return _GatewayEVMEchidnaTest.Contract.Paused(&_GatewayEVMEchidnaTest.CallOpts) -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "proxiableUUID") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) ProxiableUUID() ([32]byte, error) { - return _GatewayEVMEchidnaTest.Contract.ProxiableUUID(&_GatewayEVMEchidnaTest.CallOpts) -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) ProxiableUUID() ([32]byte, error) { - return _GatewayEVMEchidnaTest.Contract.ProxiableUUID(&_GatewayEVMEchidnaTest.CallOpts) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "supportsInterface", interfaceId) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _GatewayEVMEchidnaTest.Contract.SupportsInterface(&_GatewayEVMEchidnaTest.CallOpts, interfaceId) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _GatewayEVMEchidnaTest.Contract.SupportsInterface(&_GatewayEVMEchidnaTest.CallOpts, interfaceId) -} - -// TestERC20 is a free data retrieval call binding the contract method 0x3c2f05a8. -// -// Solidity: function testERC20() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) TestERC20(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "testERC20") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// TestERC20 is a free data retrieval call binding the contract method 0x3c2f05a8. -// -// Solidity: function testERC20() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) TestERC20() (common.Address, error) { - return _GatewayEVMEchidnaTest.Contract.TestERC20(&_GatewayEVMEchidnaTest.CallOpts) -} - -// TestERC20 is a free data retrieval call binding the contract method 0x3c2f05a8. -// -// Solidity: function testERC20() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) TestERC20() (common.Address, error) { - return _GatewayEVMEchidnaTest.Contract.TestERC20(&_GatewayEVMEchidnaTest.CallOpts) -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) TssAddress(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "tssAddress") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) TssAddress() (common.Address, error) { - return _GatewayEVMEchidnaTest.Contract.TssAddress(&_GatewayEVMEchidnaTest.CallOpts) -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) TssAddress() (common.Address, error) { - return _GatewayEVMEchidnaTest.Contract.TssAddress(&_GatewayEVMEchidnaTest.CallOpts) -} - -// ZetaConnector is a free data retrieval call binding the contract method 0x57bec62f. -// -// Solidity: function zetaConnector() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) ZetaConnector(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "zetaConnector") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// ZetaConnector is a free data retrieval call binding the contract method 0x57bec62f. -// -// Solidity: function zetaConnector() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) ZetaConnector() (common.Address, error) { - return _GatewayEVMEchidnaTest.Contract.ZetaConnector(&_GatewayEVMEchidnaTest.CallOpts) -} - -// ZetaConnector is a free data retrieval call binding the contract method 0x57bec62f. -// -// Solidity: function zetaConnector() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) ZetaConnector() (common.Address, error) { - return _GatewayEVMEchidnaTest.Contract.ZetaConnector(&_GatewayEVMEchidnaTest.CallOpts) -} - -// ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. -// -// Solidity: function zetaToken() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCaller) ZetaToken(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _GatewayEVMEchidnaTest.contract.Call(opts, &out, "zetaToken") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. -// -// Solidity: function zetaToken() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) ZetaToken() (common.Address, error) { - return _GatewayEVMEchidnaTest.Contract.ZetaToken(&_GatewayEVMEchidnaTest.CallOpts) -} - -// ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. -// -// Solidity: function zetaToken() view returns(address) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestCallerSession) ZetaToken() (common.Address, error) { - return _GatewayEVMEchidnaTest.Contract.ZetaToken(&_GatewayEVMEchidnaTest.CallOpts) -} - -// Call is a paid mutator transaction binding the contract method 0x1becceb4. -// -// Solidity: function call(address receiver, bytes payload, (address,bool,address,bytes,uint256) revertOptions) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) Call(opts *bind.TransactOpts, receiver common.Address, payload []byte, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "call", receiver, payload, revertOptions) -} - -// Call is a paid mutator transaction binding the contract method 0x1becceb4. -// -// Solidity: function call(address receiver, bytes payload, (address,bool,address,bytes,uint256) revertOptions) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) Call(receiver common.Address, payload []byte, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Call(&_GatewayEVMEchidnaTest.TransactOpts, receiver, payload, revertOptions) -} - -// Call is a paid mutator transaction binding the contract method 0x1becceb4. -// -// Solidity: function call(address receiver, bytes payload, (address,bool,address,bytes,uint256) revertOptions) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) Call(receiver common.Address, payload []byte, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Call(&_GatewayEVMEchidnaTest.TransactOpts, receiver, payload, revertOptions) -} - -// Deposit is a paid mutator transaction binding the contract method 0x102614b0. -// -// Solidity: function deposit(address receiver, uint256 amount, address asset, (address,bool,address,bytes,uint256) revertOptions) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) Deposit(opts *bind.TransactOpts, receiver common.Address, amount *big.Int, asset common.Address, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "deposit", receiver, amount, asset, revertOptions) -} - -// Deposit is a paid mutator transaction binding the contract method 0x102614b0. -// -// Solidity: function deposit(address receiver, uint256 amount, address asset, (address,bool,address,bytes,uint256) revertOptions) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) Deposit(receiver common.Address, amount *big.Int, asset common.Address, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Deposit(&_GatewayEVMEchidnaTest.TransactOpts, receiver, amount, asset, revertOptions) -} - -// Deposit is a paid mutator transaction binding the contract method 0x102614b0. -// -// Solidity: function deposit(address receiver, uint256 amount, address asset, (address,bool,address,bytes,uint256) revertOptions) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) Deposit(receiver common.Address, amount *big.Int, asset common.Address, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Deposit(&_GatewayEVMEchidnaTest.TransactOpts, receiver, amount, asset, revertOptions) -} - -// Deposit0 is a paid mutator transaction binding the contract method 0x726ac97c. -// -// Solidity: function deposit(address receiver, (address,bool,address,bytes,uint256) revertOptions) payable returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) Deposit0(opts *bind.TransactOpts, receiver common.Address, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "deposit0", receiver, revertOptions) -} - -// Deposit0 is a paid mutator transaction binding the contract method 0x726ac97c. -// -// Solidity: function deposit(address receiver, (address,bool,address,bytes,uint256) revertOptions) payable returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) Deposit0(receiver common.Address, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Deposit0(&_GatewayEVMEchidnaTest.TransactOpts, receiver, revertOptions) -} - -// Deposit0 is a paid mutator transaction binding the contract method 0x726ac97c. -// -// Solidity: function deposit(address receiver, (address,bool,address,bytes,uint256) revertOptions) payable returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) Deposit0(receiver common.Address, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Deposit0(&_GatewayEVMEchidnaTest.TransactOpts, receiver, revertOptions) -} - -// DepositAndCall is a paid mutator transaction binding the contract method 0x744b9b8b. -// -// Solidity: function depositAndCall(address receiver, bytes payload, (address,bool,address,bytes,uint256) revertOptions) payable returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) DepositAndCall(opts *bind.TransactOpts, receiver common.Address, payload []byte, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "depositAndCall", receiver, payload, revertOptions) -} - -// DepositAndCall is a paid mutator transaction binding the contract method 0x744b9b8b. -// -// Solidity: function depositAndCall(address receiver, bytes payload, (address,bool,address,bytes,uint256) revertOptions) payable returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) DepositAndCall(receiver common.Address, payload []byte, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.DepositAndCall(&_GatewayEVMEchidnaTest.TransactOpts, receiver, payload, revertOptions) -} - -// DepositAndCall is a paid mutator transaction binding the contract method 0x744b9b8b. -// -// Solidity: function depositAndCall(address receiver, bytes payload, (address,bool,address,bytes,uint256) revertOptions) payable returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) DepositAndCall(receiver common.Address, payload []byte, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.DepositAndCall(&_GatewayEVMEchidnaTest.TransactOpts, receiver, payload, revertOptions) -} - -// DepositAndCall0 is a paid mutator transaction binding the contract method 0xd09e3b78. -// -// Solidity: function depositAndCall(address receiver, uint256 amount, address asset, bytes payload, (address,bool,address,bytes,uint256) revertOptions) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) DepositAndCall0(opts *bind.TransactOpts, receiver common.Address, amount *big.Int, asset common.Address, payload []byte, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "depositAndCall0", receiver, amount, asset, payload, revertOptions) -} - -// DepositAndCall0 is a paid mutator transaction binding the contract method 0xd09e3b78. -// -// Solidity: function depositAndCall(address receiver, uint256 amount, address asset, bytes payload, (address,bool,address,bytes,uint256) revertOptions) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) DepositAndCall0(receiver common.Address, amount *big.Int, asset common.Address, payload []byte, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.DepositAndCall0(&_GatewayEVMEchidnaTest.TransactOpts, receiver, amount, asset, payload, revertOptions) -} - -// DepositAndCall0 is a paid mutator transaction binding the contract method 0xd09e3b78. -// -// Solidity: function depositAndCall(address receiver, uint256 amount, address asset, bytes payload, (address,bool,address,bytes,uint256) revertOptions) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) DepositAndCall0(receiver common.Address, amount *big.Int, asset common.Address, payload []byte, revertOptions RevertOptions) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.DepositAndCall0(&_GatewayEVMEchidnaTest.TransactOpts, receiver, amount, asset, payload, revertOptions) -} - -// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. -// -// Solidity: function execute(address destination, bytes data) payable returns(bytes) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) Execute(opts *bind.TransactOpts, destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "execute", destination, data) -} - -// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. -// -// Solidity: function execute(address destination, bytes data) payable returns(bytes) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) Execute(destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Execute(&_GatewayEVMEchidnaTest.TransactOpts, destination, data) -} - -// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. -// -// Solidity: function execute(address destination, bytes data) payable returns(bytes) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) Execute(destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Execute(&_GatewayEVMEchidnaTest.TransactOpts, destination, data) -} - -// ExecuteRevert is a paid mutator transaction binding the contract method 0x14fd2d48. -// -// Solidity: function executeRevert(address destination, bytes data, (address,uint256,bytes) revertContext) payable returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) ExecuteRevert(opts *bind.TransactOpts, destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "executeRevert", destination, data, revertContext) -} - -// ExecuteRevert is a paid mutator transaction binding the contract method 0x14fd2d48. -// -// Solidity: function executeRevert(address destination, bytes data, (address,uint256,bytes) revertContext) payable returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.ExecuteRevert(&_GatewayEVMEchidnaTest.TransactOpts, destination, data, revertContext) -} - -// ExecuteRevert is a paid mutator transaction binding the contract method 0x14fd2d48. -// -// Solidity: function executeRevert(address destination, bytes data, (address,uint256,bytes) revertContext) payable returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.ExecuteRevert(&_GatewayEVMEchidnaTest.TransactOpts, destination, data, revertContext) -} - -// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x5131ab59. -// -// Solidity: function executeWithERC20(address token, address to, uint256 amount, bytes data) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) ExecuteWithERC20(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "executeWithERC20", token, to, amount, data) -} - -// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x5131ab59. -// -// Solidity: function executeWithERC20(address token, address to, uint256 amount, bytes data) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) ExecuteWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.ExecuteWithERC20(&_GatewayEVMEchidnaTest.TransactOpts, token, to, amount, data) -} - -// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x5131ab59. -// -// Solidity: function executeWithERC20(address token, address to, uint256 amount, bytes data) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) ExecuteWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.ExecuteWithERC20(&_GatewayEVMEchidnaTest.TransactOpts, token, to, amount, data) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "grantRole", role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.GrantRole(&_GatewayEVMEchidnaTest.TransactOpts, role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.GrantRole(&_GatewayEVMEchidnaTest.TransactOpts, role, account) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address tssAddress_, address zetaToken_, address admin_) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) Initialize(opts *bind.TransactOpts, tssAddress_ common.Address, zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "initialize", tssAddress_, zetaToken_, admin_) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address tssAddress_, address zetaToken_, address admin_) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) Initialize(tssAddress_ common.Address, zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Initialize(&_GatewayEVMEchidnaTest.TransactOpts, tssAddress_, zetaToken_, admin_) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address tssAddress_, address zetaToken_, address admin_) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) Initialize(tssAddress_ common.Address, zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Initialize(&_GatewayEVMEchidnaTest.TransactOpts, tssAddress_, zetaToken_, admin_) -} - -// Pause is a paid mutator transaction binding the contract method 0x8456cb59. -// -// Solidity: function pause() returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "pause") -} - -// Pause is a paid mutator transaction binding the contract method 0x8456cb59. -// -// Solidity: function pause() returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) Pause() (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Pause(&_GatewayEVMEchidnaTest.TransactOpts) -} - -// Pause is a paid mutator transaction binding the contract method 0x8456cb59. -// -// Solidity: function pause() returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) Pause() (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Pause(&_GatewayEVMEchidnaTest.TransactOpts) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "renounceRole", role, callerConfirmation) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.RenounceRole(&_GatewayEVMEchidnaTest.TransactOpts, role, callerConfirmation) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.RenounceRole(&_GatewayEVMEchidnaTest.TransactOpts, role, callerConfirmation) -} - -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xece697b3. -// -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) RevertWithERC20(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "revertWithERC20", token, to, amount, data, revertContext) -} - -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xece697b3. -// -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.RevertWithERC20(&_GatewayEVMEchidnaTest.TransactOpts, token, to, amount, data, revertContext) -} - -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xece697b3. -// -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.RevertWithERC20(&_GatewayEVMEchidnaTest.TransactOpts, token, to, amount, data, revertContext) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "revokeRole", role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.RevokeRole(&_GatewayEVMEchidnaTest.TransactOpts, role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.RevokeRole(&_GatewayEVMEchidnaTest.TransactOpts, role, account) -} - -// SetConnector is a paid mutator transaction binding the contract method 0x10188aef. -// -// Solidity: function setConnector(address zetaConnector_) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) SetConnector(opts *bind.TransactOpts, zetaConnector_ common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "setConnector", zetaConnector_) -} - -// SetConnector is a paid mutator transaction binding the contract method 0x10188aef. -// -// Solidity: function setConnector(address zetaConnector_) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) SetConnector(zetaConnector_ common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.SetConnector(&_GatewayEVMEchidnaTest.TransactOpts, zetaConnector_) -} - -// SetConnector is a paid mutator transaction binding the contract method 0x10188aef. -// -// Solidity: function setConnector(address zetaConnector_) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) SetConnector(zetaConnector_ common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.SetConnector(&_GatewayEVMEchidnaTest.TransactOpts, zetaConnector_) -} - -// SetCustody is a paid mutator transaction binding the contract method 0xae7a3a6f. -// -// Solidity: function setCustody(address custody_) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) SetCustody(opts *bind.TransactOpts, custody_ common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "setCustody", custody_) -} - -// SetCustody is a paid mutator transaction binding the contract method 0xae7a3a6f. -// -// Solidity: function setCustody(address custody_) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) SetCustody(custody_ common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.SetCustody(&_GatewayEVMEchidnaTest.TransactOpts, custody_) -} - -// SetCustody is a paid mutator transaction binding the contract method 0xae7a3a6f. -// -// Solidity: function setCustody(address custody_) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) SetCustody(custody_ common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.SetCustody(&_GatewayEVMEchidnaTest.TransactOpts, custody_) -} - -// TestExecuteWithERC20 is a paid mutator transaction binding the contract method 0x6ab90f9b. -// -// Solidity: function testExecuteWithERC20(address to, uint256 amount, bytes data) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) TestExecuteWithERC20(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "testExecuteWithERC20", to, amount, data) -} - -// TestExecuteWithERC20 is a paid mutator transaction binding the contract method 0x6ab90f9b. -// -// Solidity: function testExecuteWithERC20(address to, uint256 amount, bytes data) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) TestExecuteWithERC20(to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.TestExecuteWithERC20(&_GatewayEVMEchidnaTest.TransactOpts, to, amount, data) -} - -// TestExecuteWithERC20 is a paid mutator transaction binding the contract method 0x6ab90f9b. -// -// Solidity: function testExecuteWithERC20(address to, uint256 amount, bytes data) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) TestExecuteWithERC20(to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.TestExecuteWithERC20(&_GatewayEVMEchidnaTest.TransactOpts, to, amount, data) -} - -// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. -// -// Solidity: function unpause() returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "unpause") -} - -// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. -// -// Solidity: function unpause() returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) Unpause() (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Unpause(&_GatewayEVMEchidnaTest.TransactOpts) -} - -// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. -// -// Solidity: function unpause() returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) Unpause() (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Unpause(&_GatewayEVMEchidnaTest.TransactOpts) -} - -// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. -// -// Solidity: function updateTSSAddress(address newTSSAddress) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) UpdateTSSAddress(opts *bind.TransactOpts, newTSSAddress common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "updateTSSAddress", newTSSAddress) -} - -// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. -// -// Solidity: function updateTSSAddress(address newTSSAddress) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) UpdateTSSAddress(newTSSAddress common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.UpdateTSSAddress(&_GatewayEVMEchidnaTest.TransactOpts, newTSSAddress) -} - -// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. -// -// Solidity: function updateTSSAddress(address newTSSAddress) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) UpdateTSSAddress(newTSSAddress common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.UpdateTSSAddress(&_GatewayEVMEchidnaTest.TransactOpts, newTSSAddress) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.UpgradeToAndCall(&_GatewayEVMEchidnaTest.TransactOpts, newImplementation, data) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.UpgradeToAndCall(&_GatewayEVMEchidnaTest.TransactOpts, newImplementation, data) -} - -// GatewayEVMEchidnaTestCalledIterator is returned from FilterCalled and is used to iterate over the raw logs and unpacked data for Called events raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestCalledIterator struct { - Event *GatewayEVMEchidnaTestCalled // 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 *GatewayEVMEchidnaTestCalledIterator) 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(GatewayEVMEchidnaTestCalled) - 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(GatewayEVMEchidnaTestCalled) - 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 *GatewayEVMEchidnaTestCalledIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMEchidnaTestCalledIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMEchidnaTestCalled represents a Called event raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestCalled struct { - Sender common.Address - Receiver common.Address - Payload []byte - RevertOptions RevertOptions - Raw types.Log // Blockchain specific contextual infos -} - -// FilterCalled is a free log retrieval operation binding the contract event 0xd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d974. -// -// Solidity: event Called(address indexed sender, address indexed receiver, bytes payload, (address,bool,address,bytes,uint256) revertOptions) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterCalled(opts *bind.FilterOpts, sender []common.Address, receiver []common.Address) (*GatewayEVMEchidnaTestCalledIterator, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - var receiverRule []interface{} - for _, receiverItem := range receiver { - receiverRule = append(receiverRule, receiverItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.FilterLogs(opts, "Called", senderRule, receiverRule) - if err != nil { - return nil, err - } - return &GatewayEVMEchidnaTestCalledIterator{contract: _GatewayEVMEchidnaTest.contract, event: "Called", logs: logs, sub: sub}, nil -} - -// WatchCalled is a free log subscription operation binding the contract event 0xd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d974. -// -// Solidity: event Called(address indexed sender, address indexed receiver, bytes payload, (address,bool,address,bytes,uint256) revertOptions) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchCalled(opts *bind.WatchOpts, sink chan<- *GatewayEVMEchidnaTestCalled, sender []common.Address, receiver []common.Address) (event.Subscription, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - var receiverRule []interface{} - for _, receiverItem := range receiver { - receiverRule = append(receiverRule, receiverItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.WatchLogs(opts, "Called", senderRule, receiverRule) - 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(GatewayEVMEchidnaTestCalled) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Called", 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 -} - -// ParseCalled is a log parse operation binding the contract event 0xd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d974. -// -// Solidity: event Called(address indexed sender, address indexed receiver, bytes payload, (address,bool,address,bytes,uint256) revertOptions) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) ParseCalled(log types.Log) (*GatewayEVMEchidnaTestCalled, error) { - event := new(GatewayEVMEchidnaTestCalled) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Called", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMEchidnaTestDepositedIterator is returned from FilterDeposited and is used to iterate over the raw logs and unpacked data for Deposited events raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestDepositedIterator struct { - Event *GatewayEVMEchidnaTestDeposited // 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 *GatewayEVMEchidnaTestDepositedIterator) 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(GatewayEVMEchidnaTestDeposited) - 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(GatewayEVMEchidnaTestDeposited) - 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 *GatewayEVMEchidnaTestDepositedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMEchidnaTestDepositedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMEchidnaTestDeposited represents a Deposited event raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestDeposited struct { - Sender common.Address - Receiver common.Address - Amount *big.Int - Asset common.Address - Payload []byte - RevertOptions RevertOptions - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDeposited is a free log retrieval operation binding the contract event 0xc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c. -// -// Solidity: event Deposited(address indexed sender, address indexed receiver, uint256 amount, address asset, bytes payload, (address,bool,address,bytes,uint256) revertOptions) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterDeposited(opts *bind.FilterOpts, sender []common.Address, receiver []common.Address) (*GatewayEVMEchidnaTestDepositedIterator, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - var receiverRule []interface{} - for _, receiverItem := range receiver { - receiverRule = append(receiverRule, receiverItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.FilterLogs(opts, "Deposited", senderRule, receiverRule) - if err != nil { - return nil, err - } - return &GatewayEVMEchidnaTestDepositedIterator{contract: _GatewayEVMEchidnaTest.contract, event: "Deposited", logs: logs, sub: sub}, nil -} - -// WatchDeposited is a free log subscription operation binding the contract event 0xc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c. -// -// Solidity: event Deposited(address indexed sender, address indexed receiver, uint256 amount, address asset, bytes payload, (address,bool,address,bytes,uint256) revertOptions) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchDeposited(opts *bind.WatchOpts, sink chan<- *GatewayEVMEchidnaTestDeposited, sender []common.Address, receiver []common.Address) (event.Subscription, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - var receiverRule []interface{} - for _, receiverItem := range receiver { - receiverRule = append(receiverRule, receiverItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.WatchLogs(opts, "Deposited", senderRule, receiverRule) - 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(GatewayEVMEchidnaTestDeposited) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Deposited", 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 -} - -// ParseDeposited is a log parse operation binding the contract event 0xc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c. -// -// Solidity: event Deposited(address indexed sender, address indexed receiver, uint256 amount, address asset, bytes payload, (address,bool,address,bytes,uint256) revertOptions) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) ParseDeposited(log types.Log) (*GatewayEVMEchidnaTestDeposited, error) { - event := new(GatewayEVMEchidnaTestDeposited) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Deposited", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMEchidnaTestExecutedIterator is returned from FilterExecuted and is used to iterate over the raw logs and unpacked data for Executed events raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestExecutedIterator struct { - Event *GatewayEVMEchidnaTestExecuted // 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 *GatewayEVMEchidnaTestExecutedIterator) 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(GatewayEVMEchidnaTestExecuted) - 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(GatewayEVMEchidnaTestExecuted) - 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 *GatewayEVMEchidnaTestExecutedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMEchidnaTestExecutedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMEchidnaTestExecuted represents a Executed event raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestExecuted struct { - Destination common.Address - Value *big.Int - Data []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterExecuted is a free log retrieval operation binding the contract event 0xcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f. -// -// Solidity: event Executed(address indexed destination, uint256 value, bytes data) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterExecuted(opts *bind.FilterOpts, destination []common.Address) (*GatewayEVMEchidnaTestExecutedIterator, error) { - - var destinationRule []interface{} - for _, destinationItem := range destination { - destinationRule = append(destinationRule, destinationItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.FilterLogs(opts, "Executed", destinationRule) - if err != nil { - return nil, err - } - return &GatewayEVMEchidnaTestExecutedIterator{contract: _GatewayEVMEchidnaTest.contract, event: "Executed", logs: logs, sub: sub}, nil -} - -// WatchExecuted is a free log subscription operation binding the contract event 0xcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f. -// -// Solidity: event Executed(address indexed destination, uint256 value, bytes data) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchExecuted(opts *bind.WatchOpts, sink chan<- *GatewayEVMEchidnaTestExecuted, destination []common.Address) (event.Subscription, error) { - - var destinationRule []interface{} - for _, destinationItem := range destination { - destinationRule = append(destinationRule, destinationItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.WatchLogs(opts, "Executed", destinationRule) - 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(GatewayEVMEchidnaTestExecuted) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Executed", 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 -} - -// ParseExecuted is a log parse operation binding the contract event 0xcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f. -// -// Solidity: event Executed(address indexed destination, uint256 value, bytes data) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) ParseExecuted(log types.Log) (*GatewayEVMEchidnaTestExecuted, error) { - event := new(GatewayEVMEchidnaTestExecuted) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Executed", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMEchidnaTestExecutedWithERC20Iterator is returned from FilterExecutedWithERC20 and is used to iterate over the raw logs and unpacked data for ExecutedWithERC20 events raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestExecutedWithERC20Iterator struct { - Event *GatewayEVMEchidnaTestExecutedWithERC20 // 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 *GatewayEVMEchidnaTestExecutedWithERC20Iterator) 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(GatewayEVMEchidnaTestExecutedWithERC20) - 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(GatewayEVMEchidnaTestExecutedWithERC20) - 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 *GatewayEVMEchidnaTestExecutedWithERC20Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMEchidnaTestExecutedWithERC20Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMEchidnaTestExecutedWithERC20 represents a ExecutedWithERC20 event raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestExecutedWithERC20 struct { - Token common.Address - To common.Address - Amount *big.Int - Data []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterExecutedWithERC20 is a free log retrieval operation binding the contract event 0x29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382. -// -// Solidity: event ExecutedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterExecutedWithERC20(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*GatewayEVMEchidnaTestExecutedWithERC20Iterator, error) { - - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.FilterLogs(opts, "ExecutedWithERC20", tokenRule, toRule) - if err != nil { - return nil, err - } - return &GatewayEVMEchidnaTestExecutedWithERC20Iterator{contract: _GatewayEVMEchidnaTest.contract, event: "ExecutedWithERC20", logs: logs, sub: sub}, nil -} - -// WatchExecutedWithERC20 is a free log subscription operation binding the contract event 0x29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382. -// -// Solidity: event ExecutedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchExecutedWithERC20(opts *bind.WatchOpts, sink chan<- *GatewayEVMEchidnaTestExecutedWithERC20, token []common.Address, to []common.Address) (event.Subscription, error) { - - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.WatchLogs(opts, "ExecutedWithERC20", tokenRule, 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(GatewayEVMEchidnaTestExecutedWithERC20) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "ExecutedWithERC20", 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 -} - -// ParseExecutedWithERC20 is a log parse operation binding the contract event 0x29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382. -// -// Solidity: event ExecutedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) ParseExecutedWithERC20(log types.Log) (*GatewayEVMEchidnaTestExecutedWithERC20, error) { - event := new(GatewayEVMEchidnaTestExecutedWithERC20) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "ExecutedWithERC20", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMEchidnaTestInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestInitializedIterator struct { - Event *GatewayEVMEchidnaTestInitialized // 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 *GatewayEVMEchidnaTestInitializedIterator) 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(GatewayEVMEchidnaTestInitialized) - 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(GatewayEVMEchidnaTestInitialized) - 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 *GatewayEVMEchidnaTestInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMEchidnaTestInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMEchidnaTestInitialized represents a Initialized event raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestInitialized struct { - Version uint64 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. -// -// Solidity: event Initialized(uint64 version) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterInitialized(opts *bind.FilterOpts) (*GatewayEVMEchidnaTestInitializedIterator, error) { - - logs, sub, err := _GatewayEVMEchidnaTest.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &GatewayEVMEchidnaTestInitializedIterator{contract: _GatewayEVMEchidnaTest.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. -// -// Solidity: event Initialized(uint64 version) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *GatewayEVMEchidnaTestInitialized) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMEchidnaTest.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(GatewayEVMEchidnaTestInitialized) - if err := _GatewayEVMEchidnaTest.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 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. -// -// Solidity: event Initialized(uint64 version) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) ParseInitialized(log types.Log) (*GatewayEVMEchidnaTestInitialized, error) { - event := new(GatewayEVMEchidnaTestInitialized) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMEchidnaTestPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestPausedIterator struct { - Event *GatewayEVMEchidnaTestPaused // 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 *GatewayEVMEchidnaTestPausedIterator) 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(GatewayEVMEchidnaTestPaused) - 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(GatewayEVMEchidnaTestPaused) - 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 *GatewayEVMEchidnaTestPausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMEchidnaTestPausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMEchidnaTestPaused represents a Paused event raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestPaused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterPaused(opts *bind.FilterOpts) (*GatewayEVMEchidnaTestPausedIterator, error) { - - logs, sub, err := _GatewayEVMEchidnaTest.contract.FilterLogs(opts, "Paused") - if err != nil { - return nil, err - } - return &GatewayEVMEchidnaTestPausedIterator{contract: _GatewayEVMEchidnaTest.contract, event: "Paused", logs: logs, sub: sub}, nil -} - -// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *GatewayEVMEchidnaTestPaused) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMEchidnaTest.contract.WatchLogs(opts, "Paused") - 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(GatewayEVMEchidnaTestPaused) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Paused", 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 -} - -// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) ParsePaused(log types.Log) (*GatewayEVMEchidnaTestPaused, error) { - event := new(GatewayEVMEchidnaTestPaused) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Paused", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMEchidnaTestRevertedIterator is returned from FilterReverted and is used to iterate over the raw logs and unpacked data for Reverted events raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestRevertedIterator struct { - Event *GatewayEVMEchidnaTestReverted // 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 *GatewayEVMEchidnaTestRevertedIterator) 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(GatewayEVMEchidnaTestReverted) - 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(GatewayEVMEchidnaTestReverted) - 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 *GatewayEVMEchidnaTestRevertedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMEchidnaTestRevertedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMEchidnaTestReverted represents a Reverted event raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestReverted struct { - To common.Address - Token common.Address - Amount *big.Int - Data []byte - RevertContext RevertContext - Raw types.Log // Blockchain specific contextual infos -} - -// FilterReverted is a free log retrieval operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. -// -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMEchidnaTestRevertedIterator, error) { - - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.FilterLogs(opts, "Reverted", toRule, tokenRule) - if err != nil { - return nil, err - } - return &GatewayEVMEchidnaTestRevertedIterator{contract: _GatewayEVMEchidnaTest.contract, event: "Reverted", logs: logs, sub: sub}, nil -} - -// WatchReverted is a free log subscription operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. -// -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMEchidnaTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { - - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.WatchLogs(opts, "Reverted", toRule, tokenRule) - 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(GatewayEVMEchidnaTestReverted) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Reverted", 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 -} - -// ParseReverted is a log parse operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. -// -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) ParseReverted(log types.Log) (*GatewayEVMEchidnaTestReverted, error) { - event := new(GatewayEVMEchidnaTestReverted) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Reverted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMEchidnaTestRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestRoleAdminChangedIterator struct { - Event *GatewayEVMEchidnaTestRoleAdminChanged // 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 *GatewayEVMEchidnaTestRoleAdminChangedIterator) 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(GatewayEVMEchidnaTestRoleAdminChanged) - 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(GatewayEVMEchidnaTestRoleAdminChanged) - 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 *GatewayEVMEchidnaTestRoleAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMEchidnaTestRoleAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMEchidnaTestRoleAdminChanged represents a RoleAdminChanged event raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestRoleAdminChanged struct { - Role [32]byte - PreviousAdminRole [32]byte - NewAdminRole [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*GatewayEVMEchidnaTestRoleAdminChangedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) - if err != nil { - return nil, err - } - return &GatewayEVMEchidnaTestRoleAdminChangedIterator{contract: _GatewayEVMEchidnaTest.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil -} - -// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *GatewayEVMEchidnaTestRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) - 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(GatewayEVMEchidnaTestRoleAdminChanged) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "RoleAdminChanged", 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 -} - -// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) ParseRoleAdminChanged(log types.Log) (*GatewayEVMEchidnaTestRoleAdminChanged, error) { - event := new(GatewayEVMEchidnaTestRoleAdminChanged) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMEchidnaTestRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestRoleGrantedIterator struct { - Event *GatewayEVMEchidnaTestRoleGranted // 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 *GatewayEVMEchidnaTestRoleGrantedIterator) 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(GatewayEVMEchidnaTestRoleGranted) - 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(GatewayEVMEchidnaTestRoleGranted) - 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 *GatewayEVMEchidnaTestRoleGrantedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMEchidnaTestRoleGrantedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMEchidnaTestRoleGranted represents a RoleGranted event raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestRoleGranted struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*GatewayEVMEchidnaTestRoleGrantedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return &GatewayEVMEchidnaTestRoleGrantedIterator{contract: _GatewayEVMEchidnaTest.contract, event: "RoleGranted", logs: logs, sub: sub}, nil -} - -// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *GatewayEVMEchidnaTestRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) - 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(GatewayEVMEchidnaTestRoleGranted) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "RoleGranted", 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 -} - -// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) ParseRoleGranted(log types.Log) (*GatewayEVMEchidnaTestRoleGranted, error) { - event := new(GatewayEVMEchidnaTestRoleGranted) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "RoleGranted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMEchidnaTestRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestRoleRevokedIterator struct { - Event *GatewayEVMEchidnaTestRoleRevoked // 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 *GatewayEVMEchidnaTestRoleRevokedIterator) 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(GatewayEVMEchidnaTestRoleRevoked) - 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(GatewayEVMEchidnaTestRoleRevoked) - 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 *GatewayEVMEchidnaTestRoleRevokedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMEchidnaTestRoleRevokedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMEchidnaTestRoleRevoked represents a RoleRevoked event raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestRoleRevoked struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*GatewayEVMEchidnaTestRoleRevokedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return &GatewayEVMEchidnaTestRoleRevokedIterator{contract: _GatewayEVMEchidnaTest.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil -} - -// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *GatewayEVMEchidnaTestRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) - 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(GatewayEVMEchidnaTestRoleRevoked) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "RoleRevoked", 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 -} - -// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) ParseRoleRevoked(log types.Log) (*GatewayEVMEchidnaTestRoleRevoked, error) { - event := new(GatewayEVMEchidnaTestRoleRevoked) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "RoleRevoked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMEchidnaTestUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestUnpausedIterator struct { - Event *GatewayEVMEchidnaTestUnpaused // 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 *GatewayEVMEchidnaTestUnpausedIterator) 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(GatewayEVMEchidnaTestUnpaused) - 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(GatewayEVMEchidnaTestUnpaused) - 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 *GatewayEVMEchidnaTestUnpausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMEchidnaTestUnpausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMEchidnaTestUnpaused represents a Unpaused event raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestUnpaused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. -// -// Solidity: event Unpaused(address account) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterUnpaused(opts *bind.FilterOpts) (*GatewayEVMEchidnaTestUnpausedIterator, error) { - - logs, sub, err := _GatewayEVMEchidnaTest.contract.FilterLogs(opts, "Unpaused") - if err != nil { - return nil, err - } - return &GatewayEVMEchidnaTestUnpausedIterator{contract: _GatewayEVMEchidnaTest.contract, event: "Unpaused", logs: logs, sub: sub}, nil -} - -// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. -// -// Solidity: event Unpaused(address account) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *GatewayEVMEchidnaTestUnpaused) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMEchidnaTest.contract.WatchLogs(opts, "Unpaused") - 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(GatewayEVMEchidnaTestUnpaused) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Unpaused", 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 -} - -// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. -// -// Solidity: event Unpaused(address account) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) ParseUnpaused(log types.Log) (*GatewayEVMEchidnaTestUnpaused, error) { - event := new(GatewayEVMEchidnaTestUnpaused) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Unpaused", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMEchidnaTestUpdatedGatewayTSSAddressIterator is returned from FilterUpdatedGatewayTSSAddress and is used to iterate over the raw logs and unpacked data for UpdatedGatewayTSSAddress events raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestUpdatedGatewayTSSAddressIterator struct { - Event *GatewayEVMEchidnaTestUpdatedGatewayTSSAddress // 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 *GatewayEVMEchidnaTestUpdatedGatewayTSSAddressIterator) 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(GatewayEVMEchidnaTestUpdatedGatewayTSSAddress) - 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(GatewayEVMEchidnaTestUpdatedGatewayTSSAddress) - 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 *GatewayEVMEchidnaTestUpdatedGatewayTSSAddressIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMEchidnaTestUpdatedGatewayTSSAddressIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMEchidnaTestUpdatedGatewayTSSAddress represents a UpdatedGatewayTSSAddress event raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestUpdatedGatewayTSSAddress struct { - NewTSSAddress common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. -// -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterUpdatedGatewayTSSAddress(opts *bind.FilterOpts) (*GatewayEVMEchidnaTestUpdatedGatewayTSSAddressIterator, error) { - - logs, sub, err := _GatewayEVMEchidnaTest.contract.FilterLogs(opts, "UpdatedGatewayTSSAddress") - if err != nil { - return nil, err - } - return &GatewayEVMEchidnaTestUpdatedGatewayTSSAddressIterator{contract: _GatewayEVMEchidnaTest.contract, event: "UpdatedGatewayTSSAddress", logs: logs, sub: sub}, nil -} - -// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. -// -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchUpdatedGatewayTSSAddress(opts *bind.WatchOpts, sink chan<- *GatewayEVMEchidnaTestUpdatedGatewayTSSAddress) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMEchidnaTest.contract.WatchLogs(opts, "UpdatedGatewayTSSAddress") - 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(GatewayEVMEchidnaTestUpdatedGatewayTSSAddress) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "UpdatedGatewayTSSAddress", 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 -} - -// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. -// -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) ParseUpdatedGatewayTSSAddress(log types.Log) (*GatewayEVMEchidnaTestUpdatedGatewayTSSAddress, error) { - event := new(GatewayEVMEchidnaTestUpdatedGatewayTSSAddress) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "UpdatedGatewayTSSAddress", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMEchidnaTestUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestUpgradedIterator struct { - Event *GatewayEVMEchidnaTestUpgraded // 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 *GatewayEVMEchidnaTestUpgradedIterator) 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(GatewayEVMEchidnaTestUpgraded) - 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(GatewayEVMEchidnaTestUpgraded) - 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 *GatewayEVMEchidnaTestUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMEchidnaTestUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMEchidnaTestUpgraded represents a Upgraded event raised by the GatewayEVMEchidnaTest contract. -type GatewayEVMEchidnaTestUpgraded struct { - Implementation common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*GatewayEVMEchidnaTestUpgradedIterator, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.FilterLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return &GatewayEVMEchidnaTestUpgradedIterator{contract: _GatewayEVMEchidnaTest.contract, event: "Upgraded", logs: logs, sub: sub}, nil -} - -// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *GatewayEVMEchidnaTestUpgraded, implementation []common.Address) (event.Subscription, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _GatewayEVMEchidnaTest.contract.WatchLogs(opts, "Upgraded", implementationRule) - 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(GatewayEVMEchidnaTestUpgraded) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Upgraded", 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 -} - -// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) ParseUpgraded(log types.Log) (*GatewayEVMEchidnaTestUpgraded, error) { - event := new(GatewayEVMEchidnaTestUpgraded) - if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Upgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go deleted file mode 100644 index a53f2c849..000000000 --- a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go +++ /dev/null @@ -1,5342 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package gatewayevmupgrade - -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 - _ = abi.ConvertType -) - -// RevertContext is an auto generated low-level Go binding around an user-defined struct. -type RevertContext struct { - Asset common.Address - Amount *big.Int - RevertMessage []byte -} - -// RevertOptions is an auto generated low-level Go binding around an user-defined struct. -type RevertOptions struct { - RevertAddress common.Address - CallOnRevert bool - AbortAddress common.Address - RevertMessage []byte - OnRevertGasLimit *big.Int -} - -// StdInvariantFuzzArtifactSelector is an auto generated low-level Go binding around an user-defined struct. -type StdInvariantFuzzArtifactSelector struct { - Artifact string - Selectors [][4]byte -} - -// StdInvariantFuzzInterface is an auto generated low-level Go binding around an user-defined struct. -type StdInvariantFuzzInterface struct { - Addr common.Address - Artifacts []string -} - -// StdInvariantFuzzSelector is an auto generated low-level Go binding around an user-defined struct. -type StdInvariantFuzzSelector struct { - Addr common.Address - Selectors [][4]byte -} - -// GatewayEVMUUPSUpgradeTestMetaData contains all meta data concerning the GatewayEVMUUPSUpgradeTest contract. -var GatewayEVMUUPSUpgradeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testUpgradeAndForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061cafd8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e9190616216565b60405180910390f35b61011f610ae7565b60405161010e91906162b2565b610101610c29565b610101610c89565b610144610ce9565b60405161010e9190616418565b6100f7610e6b565b61016161152d565b60405161010e91906164b6565b6101766115fd565b60405161010e919061652d565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556027805482166112341790556028805490911661567817905560405161021290616129565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc90616129565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db90616136565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616143565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616150565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165c4565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165e6565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165e6565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616633565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616633565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a9392919061665c565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926111009291169087908790600401616686565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166ae565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166ef565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec929116908790600401616708565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616812565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616633565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165e6565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165e6565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165e6565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119909190616847565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a0161615d565b611a0c848483611ac2565b9150505b92915050565b611a1e61615d565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d929190616708565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616860565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168e1565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168e1565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616633565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168e1565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616812565b90506000611f1a8285604051602001611f069291906168f4565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616923565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120099190616847565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e11565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe9088908890600401616708565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169ce565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e25565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169ff565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a46565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f28565b6020820152600061248c8661430d565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a46565b868385602001516040516020016125109493929190616a8f565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168e1565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a46565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b93565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165c4565b61264b5781604051602001611d239190616be5565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c77565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a46565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cc9565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165c4565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cc9565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a46565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d1b565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d87565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a46565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616dac565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616dac565b6020026020010181905250846040516020016129889190616ddb565b604051602081830303815290604052816002815181106129aa576129aa616dac565b6020026020010181905250826040516020016129c69190616e47565b604051602081830303815290604052816003815181106129e8576129e8616dac565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614590565b612aa45785604051602001611d239190616e88565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f48565b935060ff1681518110612cfb57612cfb616dac565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f67565b604051602081830303815290604052828280612d6790616f48565b935060ff1681518110612d7c57612d7c616dac565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f48565b935060ff1681518110612dde57612dde616dac565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f48565b935060ff1681518110612e4057612e40616dac565b60200260200101819052508760200151828280612e5c90616f48565b935060ff1681518110612e7157612e71616dac565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f48565b935060ff1681518110612ed357612ed3616dac565b602090810291909101015287518282612eeb81616f48565b935060ff1681518110612f0057612f00616dac565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f48565b935060ff1681518110612f6257612f62616dac565b6020026020010181905250612f76466145f1565b8282612f8181616f48565b935060ff1681518110612f9657612f96616dac565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f48565b935060ff1681518110612ff857612ff8616dac565b60200260200101819052508682828061301090616f48565b935060ff168151811061302557613025616dac565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f48565b935060ff168151811061308b5761308b616dac565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168e1565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a46565b828261312b81616f48565b935060ff168151811061314057613140616dac565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f48565b935060ff16815181106131aa576131aa616dac565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f48565b935060ff168151811061320c5761320c616dac565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f48565b935060ff16815181106132ac576132ac616dac565b60200260200101819052508460a001516040516020016132cc9190616ddb565b6040516020818303038152906040528282806131f790616f48565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f48565b935060ff168151811061338357613383616dac565b602002602001018190525061339788614691565b6040516020016133a79190616ddb565b6040516020818303038152906040528282806133c290616f48565b935060ff16815181106133d7576133d7616dac565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f48565b935060ff168151811061346f5761346f616dac565b6020026020010181905250846040015182828061348b90616f48565b935060ff16815181106134a0576134a0616dac565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f48565b935060ff168151811061350a5761350a616dac565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a46565b82826135ac81616f48565b935060ff16815181106135c1576135c1616dac565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f48565b935060ff168151811061362c5761362c616dac565b60200260200101819052506136488560e00151600001516145f1565b828261365381616f48565b935060ff168151811061366857613668616dac565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f48565b935060ff16815181106136d6576136d6616dac565b60200260200101819052506136f28560e00151602001516145f1565b82826136fd81616f48565b935060ff168151811061371257613712616dac565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f48565b935060ff168151811061378057613780616dac565b602002602001018190525061379c8560e00151604001516145f1565b82826137a781616f48565b935060ff16815181106137bc576137bc616dac565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f48565b935060ff168151811061382a5761382a616dac565b60200260200101819052506138468560e00151606001516145f1565b828261385181616f48565b935060ff168151811061386657613866616dac565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061672a565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616dac565b6020026020010151828260ff168151811061390957613909616dac565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fd2565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a46565b90506000613a2b8683615180565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164b6565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa29190810190617019565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616dac565b6020026020010151604051602001611d2391906170cf565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152d5565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152fc565b9061535e565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152d5565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153e3565b90505b613cba81615409565b92505050611b36565b8215613cdc578484604051602001611d239291906172bb565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e25565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617362565b600060405180830381855afa9150503d8060008114613dc9576040519150601f19603f3d011682016040523d82523d6000602084013e613dce565b606091505b5091509150818015613de1575060208151115b15613dfa57808060200190518101906139239190616a46565b505060408051602081019091526000815292915050565b6000613e1d8383615472565b159392505050565b8160a0015115613e3457505050565b6000613e4184848461554d565b90506000613e4e8261392b565b602081015181519192509060030b158015613eea5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613eea90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613ef757505050505050565b60408201515115613f17578160400151604051602001611d23919061737e565b80604051602001611d2391906173dc565b60606000613f5d8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fc2905b8290614590565b1561403157604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b369061402c908390615ae8565b615409565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614093905b8290615b72565b60010361416057604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140f990613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b369061402c905b83906153e3565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141bf90613fbb565b156142f657604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614227908390615c0c565b90506000816001835161423a9190617447565b8151811061424a5761424a616dac565b602002602001015190506142ed61402c6142c06040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615ae8565b95945050505050565b82604051602001611d23919061745a565b50919050565b606060006143428360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506143a490613fbb565b156143b257611b3681615409565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144119061408c565b60010361447b57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b369061402c90614159565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144da90613fbb565b156142f657604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614542908390615c0c565b905060018151111561457e57806002825161455d9190617447565b8151811061456d5761456d616dac565b602002602001015192505050919050565b5082604051602001611d23919061745a565b8051825160009111156145a557506000611a10565b815183516020850151600092916145bb91617538565b6145c59190617447565b9050826020015181036145dc576001915050611a10565b82516020840151819020912014905092915050565b606060006145fe83615cb1565b600101905060008167ffffffffffffffff81111561461e5761461e61672a565b6040519080825280601f01601f191660200182016040528015614648576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461465257509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161471d905b8290613e11565b1561475d57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147bc90614716565b156147fc57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261485b90614716565b1561489b57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148fa90614716565b8061495f5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261495f90614716565b1561499f57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149fe90614716565b80614a635750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a6390614716565b15614aa357505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b0290614716565b80614b675750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6790614716565b15614ba757505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c0690614716565b80614c6b5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c6b90614716565b15614cab57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d0a90614716565b15614d4a57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614da990614716565b15614de957505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e4890614716565b15614e8857505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ee790614716565b15614f2757505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f8690614716565b15614fc657505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261502590614716565b8061508a5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261508a90614716565b156150ca57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261512990614716565b1561516957505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d23929060200161754b565b60608060005b845181101561520b57818582815181106151a2576151a2616dac565b60200260200101516040516020016151bb9291906168f4565b6040516020818303038152906040529150600185516151da9190617447565b811461520357816040516020016151f191906176b4565b60405160208183030381529060405291505b600101615186565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615224579050509050838160008151811061524f5761524f616dac565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106152a3576152a3616dac565b602002602001018190525081816002815181106152c2576152c2616dac565b6020908102919091010152949350505050565b60208083015183518351928401516000936152f39291849190615d93565b14159392505050565b6040805180820190915260008082526020820152600061532e8460000151856020015185600001518660200151615ea4565b90508360200151816153409190617447565b8451859061534f908390617447565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615383575081611a10565b60208083015190840151600191146153aa5750815160208481015190840151829020919020145b80156153db578251845185906153c1908390617447565b90525082516020850180516153d7908390617538565b9052505b509192915050565b6040805180820190915260008082526020820152615402838383615fc4565b5092915050565b60606000826000015167ffffffffffffffff81111561542a5761542a61672a565b6040519080825280601f01601f191660200182016040528015615454576020820181803683370190505b5090506000602082019050615402818560200151866000015161606f565b8151815160009190811115615485575081515b6020808501519084015160005b8381101561553e578251825180821461550e5760001960208710156154ed576001846154bf896020617447565b6154c99190617538565b6154d49060086176f5565b6154df9060026177f3565b6154e99190617447565b1990505b818116838216818103911461550b579750611a109650505050505050565b50505b615519602086617538565b9450615526602085617538565b935050506020816155379190617538565b9050615492565b5084518651612aa491906177ff565b60606000615559612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161557657905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155d190616f48565b935060ff16815181106155e6576155e6616dac565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001615637919061781f565b60405160208183030381529060405282828061565290616f48565b935060ff168151811061566757615667616dac565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156b490616f48565b935060ff16815181106156c9576156c9616dac565b6020026020010181905250826040516020016156e59190616e47565b60405160208183030381529060405282828061570090616f48565b935060ff168151811061571557615715616dac565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061576290616f48565b935060ff168151811061577757615777616dac565b602002602001018190525061578c87846160e9565b828261579781616f48565b935060ff16815181106157ac576157ac616dac565b6020908102919091010152855151156158585760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157fe81616f48565b935060ff168151811061581357615813616dac565b602002602001018190525061582c8660000151846160e9565b828261583781616f48565b935060ff168151811061584c5761584c616dac565b60200260200101819052505b8560800151156158c65760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826158a181616f48565b935060ff16815181106158b6576158b6616dac565b602002602001018190525061592c565b841561592c5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590b81616f48565b935060ff168151811061592057615920616dac565b60200260200101819052505b604086015151156159c85760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261597681616f48565b935060ff168151811061598b5761598b616dac565b602002602001018190525085604001518282806159a790616f48565b935060ff16815181106159bc576159bc616dac565b60200260200101819052505b856060015115615a325760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a1181616f48565b935060ff1681518110615a2657615a26616dac565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a5057615a5061672a565b604051908082528060200260200182016040528015615a8357816020015b6060815260200190600190039081615a6e5790505b50905060005b8260ff168160ff161015615adc57838160ff1681518110615aac57615aac616dac565b6020026020010151828260ff1681518110615ac957615ac9616dac565b6020908102919091010152600101615a89565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b0d575081611a10565b81518351602085015160009291615b2391617538565b615b2d9190617447565b60208401519091506001908214615b4e575082516020840151819020908220145b8015615b6957835185518690615b65908390617447565b9052505b50929392505050565b6000808260000151615b968560000151866020015186600001518760200151615ea4565b615ba09190617538565b90505b83516020850151615bb49190617538565b81116154025781615bc481617864565b9250508260000151615bfb856020015183615bdf9190617447565b8651615beb9190617447565b8386600001518760200151615ea4565b615c059190617538565b9050615ba3565b60606000615c1a8484615b72565b615c25906001617538565b67ffffffffffffffff811115615c3d57615c3d61672a565b604051908082528060200260200182016040528015615c7057816020015b6060815260200190600190039081615c5b5790505b50905060005b8151811015613cf257615c8c61402c86866153e3565b828281518110615c9e57615c9e616dac565b6020908102919091010152600101615c76565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cfa577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d26576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d4457662386f26fc10000830492506010015b6305f5e1008310615d5c576305f5e100830492506008015b6127108310615d7057612710830492506004015b60648310615d82576064830492506002015b600a8310611a105760010192915050565b600080858411615e9a5760208411615e465760008415615dde576001615dba866020617447565b615dc59060086176f5565b615dd09060026177f3565b615dda9190617447565b1990505b8351811685615ded8989617538565b615df79190617447565b805190935082165b818114615e3157878411615e195787945050505050613923565b83615e238161787e565b945050828451169050615dff565b615e3b8785617538565b945050505050613923565b838320615e538588617447565b615e5d9087617538565b91505b858210615e9857848220808203615e8557615e7b8684617538565b9350505050613923565b615e90600184617447565b925050615e60565b505b5092949350505050565b60008381868511615faf5760208511615f5e5760008515615ef0576001615ecc876020617447565b615ed79060086176f5565b615ee29060026177f3565b615eec9190617447565b1990505b84518116600087615f018b8b617538565b615f0b9190617447565b855190915083165b828114615f5057818610615f3857615f2b8b8b617538565b9650505050505050613923565b85615f4281617864565b965050838651169050615f13565b859650505050505050613923565b508383206000905b615f708689617447565b8211615fad57858320808203615f8c5783945050505050613923565b615f97600185617538565b9350508180615fa590617864565b925050615f66565b505b615fb98787617538565b979650505050505050565b60408051808201909152600080825260208201526000615ff68560000151866020015186600001518760200151615ea4565b6020808701805191860191909152519091506160129082617447565b8352845160208601516160259190617538565b81036160345760008552616066565b835183516160429190617538565b85518690616051908390617447565b90525083516160609082617538565b60208601525b50909392505050565b602081106160a75781518352616086602084617538565b9250616093602083617538565b91506160a0602082617447565b905061606f565b60001981156160d65760016160bd836020617447565b6160c9906101006177f3565b6160d39190617447565b90505b9151835183169219169190911790915250565b606060006160f784846123f6565b805160208083015160405193945061611193909101617895565b60405160208183030381529060405291505092915050565b610c9f806178ee83390190565b611de78061858d83390190565b6119938061a37483390190565b610dc18061bd0783390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016161a06161a5565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161a06040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156162575783516001600160a01b0316835260209384019390920191600101616230565b509095945050505050565b60005b8381101561627d578181015183820152602001616265565b50506000910152565b6000815180845261629e816020860160208601616262565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616394577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637e848651616286565b6020958601959094509290920191600101616344565b5091975050506020948501949290920191506001016162da565b50929695505050505050565b600081518084526020840193506020830160005b8281101561640e5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163ce565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526164846040880182616286565b905060208201519150868103602088015261649f81836163ba565b965050506020938401939190910190600101616440565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452616518858351616286565b945060209384019391909101906001016164de565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165ae60408701826163ba565b9550506020938401939190910190600101616555565b6000602082840312156165d657600080fd5b81518015158114611b3657600080fd5b600181811c908216806165fa57607f821691505b602082108103614307577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561664557600080fd5b81516001600160a01b0381168114611b3657600080fd5b60608152600061666f6060830186616286565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142ed6060830184616286565b6001600160a01b038616815284602082015260a0604082015260006166d660a0830186616286565b6060830194909452509015156080909101529392505050565b8281526040602082015260006139236040830184616286565b6001600160a01b03831681526040602082015260006139236040830184616286565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561677c5761677c61672a565b60405290565b60008067ffffffffffffffff84111561679d5761679d61672a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167cc576167cc61672a565b6040528381529050808284018510156167e457600080fd5b613cf2846020830185616262565b600082601f83011261680357600080fd5b611b3683835160208501616782565b60006020828403121561682457600080fd5b815167ffffffffffffffff81111561683b57600080fd5b611a0c848285016167f2565b60006020828403121561685957600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161689881601a850160208801616262565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168d581601c840160208801616262565b01601c01949350505050565b602081526000611b366020830184616286565b60008351616906818460208801616262565b83519083019061691a818360208801616262565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695b81601a850160208801616262565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351616998816033840160208801616262565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142ed6060830184616286565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b366080830184616286565b600060208284031215616a5857600080fd5b815167ffffffffffffffff811115616a6f57600080fd5b8201601f81018413616a8057600080fd5b611a0c84825160208401616782565b60008551616aa1818460208a01616262565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616adb816001840160208a01616262565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b19816002840160208901616262565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b5b816002840160208801616262565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616ba66040830184616286565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1d81601f850160208701616262565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c8a6040830184616286565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cdc6040830184616286565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d53816014850160208701616262565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d9a6040830185616286565b8281036020840152611b328185616286565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e13816001850160208701616262565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e59818460208701616262565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0c81604b850160208701616262565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5e57616f5e616f19565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fc5816029850160208701616262565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b366080830184616286565b60006020828403121561702b57600080fd5b815167ffffffffffffffff81111561704257600080fd5b82016060818503121561705457600080fd5b61705c616759565b81518060030b811461706d57600080fd5b8152602082015167ffffffffffffffff81111561708957600080fd5b617095868285016167f2565b602083015250604082015167ffffffffffffffff8111156170b557600080fd5b6170c1868285016167f2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161712d816021850160208701616262565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351617319816021850160208801616262565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161735681602e840160208801616262565b01602e01949350505050565b60008251617374818460208701616262565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fc5816029850160208701616262565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161743a816022850160208701616262565b9190910160220192915050565b81810381811115611a1057611a10616f19565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161749281600e850160208701616262565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f19565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617583816018850160208801616262565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175c081601c840160208801616262565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176c6818460208701616262565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f19565b6001815b60018411156177475780850481111561772b5761772b616f19565b600184161561773957908102905b60019390931c928002617710565b935093915050565b60008261775e57506001611a10565b8161776b57506000611a10565b8160018114617781576002811461778b576177a7565b6001915050611a10565b60ff84111561779c5761779c616f19565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177ca575081810a611a10565b6177d7600019848461770c565b80600019048211156177eb576177eb616f19565b029392505050565b6000611b36838361774f565b818103600083128015838313168383128216171561540257615402616f19565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161785781601c850160208701616262565b91909101601c0192915050565b6000600019820361787757617877616f19565b5060010190565b60008161788d5761788d616f19565b506000190190565b600083516178a7818460208801616262565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178e1816001840160208801616262565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611de7380380611de783398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611dc78339815191528261014c565b50610143600080516020611dc78339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611b50610277600039600081816101d501528181610574015281816105c9015281816107e6015261083b0152611b506000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638456cb59116100ee578063a217fddf11610097578063d9caed1211610071578063d9caed12146103e0578063e609055e146103f3578063e63ab1e914610406578063eab103df1461042d57600080fd5b8063a217fddf146103a2578063d547741f146103aa578063d936547e146103bd57600080fd5b8063950837aa116100c8578063950837aa146103695780639a5904271461037c5780639b19251a1461038f57600080fd5b80638456cb591461030157806385f438c11461030957806391d148541461033057600080fd5b806336568abe116101505780635b1125911161012a5780635b112591146102d05780635c975abb146102e35780637ab697e7146102ee57600080fd5b806336568abe1461028e5780633f4ba83a146102a1578063570618e1146102a957600080fd5b8063248a9ca311610181578063248a9ca314610224578063252f07bf146102565780632f2ff15d1461027b57600080fd5b806301ffc9a7146101a8578063116191b6146101d057806321fc65f21461020f575b600080fd5b6101bb6101b636600461155e565b610440565b60405190151581526020015b60405180910390f35b6101f77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c7565b61022261021d3660046115fe565b6104d9565b005b610248610232366004611671565b6000908152600160208190526040909120015490565b6040519081526020016101c7565b6004546101bb9074010000000000000000000000000000000000000000900460ff1681565b61022261028936600461168a565b610699565b61022261029c36600461168a565b6106c5565b610222610716565b6102487f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101f7906001600160a01b031681565b60025460ff166101bb565b6102226102fc3660046116ba565b61074b565b610222610910565b6102487f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101bb61033e36600461168a565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61022261037736600461175d565b610942565b61022261038a36600461175d565b610ac0565b61022261039d36600461175d565b610b74565b610248600081565b6102226103b836600461168a565b610c2b565b6101bb6103cb36600461175d565b60036020526000908152604090205460ff1681565b6102226103ee36600461177a565b610c51565b6102226104013660046117bb565b610d49565b6102487f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61022261043b36600461185a565b610f75565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104e1610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461050b8161100e565b610513611018565b6001600160a01b03851660009081526003602052604090205460ff16610565576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105996001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086611057565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106069088908a908990899089906004016118c0565b600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161067f93929190611903565b60405180910390a3506106926001600055565b5050505050565b600082815260016020819052604090912001546106b58161100e565b6106bf83836110cb565b50505050565b6001600160a01b0381163314610707576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610711828261115e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107408161100e565b6107486111e5565b50565b610753610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461077d8161100e565b610785611018565b6001600160a01b03861660009081526003602052604090205460ff166107d7576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61080b6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087611057565b6040517fece697b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ece697b39061087a9089908b908a908a908a908a906004016119bf565b600060405180830381600087803b15801561089457600080fd5b505af11580156108a8573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640878787876040516108f59493929190611a16565b60405180910390a3506109086001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61093a8161100e565b610748611237565b600061094d8161100e565b6001600160a01b03821661098d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546109c4907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661115e565b506004546109fc907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661115e565b50610a277f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836110cb565b50610a527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a836110cb565b50600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527f086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba9060200160405180910390a15050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610aea8161100e565b6001600160a01b038216610b2a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610b9e8161100e565b6001600160a01b038216610bde576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610c478161100e565b6106bf838361115e565b610c59610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610c838161100e565b610c8b611018565b6001600160a01b03831660009081526003602052604090205460ff16610cdd576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf16001600160a01b0384168584611057565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610d3691815260200190565b60405180910390a3506107116001600055565b610d51610fcb565b610d59611018565b60045474010000000000000000000000000000000000000000900460ff16610dad576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610dff576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a42565b9050610e9a6001600160a01b038616333087611274565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f459190611a42565b610f4f9190611a5b565b8787604051610f62959493929190611a95565b60405180910390a2506109086001600055565b6000610f808161100e565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403611007576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61074881336112ad565b60025460ff1615611055576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611324565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166111565760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104d3565b5060006104d3565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16156111565760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104d3565b6111ed6113a0565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61123f611018565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861121a3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106bf9186918216906323b872dd90608401611084565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611320576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b60006113396001600160a01b038416836113dc565b9050805160001415801561135e57508080602001905181019061135c9190611ace565b155b15610711576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611317565b60025460ff16611055576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606113ea838360006113f1565b9392505050565b60608147101561142f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611317565b600080856001600160a01b0316848660405161144b9190611aeb565b60006040518083038185875af1925050503d8060008114611488576040519150601f19603f3d011682016040523d82523d6000602084013e61148d565b606091505b509150915061149d8683836114a7565b9695505050505050565b6060826114bc576114b78261151c565b6113ea565b81511580156114d357506001600160a01b0384163b155b15611515576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611317565b50806113ea565b80511561152c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561157057600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113ea57600080fd5b6001600160a01b038116811461074857600080fd5b60008083601f8401126115c757600080fd5b50813567ffffffffffffffff8111156115df57600080fd5b6020830191508360208285010111156115f757600080fd5b9250929050565b60008060008060006080868803121561161657600080fd5b8535611621816115a0565b94506020860135611631816115a0565b935060408601359250606086013567ffffffffffffffff81111561165457600080fd5b611660888289016115b5565b969995985093965092949392505050565b60006020828403121561168357600080fd5b5035919050565b6000806040838503121561169d57600080fd5b8235915060208301356116af816115a0565b809150509250929050565b60008060008060008060a087890312156116d357600080fd5b86356116de816115a0565b955060208701356116ee816115a0565b945060408701359350606087013567ffffffffffffffff81111561171157600080fd5b61171d89828a016115b5565b909450925050608087013567ffffffffffffffff81111561173d57600080fd5b87016060818a03121561174f57600080fd5b809150509295509295509295565b60006020828403121561176f57600080fd5b81356113ea816115a0565b60008060006060848603121561178f57600080fd5b833561179a816115a0565b925060208401356117aa816115a0565b929592945050506040919091013590565b600080600080600080608087890312156117d457600080fd5b863567ffffffffffffffff8111156117eb57600080fd5b6117f789828a016115b5565b909750955050602087013561180b816115a0565b935060408701359250606087013567ffffffffffffffff81111561182e57600080fd5b61183a89828a016115b5565b979a9699509497509295939492505050565b801515811461074857600080fd5b60006020828403121561186c57600080fd5b81356113ea8161184c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b03851660208201528360408201526080606082015260006118f8608083018486611877565b979650505050505050565b83815260406020820152600061191d604083018486611877565b95945050505050565b60008135611933816115a0565b6001600160a01b03168352602082810135908401526040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261197e57600080fd5b820160208101903567ffffffffffffffff81111561199b57600080fd5b8036038213156119aa57600080fd5b6060604086015261191d606086018284611877565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006119f760a083018587611877565b8281036080840152611a098185611926565b9998505050505050505050565b848152606060208201526000611a30606083018587611877565b82810360408401526118f88185611926565b600060208284031215611a5457600080fd5b5051919050565b818103818111156104d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611aa9606083018789611877565b8560208401528281036040840152611ac2818587611877565b98975050505050505050565b600060208284031215611ae057600080fd5b81516113ea8161184c565b6000825160005b81811015611b0c5760208186018101518583015201611af2565b50600092019182525091905056fea2646970667358221220a57d389b60850bdfffcd53692f80a9c416ca5b9b4d1b7d58052beba77fb7a96b64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960045534801561001657600080fd5b5060405161199338038061199383398101604081905261003591610238565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100dd60008261016c565b506101087f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361016c565b506101337f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361016c565b5061015e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261016c565b50505050505050505061028c565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166102125760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610216565b5060005b92915050565b80516001600160a01b038116811461023357600080fd5b919050565b6000806000806080858703121561024e57600080fd5b6102578561021c565b93506102656020860161021c565b92506102736040860161021c565b91506102816060860161021c565b905092959194509250565b60805160a0516116a36102f060003960008181610220015281816106d80152818161084a01528181610b6301528181610ce40152610e060152600081816101d401528181610648015281816106ab01528181610ad30152610b3601526116a36000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80636f8b44b0116100e3578063a217fddf1161008c578063d547741f11610066578063d547741f146103cf578063d5abeb01146103e2578063e63ab1e9146103eb57600080fd5b8063a217fddf1461038d578063a783c78914610395578063afd2dce4146103bc57600080fd5b806385f438c1116100bd57806385f438c11461030d57806391d1485414610334578063950837aa1461037a57600080fd5b80636f8b44b0146102df578063743e0c9b146102f25780638456cb591461030557600080fd5b80632f2ff15d116101455780635b1125911161011f5780635b112591146102a15780635c975abb146102c15780635e3e9fef146102cc57600080fd5b80632f2ff15d1461027357806336568abe146102865780633f4ba83a1461029957600080fd5b8063116191b611610176578063116191b6146101cf57806321e093b11461021b578063248a9ca31461024257600080fd5b806301ffc9a714610192578063106e6290146101ba575b600080fd5b6101a56101a03660046111c8565b610412565b60405190151581526020015b60405180910390f35b6101cd6101c836600461123a565b6104ab565b005b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b61026561025036600461126d565b60009081526002602052604090206001015490565b6040519081526020016101b1565b6101cd610281366004611286565b610550565b6101cd610294366004611286565b61057b565b6101cd6105d4565b6003546101f69073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff166101a5565b6101cd6102da3660046112fb565b610609565b6101cd6102ed36600461126d565b61079e565b6101cd61030036600461126d565b61080d565b6101cd6108b7565b6102657f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a5610342366004611286565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cd61038836600461135d565b6108e9565b610265600081565b6102657f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101cd6103ca366004611378565b610a94565b6101cd6103dd366004611286565b610c2e565b61026560045481565b6102657f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104a557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104b3610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104dd81610c96565b6104e5610ca0565b6104f0848484610cdf565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161053891815260200190565b60405180910390a25061054b6001600055565b505050565b60008281526002602052604090206001015461056b81610c96565b6105758383610e67565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146105ca576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61054b8282610f67565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fe81610c96565b610606611026565b50565b610611610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461063b81610c96565b610643610ca0565b61066e7f00000000000000000000000000000000000000000000000000000000000000008684610cdf565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610708907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611459565b600060405180830381600087803b15801561072257600080fd5b505af1158015610736573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610784939291906114b6565b60405180910390a2506107976001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c881610c96565b6107d0610ca0565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c906020015b60405180910390a15050565b610815610ca0565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156108a357600080fd5b505af1158015610797573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108e181610c96565b6106066110a3565b60006108f481610c96565b73ffffffffffffffffffffffffffffffffffffffff8216610941576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354610985907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e49073ffffffffffffffffffffffffffffffffffffffff16610f67565b506003546109ca907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb9073ffffffffffffffffffffffffffffffffffffffff16610f67565b506109f57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610e67565b50610a207f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610e67565b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f190602001610801565b610a9c610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ac681610c96565b610ace610ca0565b610af97f00000000000000000000000000000000000000000000000000000000000000008785610cdf565b6040517fece697b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ece697b390610b95907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161157d565b600060405180830381600087803b158015610baf57600080fd5b505af1158015610bc3573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac87878786604051610c1394939291906115ee565b60405180910390a250610c266001600055565b505050505050565b600082815260026020526040902060010154610c4981610c96565b6105758383610f67565b600260005403610c8f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61060681336110fc565b60015460ff1615610cdd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d71919061161a565b610d7b9084611633565b1115610db3576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610e4a57600080fd5b505af1158015610e5e573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610efd3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016104a5565b5060006104a5565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104a5565b61102e61118c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6110ab610ca0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611079565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611188576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610cdd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156111da57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461120a57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461123557600080fd5b919050565b60008060006060848603121561124f57600080fd5b61125884611211565b95602085013595506040909401359392505050565b60006020828403121561127f57600080fd5b5035919050565b6000806040838503121561129957600080fd5b823591506112a960208401611211565b90509250929050565b60008083601f8401126112c457600080fd5b50813567ffffffffffffffff8111156112dc57600080fd5b6020830191508360208285010111156112f457600080fd5b9250929050565b60008060008060006080868803121561131357600080fd5b61131c86611211565b945060208601359350604086013567ffffffffffffffff81111561133f57600080fd5b61134b888289016112b2565b96999598509660600135949350505050565b60006020828403121561136f57600080fd5b61120a82611211565b60008060008060008060a0878903121561139157600080fd5b61139a87611211565b955060208701359450604087013567ffffffffffffffff8111156113bd57600080fd5b6113c989828a016112b2565b90955093505060608701359150608087013567ffffffffffffffff8111156113f057600080fd5b87016060818a03121561140257600080fd5b809150509295509295509295565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114ab608083018486611410565b979650505050505050565b8381526040602082015260006114d0604083018486611410565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff6114f782611211565b1682526020818101359083015260006040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261153c57600080fd5b820160208101903567ffffffffffffffff81111561155957600080fd5b80360382131561156857600080fd5b606060408601526114d0606086018284611410565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a0606082015260006115cf60a083018587611410565b82810360808401526115e181856114d9565b9998505050505050505050565b848152606060208201526000611608606083018587611410565b82810360408401526114ab81856114d9565b60006020828403121561162c57600080fd5b5051919050565b808201808211156104a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206fa68043397322d1636dba3251c7e40948706562c8e08173e2df059302eb268d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d9d806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c578063a9b0a73c146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106f9565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7fcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e53382604051610210929190610a2f565b60405180910390a150565b61022361036f565b6000610230600285610b38565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610be1565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c6b565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d2e565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d4b565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610a6d83610694565b166040820152600080602084013590508060608401525060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ab957600080fd5b830160208101903567ffffffffffffffff811115610ad657600080fd5b803603821315610ae557600080fd5b606060808501528060a0850152808260c0860137600060c0828601015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509392505050565b600082610b6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b8e578181015183820152602001610b76565b50506000910152565b60008151808452610baf816020860160208601610b73565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c1660a0830186610b97565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c61578151865260209586019590910190600101610c43565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610cfe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610ce9858351610b97565b94506020938401939190910190600101610caf565b505050508281036040840152610d148186610c2f565b915050610d25606083018415159052565b95945050505050565b600060208284031215610d4057600080fd5b81516104f681610840565b60008251610d5d818460208701610b73565b919091019291505056fea264697066735822122098725982494f2e15151404f3fbfc80b0517e09c0b3e8ae0e6602ac62c5ba8d0d64736f6c634300081a0033a2646970667358221220f36eacbd9075a47cf2c168e0db119222bb631d9a8273ef458cc79e80465cd81564736f6c634300081a0033", -} - -// GatewayEVMUUPSUpgradeTestABI is the input ABI used to generate the binding from. -// Deprecated: Use GatewayEVMUUPSUpgradeTestMetaData.ABI instead. -var GatewayEVMUUPSUpgradeTestABI = GatewayEVMUUPSUpgradeTestMetaData.ABI - -// GatewayEVMUUPSUpgradeTestBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use GatewayEVMUUPSUpgradeTestMetaData.Bin instead. -var GatewayEVMUUPSUpgradeTestBin = GatewayEVMUUPSUpgradeTestMetaData.Bin - -// DeployGatewayEVMUUPSUpgradeTest deploys a new Ethereum contract, binding an instance of GatewayEVMUUPSUpgradeTest to it. -func DeployGatewayEVMUUPSUpgradeTest(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *GatewayEVMUUPSUpgradeTest, error) { - parsed, err := GatewayEVMUUPSUpgradeTestMetaData.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(GatewayEVMUUPSUpgradeTestBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &GatewayEVMUUPSUpgradeTest{GatewayEVMUUPSUpgradeTestCaller: GatewayEVMUUPSUpgradeTestCaller{contract: contract}, GatewayEVMUUPSUpgradeTestTransactor: GatewayEVMUUPSUpgradeTestTransactor{contract: contract}, GatewayEVMUUPSUpgradeTestFilterer: GatewayEVMUUPSUpgradeTestFilterer{contract: contract}}, nil -} - -// GatewayEVMUUPSUpgradeTest is an auto generated Go binding around an Ethereum contract. -type GatewayEVMUUPSUpgradeTest struct { - GatewayEVMUUPSUpgradeTestCaller // Read-only binding to the contract - GatewayEVMUUPSUpgradeTestTransactor // Write-only binding to the contract - GatewayEVMUUPSUpgradeTestFilterer // Log filterer for contract events -} - -// GatewayEVMUUPSUpgradeTestCaller is an auto generated read-only Go binding around an Ethereum contract. -type GatewayEVMUUPSUpgradeTestCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// GatewayEVMUUPSUpgradeTestTransactor is an auto generated write-only Go binding around an Ethereum contract. -type GatewayEVMUUPSUpgradeTestTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// GatewayEVMUUPSUpgradeTestFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type GatewayEVMUUPSUpgradeTestFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// GatewayEVMUUPSUpgradeTestSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type GatewayEVMUUPSUpgradeTestSession struct { - Contract *GatewayEVMUUPSUpgradeTest // 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 -} - -// GatewayEVMUUPSUpgradeTestCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type GatewayEVMUUPSUpgradeTestCallerSession struct { - Contract *GatewayEVMUUPSUpgradeTestCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// GatewayEVMUUPSUpgradeTestTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type GatewayEVMUUPSUpgradeTestTransactorSession struct { - Contract *GatewayEVMUUPSUpgradeTestTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// GatewayEVMUUPSUpgradeTestRaw is an auto generated low-level Go binding around an Ethereum contract. -type GatewayEVMUUPSUpgradeTestRaw struct { - Contract *GatewayEVMUUPSUpgradeTest // Generic contract binding to access the raw methods on -} - -// GatewayEVMUUPSUpgradeTestCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type GatewayEVMUUPSUpgradeTestCallerRaw struct { - Contract *GatewayEVMUUPSUpgradeTestCaller // Generic read-only contract binding to access the raw methods on -} - -// GatewayEVMUUPSUpgradeTestTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type GatewayEVMUUPSUpgradeTestTransactorRaw struct { - Contract *GatewayEVMUUPSUpgradeTestTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewGatewayEVMUUPSUpgradeTest creates a new instance of GatewayEVMUUPSUpgradeTest, bound to a specific deployed contract. -func NewGatewayEVMUUPSUpgradeTest(address common.Address, backend bind.ContractBackend) (*GatewayEVMUUPSUpgradeTest, error) { - contract, err := bindGatewayEVMUUPSUpgradeTest(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTest{GatewayEVMUUPSUpgradeTestCaller: GatewayEVMUUPSUpgradeTestCaller{contract: contract}, GatewayEVMUUPSUpgradeTestTransactor: GatewayEVMUUPSUpgradeTestTransactor{contract: contract}, GatewayEVMUUPSUpgradeTestFilterer: GatewayEVMUUPSUpgradeTestFilterer{contract: contract}}, nil -} - -// NewGatewayEVMUUPSUpgradeTestCaller creates a new read-only instance of GatewayEVMUUPSUpgradeTest, bound to a specific deployed contract. -func NewGatewayEVMUUPSUpgradeTestCaller(address common.Address, caller bind.ContractCaller) (*GatewayEVMUUPSUpgradeTestCaller, error) { - contract, err := bindGatewayEVMUUPSUpgradeTest(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestCaller{contract: contract}, nil -} - -// NewGatewayEVMUUPSUpgradeTestTransactor creates a new write-only instance of GatewayEVMUUPSUpgradeTest, bound to a specific deployed contract. -func NewGatewayEVMUUPSUpgradeTestTransactor(address common.Address, transactor bind.ContractTransactor) (*GatewayEVMUUPSUpgradeTestTransactor, error) { - contract, err := bindGatewayEVMUUPSUpgradeTest(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestTransactor{contract: contract}, nil -} - -// NewGatewayEVMUUPSUpgradeTestFilterer creates a new log filterer instance of GatewayEVMUUPSUpgradeTest, bound to a specific deployed contract. -func NewGatewayEVMUUPSUpgradeTestFilterer(address common.Address, filterer bind.ContractFilterer) (*GatewayEVMUUPSUpgradeTestFilterer, error) { - contract, err := bindGatewayEVMUUPSUpgradeTest(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestFilterer{contract: contract}, nil -} - -// bindGatewayEVMUUPSUpgradeTest binds a generic wrapper to an already deployed contract. -func bindGatewayEVMUUPSUpgradeTest(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := GatewayEVMUUPSUpgradeTestMetaData.GetAbi() - 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 (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _GatewayEVMUUPSUpgradeTest.Contract.GatewayEVMUUPSUpgradeTestCaller.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 (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.GatewayEVMUUPSUpgradeTestTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.GatewayEVMUUPSUpgradeTestTransactor.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 (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _GatewayEVMUUPSUpgradeTest.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 (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.contract.Transact(opts, method, params...) -} - -// ISTEST is a free data retrieval call binding the contract method 0xfa7626d4. -// -// Solidity: function IS_TEST() view returns(bool) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCaller) ISTEST(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _GatewayEVMUUPSUpgradeTest.contract.Call(opts, &out, "IS_TEST") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// ISTEST is a free data retrieval call binding the contract method 0xfa7626d4. -// -// Solidity: function IS_TEST() view returns(bool) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestSession) ISTEST() (bool, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.ISTEST(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// ISTEST is a free data retrieval call binding the contract method 0xfa7626d4. -// -// Solidity: function IS_TEST() view returns(bool) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCallerSession) ISTEST() (bool, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.ISTEST(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// ExcludeArtifacts is a free data retrieval call binding the contract method 0xb5508aa9. -// -// Solidity: function excludeArtifacts() view returns(string[] excludedArtifacts_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCaller) ExcludeArtifacts(opts *bind.CallOpts) ([]string, error) { - var out []interface{} - err := _GatewayEVMUUPSUpgradeTest.contract.Call(opts, &out, "excludeArtifacts") - - if err != nil { - return *new([]string), err - } - - out0 := *abi.ConvertType(out[0], new([]string)).(*[]string) - - return out0, err - -} - -// ExcludeArtifacts is a free data retrieval call binding the contract method 0xb5508aa9. -// -// Solidity: function excludeArtifacts() view returns(string[] excludedArtifacts_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestSession) ExcludeArtifacts() ([]string, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.ExcludeArtifacts(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// ExcludeArtifacts is a free data retrieval call binding the contract method 0xb5508aa9. -// -// Solidity: function excludeArtifacts() view returns(string[] excludedArtifacts_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCallerSession) ExcludeArtifacts() ([]string, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.ExcludeArtifacts(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// ExcludeContracts is a free data retrieval call binding the contract method 0xe20c9f71. -// -// Solidity: function excludeContracts() view returns(address[] excludedContracts_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCaller) ExcludeContracts(opts *bind.CallOpts) ([]common.Address, error) { - var out []interface{} - err := _GatewayEVMUUPSUpgradeTest.contract.Call(opts, &out, "excludeContracts") - - if err != nil { - return *new([]common.Address), err - } - - out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) - - return out0, err - -} - -// ExcludeContracts is a free data retrieval call binding the contract method 0xe20c9f71. -// -// Solidity: function excludeContracts() view returns(address[] excludedContracts_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestSession) ExcludeContracts() ([]common.Address, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.ExcludeContracts(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// ExcludeContracts is a free data retrieval call binding the contract method 0xe20c9f71. -// -// Solidity: function excludeContracts() view returns(address[] excludedContracts_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCallerSession) ExcludeContracts() ([]common.Address, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.ExcludeContracts(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// ExcludeSelectors is a free data retrieval call binding the contract method 0xb0464fdc. -// -// Solidity: function excludeSelectors() view returns((address,bytes4[])[] excludedSelectors_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCaller) ExcludeSelectors(opts *bind.CallOpts) ([]StdInvariantFuzzSelector, error) { - var out []interface{} - err := _GatewayEVMUUPSUpgradeTest.contract.Call(opts, &out, "excludeSelectors") - - if err != nil { - return *new([]StdInvariantFuzzSelector), err - } - - out0 := *abi.ConvertType(out[0], new([]StdInvariantFuzzSelector)).(*[]StdInvariantFuzzSelector) - - return out0, err - -} - -// ExcludeSelectors is a free data retrieval call binding the contract method 0xb0464fdc. -// -// Solidity: function excludeSelectors() view returns((address,bytes4[])[] excludedSelectors_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestSession) ExcludeSelectors() ([]StdInvariantFuzzSelector, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.ExcludeSelectors(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// ExcludeSelectors is a free data retrieval call binding the contract method 0xb0464fdc. -// -// Solidity: function excludeSelectors() view returns((address,bytes4[])[] excludedSelectors_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCallerSession) ExcludeSelectors() ([]StdInvariantFuzzSelector, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.ExcludeSelectors(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// ExcludeSenders is a free data retrieval call binding the contract method 0x1ed7831c. -// -// Solidity: function excludeSenders() view returns(address[] excludedSenders_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCaller) ExcludeSenders(opts *bind.CallOpts) ([]common.Address, error) { - var out []interface{} - err := _GatewayEVMUUPSUpgradeTest.contract.Call(opts, &out, "excludeSenders") - - if err != nil { - return *new([]common.Address), err - } - - out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) - - return out0, err - -} - -// ExcludeSenders is a free data retrieval call binding the contract method 0x1ed7831c. -// -// Solidity: function excludeSenders() view returns(address[] excludedSenders_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestSession) ExcludeSenders() ([]common.Address, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.ExcludeSenders(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// ExcludeSenders is a free data retrieval call binding the contract method 0x1ed7831c. -// -// Solidity: function excludeSenders() view returns(address[] excludedSenders_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCallerSession) ExcludeSenders() ([]common.Address, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.ExcludeSenders(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// Failed is a free data retrieval call binding the contract method 0xba414fa6. -// -// Solidity: function failed() view returns(bool) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCaller) Failed(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _GatewayEVMUUPSUpgradeTest.contract.Call(opts, &out, "failed") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Failed is a free data retrieval call binding the contract method 0xba414fa6. -// -// Solidity: function failed() view returns(bool) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestSession) Failed() (bool, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.Failed(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// Failed is a free data retrieval call binding the contract method 0xba414fa6. -// -// Solidity: function failed() view returns(bool) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCallerSession) Failed() (bool, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.Failed(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// TargetArtifactSelectors is a free data retrieval call binding the contract method 0x66d9a9a0. -// -// Solidity: function targetArtifactSelectors() view returns((string,bytes4[])[] targetedArtifactSelectors_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCaller) TargetArtifactSelectors(opts *bind.CallOpts) ([]StdInvariantFuzzArtifactSelector, error) { - var out []interface{} - err := _GatewayEVMUUPSUpgradeTest.contract.Call(opts, &out, "targetArtifactSelectors") - - if err != nil { - return *new([]StdInvariantFuzzArtifactSelector), err - } - - out0 := *abi.ConvertType(out[0], new([]StdInvariantFuzzArtifactSelector)).(*[]StdInvariantFuzzArtifactSelector) - - return out0, err - -} - -// TargetArtifactSelectors is a free data retrieval call binding the contract method 0x66d9a9a0. -// -// Solidity: function targetArtifactSelectors() view returns((string,bytes4[])[] targetedArtifactSelectors_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestSession) TargetArtifactSelectors() ([]StdInvariantFuzzArtifactSelector, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.TargetArtifactSelectors(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// TargetArtifactSelectors is a free data retrieval call binding the contract method 0x66d9a9a0. -// -// Solidity: function targetArtifactSelectors() view returns((string,bytes4[])[] targetedArtifactSelectors_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCallerSession) TargetArtifactSelectors() ([]StdInvariantFuzzArtifactSelector, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.TargetArtifactSelectors(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// TargetArtifacts is a free data retrieval call binding the contract method 0x85226c81. -// -// Solidity: function targetArtifacts() view returns(string[] targetedArtifacts_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCaller) TargetArtifacts(opts *bind.CallOpts) ([]string, error) { - var out []interface{} - err := _GatewayEVMUUPSUpgradeTest.contract.Call(opts, &out, "targetArtifacts") - - if err != nil { - return *new([]string), err - } - - out0 := *abi.ConvertType(out[0], new([]string)).(*[]string) - - return out0, err - -} - -// TargetArtifacts is a free data retrieval call binding the contract method 0x85226c81. -// -// Solidity: function targetArtifacts() view returns(string[] targetedArtifacts_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestSession) TargetArtifacts() ([]string, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.TargetArtifacts(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// TargetArtifacts is a free data retrieval call binding the contract method 0x85226c81. -// -// Solidity: function targetArtifacts() view returns(string[] targetedArtifacts_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCallerSession) TargetArtifacts() ([]string, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.TargetArtifacts(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// TargetContracts is a free data retrieval call binding the contract method 0x3f7286f4. -// -// Solidity: function targetContracts() view returns(address[] targetedContracts_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCaller) TargetContracts(opts *bind.CallOpts) ([]common.Address, error) { - var out []interface{} - err := _GatewayEVMUUPSUpgradeTest.contract.Call(opts, &out, "targetContracts") - - if err != nil { - return *new([]common.Address), err - } - - out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) - - return out0, err - -} - -// TargetContracts is a free data retrieval call binding the contract method 0x3f7286f4. -// -// Solidity: function targetContracts() view returns(address[] targetedContracts_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestSession) TargetContracts() ([]common.Address, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.TargetContracts(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// TargetContracts is a free data retrieval call binding the contract method 0x3f7286f4. -// -// Solidity: function targetContracts() view returns(address[] targetedContracts_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCallerSession) TargetContracts() ([]common.Address, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.TargetContracts(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// TargetInterfaces is a free data retrieval call binding the contract method 0x2ade3880. -// -// Solidity: function targetInterfaces() view returns((address,string[])[] targetedInterfaces_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCaller) TargetInterfaces(opts *bind.CallOpts) ([]StdInvariantFuzzInterface, error) { - var out []interface{} - err := _GatewayEVMUUPSUpgradeTest.contract.Call(opts, &out, "targetInterfaces") - - if err != nil { - return *new([]StdInvariantFuzzInterface), err - } - - out0 := *abi.ConvertType(out[0], new([]StdInvariantFuzzInterface)).(*[]StdInvariantFuzzInterface) - - return out0, err - -} - -// TargetInterfaces is a free data retrieval call binding the contract method 0x2ade3880. -// -// Solidity: function targetInterfaces() view returns((address,string[])[] targetedInterfaces_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestSession) TargetInterfaces() ([]StdInvariantFuzzInterface, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.TargetInterfaces(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// TargetInterfaces is a free data retrieval call binding the contract method 0x2ade3880. -// -// Solidity: function targetInterfaces() view returns((address,string[])[] targetedInterfaces_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCallerSession) TargetInterfaces() ([]StdInvariantFuzzInterface, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.TargetInterfaces(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// TargetSelectors is a free data retrieval call binding the contract method 0x916a17c6. -// -// Solidity: function targetSelectors() view returns((address,bytes4[])[] targetedSelectors_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCaller) TargetSelectors(opts *bind.CallOpts) ([]StdInvariantFuzzSelector, error) { - var out []interface{} - err := _GatewayEVMUUPSUpgradeTest.contract.Call(opts, &out, "targetSelectors") - - if err != nil { - return *new([]StdInvariantFuzzSelector), err - } - - out0 := *abi.ConvertType(out[0], new([]StdInvariantFuzzSelector)).(*[]StdInvariantFuzzSelector) - - return out0, err - -} - -// TargetSelectors is a free data retrieval call binding the contract method 0x916a17c6. -// -// Solidity: function targetSelectors() view returns((address,bytes4[])[] targetedSelectors_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestSession) TargetSelectors() ([]StdInvariantFuzzSelector, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.TargetSelectors(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// TargetSelectors is a free data retrieval call binding the contract method 0x916a17c6. -// -// Solidity: function targetSelectors() view returns((address,bytes4[])[] targetedSelectors_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCallerSession) TargetSelectors() ([]StdInvariantFuzzSelector, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.TargetSelectors(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// TargetSenders is a free data retrieval call binding the contract method 0x3e5e3c23. -// -// Solidity: function targetSenders() view returns(address[] targetedSenders_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCaller) TargetSenders(opts *bind.CallOpts) ([]common.Address, error) { - var out []interface{} - err := _GatewayEVMUUPSUpgradeTest.contract.Call(opts, &out, "targetSenders") - - if err != nil { - return *new([]common.Address), err - } - - out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) - - return out0, err - -} - -// TargetSenders is a free data retrieval call binding the contract method 0x3e5e3c23. -// -// Solidity: function targetSenders() view returns(address[] targetedSenders_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestSession) TargetSenders() ([]common.Address, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.TargetSenders(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// TargetSenders is a free data retrieval call binding the contract method 0x3e5e3c23. -// -// Solidity: function targetSenders() view returns(address[] targetedSenders_) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestCallerSession) TargetSenders() ([]common.Address, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.TargetSenders(&_GatewayEVMUUPSUpgradeTest.CallOpts) -} - -// SetUp is a paid mutator transaction binding the contract method 0x0a9254e4. -// -// Solidity: function setUp() returns() -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestTransactor) SetUp(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMUUPSUpgradeTest.contract.Transact(opts, "setUp") -} - -// SetUp is a paid mutator transaction binding the contract method 0x0a9254e4. -// -// Solidity: function setUp() returns() -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestSession) SetUp() (*types.Transaction, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.SetUp(&_GatewayEVMUUPSUpgradeTest.TransactOpts) -} - -// SetUp is a paid mutator transaction binding the contract method 0x0a9254e4. -// -// Solidity: function setUp() returns() -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestTransactorSession) SetUp() (*types.Transaction, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.SetUp(&_GatewayEVMUUPSUpgradeTest.TransactOpts) -} - -// TestUpgradeAndForwardCallToReceivePayable is a paid mutator transaction binding the contract method 0x7a380ebf. -// -// Solidity: function testUpgradeAndForwardCallToReceivePayable() returns() -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestTransactor) TestUpgradeAndForwardCallToReceivePayable(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayEVMUUPSUpgradeTest.contract.Transact(opts, "testUpgradeAndForwardCallToReceivePayable") -} - -// TestUpgradeAndForwardCallToReceivePayable is a paid mutator transaction binding the contract method 0x7a380ebf. -// -// Solidity: function testUpgradeAndForwardCallToReceivePayable() returns() -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestSession) TestUpgradeAndForwardCallToReceivePayable() (*types.Transaction, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.TestUpgradeAndForwardCallToReceivePayable(&_GatewayEVMUUPSUpgradeTest.TransactOpts) -} - -// TestUpgradeAndForwardCallToReceivePayable is a paid mutator transaction binding the contract method 0x7a380ebf. -// -// Solidity: function testUpgradeAndForwardCallToReceivePayable() returns() -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestTransactorSession) TestUpgradeAndForwardCallToReceivePayable() (*types.Transaction, error) { - return _GatewayEVMUUPSUpgradeTest.Contract.TestUpgradeAndForwardCallToReceivePayable(&_GatewayEVMUUPSUpgradeTest.TransactOpts) -} - -// GatewayEVMUUPSUpgradeTestCalledIterator is returned from FilterCalled and is used to iterate over the raw logs and unpacked data for Called events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestCalledIterator struct { - Event *GatewayEVMUUPSUpgradeTestCalled // 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 *GatewayEVMUUPSUpgradeTestCalledIterator) 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(GatewayEVMUUPSUpgradeTestCalled) - 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(GatewayEVMUUPSUpgradeTestCalled) - 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 *GatewayEVMUUPSUpgradeTestCalledIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestCalledIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestCalled represents a Called event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestCalled struct { - Sender common.Address - Receiver common.Address - Payload []byte - RevertOptions RevertOptions - Raw types.Log // Blockchain specific contextual infos -} - -// FilterCalled is a free log retrieval operation binding the contract event 0xd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d974. -// -// Solidity: event Called(address indexed sender, address indexed receiver, bytes payload, (address,bool,address,bytes,uint256) revertOptions) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterCalled(opts *bind.FilterOpts, sender []common.Address, receiver []common.Address) (*GatewayEVMUUPSUpgradeTestCalledIterator, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - var receiverRule []interface{} - for _, receiverItem := range receiver { - receiverRule = append(receiverRule, receiverItem) - } - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "Called", senderRule, receiverRule) - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestCalledIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "Called", logs: logs, sub: sub}, nil -} - -// WatchCalled is a free log subscription operation binding the contract event 0xd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d974. -// -// Solidity: event Called(address indexed sender, address indexed receiver, bytes payload, (address,bool,address,bytes,uint256) revertOptions) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchCalled(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestCalled, sender []common.Address, receiver []common.Address) (event.Subscription, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - var receiverRule []interface{} - for _, receiverItem := range receiver { - receiverRule = append(receiverRule, receiverItem) - } - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "Called", senderRule, receiverRule) - 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(GatewayEVMUUPSUpgradeTestCalled) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "Called", 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 -} - -// ParseCalled is a log parse operation binding the contract event 0xd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d974. -// -// Solidity: event Called(address indexed sender, address indexed receiver, bytes payload, (address,bool,address,bytes,uint256) revertOptions) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseCalled(log types.Log) (*GatewayEVMUUPSUpgradeTestCalled, error) { - event := new(GatewayEVMUUPSUpgradeTestCalled) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "Called", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestDepositedIterator is returned from FilterDeposited and is used to iterate over the raw logs and unpacked data for Deposited events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestDepositedIterator struct { - Event *GatewayEVMUUPSUpgradeTestDeposited // 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 *GatewayEVMUUPSUpgradeTestDepositedIterator) 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(GatewayEVMUUPSUpgradeTestDeposited) - 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(GatewayEVMUUPSUpgradeTestDeposited) - 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 *GatewayEVMUUPSUpgradeTestDepositedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestDepositedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestDeposited represents a Deposited event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestDeposited struct { - Sender common.Address - Receiver common.Address - Amount *big.Int - Asset common.Address - Payload []byte - RevertOptions RevertOptions - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDeposited is a free log retrieval operation binding the contract event 0xc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c. -// -// Solidity: event Deposited(address indexed sender, address indexed receiver, uint256 amount, address asset, bytes payload, (address,bool,address,bytes,uint256) revertOptions) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterDeposited(opts *bind.FilterOpts, sender []common.Address, receiver []common.Address) (*GatewayEVMUUPSUpgradeTestDepositedIterator, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - var receiverRule []interface{} - for _, receiverItem := range receiver { - receiverRule = append(receiverRule, receiverItem) - } - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "Deposited", senderRule, receiverRule) - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestDepositedIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "Deposited", logs: logs, sub: sub}, nil -} - -// WatchDeposited is a free log subscription operation binding the contract event 0xc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c. -// -// Solidity: event Deposited(address indexed sender, address indexed receiver, uint256 amount, address asset, bytes payload, (address,bool,address,bytes,uint256) revertOptions) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchDeposited(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestDeposited, sender []common.Address, receiver []common.Address) (event.Subscription, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - var receiverRule []interface{} - for _, receiverItem := range receiver { - receiverRule = append(receiverRule, receiverItem) - } - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "Deposited", senderRule, receiverRule) - 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(GatewayEVMUUPSUpgradeTestDeposited) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "Deposited", 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 -} - -// ParseDeposited is a log parse operation binding the contract event 0xc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c. -// -// Solidity: event Deposited(address indexed sender, address indexed receiver, uint256 amount, address asset, bytes payload, (address,bool,address,bytes,uint256) revertOptions) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseDeposited(log types.Log) (*GatewayEVMUUPSUpgradeTestDeposited, error) { - event := new(GatewayEVMUUPSUpgradeTestDeposited) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "Deposited", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestExecutedIterator is returned from FilterExecuted and is used to iterate over the raw logs and unpacked data for Executed events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestExecutedIterator struct { - Event *GatewayEVMUUPSUpgradeTestExecuted // 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 *GatewayEVMUUPSUpgradeTestExecutedIterator) 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(GatewayEVMUUPSUpgradeTestExecuted) - 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(GatewayEVMUUPSUpgradeTestExecuted) - 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 *GatewayEVMUUPSUpgradeTestExecutedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestExecutedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestExecuted represents a Executed event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestExecuted struct { - Destination common.Address - Value *big.Int - Data []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterExecuted is a free log retrieval operation binding the contract event 0xcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f. -// -// Solidity: event Executed(address indexed destination, uint256 value, bytes data) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterExecuted(opts *bind.FilterOpts, destination []common.Address) (*GatewayEVMUUPSUpgradeTestExecutedIterator, error) { - - var destinationRule []interface{} - for _, destinationItem := range destination { - destinationRule = append(destinationRule, destinationItem) - } - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "Executed", destinationRule) - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestExecutedIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "Executed", logs: logs, sub: sub}, nil -} - -// WatchExecuted is a free log subscription operation binding the contract event 0xcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f. -// -// Solidity: event Executed(address indexed destination, uint256 value, bytes data) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchExecuted(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestExecuted, destination []common.Address) (event.Subscription, error) { - - var destinationRule []interface{} - for _, destinationItem := range destination { - destinationRule = append(destinationRule, destinationItem) - } - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "Executed", destinationRule) - 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(GatewayEVMUUPSUpgradeTestExecuted) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "Executed", 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 -} - -// ParseExecuted is a log parse operation binding the contract event 0xcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f. -// -// Solidity: event Executed(address indexed destination, uint256 value, bytes data) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseExecuted(log types.Log) (*GatewayEVMUUPSUpgradeTestExecuted, error) { - event := new(GatewayEVMUUPSUpgradeTestExecuted) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "Executed", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestExecutedV2Iterator is returned from FilterExecutedV2 and is used to iterate over the raw logs and unpacked data for ExecutedV2 events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestExecutedV2Iterator struct { - Event *GatewayEVMUUPSUpgradeTestExecutedV2 // 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 *GatewayEVMUUPSUpgradeTestExecutedV2Iterator) 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(GatewayEVMUUPSUpgradeTestExecutedV2) - 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(GatewayEVMUUPSUpgradeTestExecutedV2) - 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 *GatewayEVMUUPSUpgradeTestExecutedV2Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestExecutedV2Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestExecutedV2 represents a ExecutedV2 event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestExecutedV2 struct { - Destination common.Address - Value *big.Int - Data []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterExecutedV2 is a free log retrieval operation binding the contract event 0x373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546. -// -// Solidity: event ExecutedV2(address indexed destination, uint256 value, bytes data) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterExecutedV2(opts *bind.FilterOpts, destination []common.Address) (*GatewayEVMUUPSUpgradeTestExecutedV2Iterator, error) { - - var destinationRule []interface{} - for _, destinationItem := range destination { - destinationRule = append(destinationRule, destinationItem) - } - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "ExecutedV2", destinationRule) - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestExecutedV2Iterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "ExecutedV2", logs: logs, sub: sub}, nil -} - -// WatchExecutedV2 is a free log subscription operation binding the contract event 0x373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546. -// -// Solidity: event ExecutedV2(address indexed destination, uint256 value, bytes data) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchExecutedV2(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestExecutedV2, destination []common.Address) (event.Subscription, error) { - - var destinationRule []interface{} - for _, destinationItem := range destination { - destinationRule = append(destinationRule, destinationItem) - } - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "ExecutedV2", destinationRule) - 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(GatewayEVMUUPSUpgradeTestExecutedV2) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ExecutedV2", 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 -} - -// ParseExecutedV2 is a log parse operation binding the contract event 0x373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546. -// -// Solidity: event ExecutedV2(address indexed destination, uint256 value, bytes data) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseExecutedV2(log types.Log) (*GatewayEVMUUPSUpgradeTestExecutedV2, error) { - event := new(GatewayEVMUUPSUpgradeTestExecutedV2) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ExecutedV2", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestExecutedWithERC20Iterator is returned from FilterExecutedWithERC20 and is used to iterate over the raw logs and unpacked data for ExecutedWithERC20 events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestExecutedWithERC20Iterator struct { - Event *GatewayEVMUUPSUpgradeTestExecutedWithERC20 // 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 *GatewayEVMUUPSUpgradeTestExecutedWithERC20Iterator) 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(GatewayEVMUUPSUpgradeTestExecutedWithERC20) - 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(GatewayEVMUUPSUpgradeTestExecutedWithERC20) - 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 *GatewayEVMUUPSUpgradeTestExecutedWithERC20Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestExecutedWithERC20Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestExecutedWithERC20 represents a ExecutedWithERC20 event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestExecutedWithERC20 struct { - Token common.Address - To common.Address - Amount *big.Int - Data []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterExecutedWithERC20 is a free log retrieval operation binding the contract event 0x29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382. -// -// Solidity: event ExecutedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterExecutedWithERC20(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*GatewayEVMUUPSUpgradeTestExecutedWithERC20Iterator, error) { - - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "ExecutedWithERC20", tokenRule, toRule) - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestExecutedWithERC20Iterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "ExecutedWithERC20", logs: logs, sub: sub}, nil -} - -// WatchExecutedWithERC20 is a free log subscription operation binding the contract event 0x29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382. -// -// Solidity: event ExecutedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchExecutedWithERC20(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestExecutedWithERC20, token []common.Address, to []common.Address) (event.Subscription, error) { - - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "ExecutedWithERC20", tokenRule, 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(GatewayEVMUUPSUpgradeTestExecutedWithERC20) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ExecutedWithERC20", 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 -} - -// ParseExecutedWithERC20 is a log parse operation binding the contract event 0x29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382. -// -// Solidity: event ExecutedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseExecutedWithERC20(log types.Log) (*GatewayEVMUUPSUpgradeTestExecutedWithERC20, error) { - event := new(GatewayEVMUUPSUpgradeTestExecutedWithERC20) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ExecutedWithERC20", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestReceivedERC20Iterator is returned from FilterReceivedERC20 and is used to iterate over the raw logs and unpacked data for ReceivedERC20 events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestReceivedERC20Iterator struct { - Event *GatewayEVMUUPSUpgradeTestReceivedERC20 // 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 *GatewayEVMUUPSUpgradeTestReceivedERC20Iterator) 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(GatewayEVMUUPSUpgradeTestReceivedERC20) - 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(GatewayEVMUUPSUpgradeTestReceivedERC20) - 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 *GatewayEVMUUPSUpgradeTestReceivedERC20Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestReceivedERC20Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestReceivedERC20 represents a ReceivedERC20 event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestReceivedERC20 struct { - Sender common.Address - Amount *big.Int - Token common.Address - Destination common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterReceivedERC20 is a free log retrieval operation binding the contract event 0x2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60. -// -// Solidity: event ReceivedERC20(address sender, uint256 amount, address token, address destination) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterReceivedERC20(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestReceivedERC20Iterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "ReceivedERC20") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestReceivedERC20Iterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "ReceivedERC20", logs: logs, sub: sub}, nil -} - -// WatchReceivedERC20 is a free log subscription operation binding the contract event 0x2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60. -// -// Solidity: event ReceivedERC20(address sender, uint256 amount, address token, address destination) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchReceivedERC20(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestReceivedERC20) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "ReceivedERC20") - 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(GatewayEVMUUPSUpgradeTestReceivedERC20) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ReceivedERC20", 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 -} - -// ParseReceivedERC20 is a log parse operation binding the contract event 0x2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60. -// -// Solidity: event ReceivedERC20(address sender, uint256 amount, address token, address destination) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseReceivedERC20(log types.Log) (*GatewayEVMUUPSUpgradeTestReceivedERC20, error) { - event := new(GatewayEVMUUPSUpgradeTestReceivedERC20) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ReceivedERC20", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestReceivedNoParamsIterator is returned from FilterReceivedNoParams and is used to iterate over the raw logs and unpacked data for ReceivedNoParams events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestReceivedNoParamsIterator struct { - Event *GatewayEVMUUPSUpgradeTestReceivedNoParams // 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 *GatewayEVMUUPSUpgradeTestReceivedNoParamsIterator) 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(GatewayEVMUUPSUpgradeTestReceivedNoParams) - 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(GatewayEVMUUPSUpgradeTestReceivedNoParams) - 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 *GatewayEVMUUPSUpgradeTestReceivedNoParamsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestReceivedNoParamsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestReceivedNoParams represents a ReceivedNoParams event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestReceivedNoParams struct { - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterReceivedNoParams is a free log retrieval operation binding the contract event 0xbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0. -// -// Solidity: event ReceivedNoParams(address sender) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterReceivedNoParams(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestReceivedNoParamsIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "ReceivedNoParams") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestReceivedNoParamsIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "ReceivedNoParams", logs: logs, sub: sub}, nil -} - -// WatchReceivedNoParams is a free log subscription operation binding the contract event 0xbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0. -// -// Solidity: event ReceivedNoParams(address sender) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchReceivedNoParams(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestReceivedNoParams) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "ReceivedNoParams") - 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(GatewayEVMUUPSUpgradeTestReceivedNoParams) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ReceivedNoParams", 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 -} - -// ParseReceivedNoParams is a log parse operation binding the contract event 0xbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0. -// -// Solidity: event ReceivedNoParams(address sender) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseReceivedNoParams(log types.Log) (*GatewayEVMUUPSUpgradeTestReceivedNoParams, error) { - event := new(GatewayEVMUUPSUpgradeTestReceivedNoParams) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ReceivedNoParams", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestReceivedNonPayableIterator is returned from FilterReceivedNonPayable and is used to iterate over the raw logs and unpacked data for ReceivedNonPayable events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestReceivedNonPayableIterator struct { - Event *GatewayEVMUUPSUpgradeTestReceivedNonPayable // 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 *GatewayEVMUUPSUpgradeTestReceivedNonPayableIterator) 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(GatewayEVMUUPSUpgradeTestReceivedNonPayable) - 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(GatewayEVMUUPSUpgradeTestReceivedNonPayable) - 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 *GatewayEVMUUPSUpgradeTestReceivedNonPayableIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestReceivedNonPayableIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestReceivedNonPayable represents a ReceivedNonPayable event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestReceivedNonPayable struct { - Sender common.Address - Strs []string - Nums []*big.Int - Flag bool - Raw types.Log // Blockchain specific contextual infos -} - -// FilterReceivedNonPayable is a free log retrieval operation binding the contract event 0x74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146. -// -// Solidity: event ReceivedNonPayable(address sender, string[] strs, uint256[] nums, bool flag) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterReceivedNonPayable(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestReceivedNonPayableIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "ReceivedNonPayable") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestReceivedNonPayableIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "ReceivedNonPayable", logs: logs, sub: sub}, nil -} - -// WatchReceivedNonPayable is a free log subscription operation binding the contract event 0x74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146. -// -// Solidity: event ReceivedNonPayable(address sender, string[] strs, uint256[] nums, bool flag) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchReceivedNonPayable(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestReceivedNonPayable) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "ReceivedNonPayable") - 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(GatewayEVMUUPSUpgradeTestReceivedNonPayable) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ReceivedNonPayable", 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 -} - -// ParseReceivedNonPayable is a log parse operation binding the contract event 0x74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146. -// -// Solidity: event ReceivedNonPayable(address sender, string[] strs, uint256[] nums, bool flag) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseReceivedNonPayable(log types.Log) (*GatewayEVMUUPSUpgradeTestReceivedNonPayable, error) { - event := new(GatewayEVMUUPSUpgradeTestReceivedNonPayable) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ReceivedNonPayable", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestReceivedPayableIterator is returned from FilterReceivedPayable and is used to iterate over the raw logs and unpacked data for ReceivedPayable events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestReceivedPayableIterator struct { - Event *GatewayEVMUUPSUpgradeTestReceivedPayable // 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 *GatewayEVMUUPSUpgradeTestReceivedPayableIterator) 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(GatewayEVMUUPSUpgradeTestReceivedPayable) - 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(GatewayEVMUUPSUpgradeTestReceivedPayable) - 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 *GatewayEVMUUPSUpgradeTestReceivedPayableIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestReceivedPayableIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestReceivedPayable represents a ReceivedPayable event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestReceivedPayable struct { - Sender common.Address - Value *big.Int - Str string - Num *big.Int - Flag bool - Raw types.Log // Blockchain specific contextual infos -} - -// FilterReceivedPayable is a free log retrieval operation binding the contract event 0x1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa. -// -// Solidity: event ReceivedPayable(address sender, uint256 value, string str, uint256 num, bool flag) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterReceivedPayable(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestReceivedPayableIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "ReceivedPayable") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestReceivedPayableIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "ReceivedPayable", logs: logs, sub: sub}, nil -} - -// WatchReceivedPayable is a free log subscription operation binding the contract event 0x1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa. -// -// Solidity: event ReceivedPayable(address sender, uint256 value, string str, uint256 num, bool flag) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchReceivedPayable(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestReceivedPayable) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "ReceivedPayable") - 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(GatewayEVMUUPSUpgradeTestReceivedPayable) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ReceivedPayable", 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 -} - -// ParseReceivedPayable is a log parse operation binding the contract event 0x1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa. -// -// Solidity: event ReceivedPayable(address sender, uint256 value, string str, uint256 num, bool flag) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseReceivedPayable(log types.Log) (*GatewayEVMUUPSUpgradeTestReceivedPayable, error) { - event := new(GatewayEVMUUPSUpgradeTestReceivedPayable) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ReceivedPayable", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestReceivedRevertIterator is returned from FilterReceivedRevert and is used to iterate over the raw logs and unpacked data for ReceivedRevert events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestReceivedRevertIterator struct { - Event *GatewayEVMUUPSUpgradeTestReceivedRevert // 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 *GatewayEVMUUPSUpgradeTestReceivedRevertIterator) 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(GatewayEVMUUPSUpgradeTestReceivedRevert) - 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(GatewayEVMUUPSUpgradeTestReceivedRevert) - 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 *GatewayEVMUUPSUpgradeTestReceivedRevertIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestReceivedRevertIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestReceivedRevert represents a ReceivedRevert event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestReceivedRevert struct { - Sender common.Address - RevertContext RevertContext - Raw types.Log // Blockchain specific contextual infos -} - -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. -// -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestReceivedRevertIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "ReceivedRevert") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestReceivedRevertIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil -} - -// WatchReceivedRevert is a free log subscription operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. -// -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestReceivedRevert) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "ReceivedRevert") - 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(GatewayEVMUUPSUpgradeTestReceivedRevert) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ReceivedRevert", 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 -} - -// ParseReceivedRevert is a log parse operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. -// -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseReceivedRevert(log types.Log) (*GatewayEVMUUPSUpgradeTestReceivedRevert, error) { - event := new(GatewayEVMUUPSUpgradeTestReceivedRevert) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestRevertedIterator is returned from FilterReverted and is used to iterate over the raw logs and unpacked data for Reverted events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestRevertedIterator struct { - Event *GatewayEVMUUPSUpgradeTestReverted // 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 *GatewayEVMUUPSUpgradeTestRevertedIterator) 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(GatewayEVMUUPSUpgradeTestReverted) - 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(GatewayEVMUUPSUpgradeTestReverted) - 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 *GatewayEVMUUPSUpgradeTestRevertedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestRevertedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestReverted represents a Reverted event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestReverted struct { - To common.Address - Token common.Address - Amount *big.Int - Data []byte - RevertContext RevertContext - Raw types.Log // Blockchain specific contextual infos -} - -// FilterReverted is a free log retrieval operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. -// -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMUUPSUpgradeTestRevertedIterator, error) { - - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "Reverted", toRule, tokenRule) - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestRevertedIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "Reverted", logs: logs, sub: sub}, nil -} - -// WatchReverted is a free log subscription operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. -// -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { - - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "Reverted", toRule, tokenRule) - 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(GatewayEVMUUPSUpgradeTestReverted) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "Reverted", 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 -} - -// ParseReverted is a log parse operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. -// -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseReverted(log types.Log) (*GatewayEVMUUPSUpgradeTestReverted, error) { - event := new(GatewayEVMUUPSUpgradeTestReverted) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "Reverted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddressIterator is returned from FilterUpdatedGatewayTSSAddress and is used to iterate over the raw logs and unpacked data for UpdatedGatewayTSSAddress events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddressIterator struct { - Event *GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddress // 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 *GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddressIterator) 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(GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddress) - 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(GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddress) - 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 *GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddressIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddressIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddress represents a UpdatedGatewayTSSAddress event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddress struct { - NewTSSAddress common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. -// -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterUpdatedGatewayTSSAddress(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddressIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "UpdatedGatewayTSSAddress") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddressIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "UpdatedGatewayTSSAddress", logs: logs, sub: sub}, nil -} - -// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. -// -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchUpdatedGatewayTSSAddress(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddress) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "UpdatedGatewayTSSAddress") - 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(GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddress) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "UpdatedGatewayTSSAddress", 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 -} - -// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. -// -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseUpdatedGatewayTSSAddress(log types.Log) (*GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddress, error) { - event := new(GatewayEVMUUPSUpgradeTestUpdatedGatewayTSSAddress) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "UpdatedGatewayTSSAddress", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogIterator is returned from FilterLog and is used to iterate over the raw logs and unpacked data for Log events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogIterator struct { - Event *GatewayEVMUUPSUpgradeTestLog // 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 *GatewayEVMUUPSUpgradeTestLogIterator) 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(GatewayEVMUUPSUpgradeTestLog) - 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(GatewayEVMUUPSUpgradeTestLog) - 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 *GatewayEVMUUPSUpgradeTestLogIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLog represents a Log event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLog struct { - Arg0 string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLog is a free log retrieval operation binding the contract event 0x41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50. -// -// Solidity: event log(string arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLog(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log", logs: logs, sub: sub}, nil -} - -// WatchLog is a free log subscription operation binding the contract event 0x41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50. -// -// Solidity: event log(string arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLog(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLog) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log") - 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(GatewayEVMUUPSUpgradeTestLog) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log", 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 -} - -// ParseLog is a log parse operation binding the contract event 0x41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50. -// -// Solidity: event log(string arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLog(log types.Log) (*GatewayEVMUUPSUpgradeTestLog, error) { - event := new(GatewayEVMUUPSUpgradeTestLog) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogAddressIterator is returned from FilterLogAddress and is used to iterate over the raw logs and unpacked data for LogAddress events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogAddressIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogAddress // 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 *GatewayEVMUUPSUpgradeTestLogAddressIterator) 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(GatewayEVMUUPSUpgradeTestLogAddress) - 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(GatewayEVMUUPSUpgradeTestLogAddress) - 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 *GatewayEVMUUPSUpgradeTestLogAddressIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogAddressIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogAddress represents a LogAddress event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogAddress struct { - Arg0 common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogAddress is a free log retrieval operation binding the contract event 0x7ae74c527414ae135fd97047b12921a5ec3911b804197855d67e25c7b75ee6f3. -// -// Solidity: event log_address(address arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogAddress(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogAddressIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_address") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogAddressIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_address", logs: logs, sub: sub}, nil -} - -// WatchLogAddress is a free log subscription operation binding the contract event 0x7ae74c527414ae135fd97047b12921a5ec3911b804197855d67e25c7b75ee6f3. -// -// Solidity: event log_address(address arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogAddress(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogAddress) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_address") - 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(GatewayEVMUUPSUpgradeTestLogAddress) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_address", 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 -} - -// ParseLogAddress is a log parse operation binding the contract event 0x7ae74c527414ae135fd97047b12921a5ec3911b804197855d67e25c7b75ee6f3. -// -// Solidity: event log_address(address arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogAddress(log types.Log) (*GatewayEVMUUPSUpgradeTestLogAddress, error) { - event := new(GatewayEVMUUPSUpgradeTestLogAddress) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_address", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogArrayIterator is returned from FilterLogArray and is used to iterate over the raw logs and unpacked data for LogArray events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogArrayIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogArray // 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 *GatewayEVMUUPSUpgradeTestLogArrayIterator) 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(GatewayEVMUUPSUpgradeTestLogArray) - 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(GatewayEVMUUPSUpgradeTestLogArray) - 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 *GatewayEVMUUPSUpgradeTestLogArrayIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogArrayIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogArray represents a LogArray event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogArray struct { - Val []*big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogArray is a free log retrieval operation binding the contract event 0xfb102865d50addddf69da9b5aa1bced66c80cf869a5c8d0471a467e18ce9cab1. -// -// Solidity: event log_array(uint256[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogArray(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogArrayIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_array") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogArrayIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_array", logs: logs, sub: sub}, nil -} - -// WatchLogArray is a free log subscription operation binding the contract event 0xfb102865d50addddf69da9b5aa1bced66c80cf869a5c8d0471a467e18ce9cab1. -// -// Solidity: event log_array(uint256[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogArray(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogArray) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_array") - 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(GatewayEVMUUPSUpgradeTestLogArray) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_array", 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 -} - -// ParseLogArray is a log parse operation binding the contract event 0xfb102865d50addddf69da9b5aa1bced66c80cf869a5c8d0471a467e18ce9cab1. -// -// Solidity: event log_array(uint256[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogArray(log types.Log) (*GatewayEVMUUPSUpgradeTestLogArray, error) { - event := new(GatewayEVMUUPSUpgradeTestLogArray) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_array", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogArray0Iterator is returned from FilterLogArray0 and is used to iterate over the raw logs and unpacked data for LogArray0 events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogArray0Iterator struct { - Event *GatewayEVMUUPSUpgradeTestLogArray0 // 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 *GatewayEVMUUPSUpgradeTestLogArray0Iterator) 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(GatewayEVMUUPSUpgradeTestLogArray0) - 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(GatewayEVMUUPSUpgradeTestLogArray0) - 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 *GatewayEVMUUPSUpgradeTestLogArray0Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogArray0Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogArray0 represents a LogArray0 event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogArray0 struct { - Val []*big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogArray0 is a free log retrieval operation binding the contract event 0x890a82679b470f2bd82816ed9b161f97d8b967f37fa3647c21d5bf39749e2dd5. -// -// Solidity: event log_array(int256[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogArray0(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogArray0Iterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_array0") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogArray0Iterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_array0", logs: logs, sub: sub}, nil -} - -// WatchLogArray0 is a free log subscription operation binding the contract event 0x890a82679b470f2bd82816ed9b161f97d8b967f37fa3647c21d5bf39749e2dd5. -// -// Solidity: event log_array(int256[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogArray0(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogArray0) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_array0") - 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(GatewayEVMUUPSUpgradeTestLogArray0) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_array0", 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 -} - -// ParseLogArray0 is a log parse operation binding the contract event 0x890a82679b470f2bd82816ed9b161f97d8b967f37fa3647c21d5bf39749e2dd5. -// -// Solidity: event log_array(int256[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogArray0(log types.Log) (*GatewayEVMUUPSUpgradeTestLogArray0, error) { - event := new(GatewayEVMUUPSUpgradeTestLogArray0) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_array0", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogArray1Iterator is returned from FilterLogArray1 and is used to iterate over the raw logs and unpacked data for LogArray1 events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogArray1Iterator struct { - Event *GatewayEVMUUPSUpgradeTestLogArray1 // 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 *GatewayEVMUUPSUpgradeTestLogArray1Iterator) 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(GatewayEVMUUPSUpgradeTestLogArray1) - 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(GatewayEVMUUPSUpgradeTestLogArray1) - 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 *GatewayEVMUUPSUpgradeTestLogArray1Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogArray1Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogArray1 represents a LogArray1 event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogArray1 struct { - Val []common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogArray1 is a free log retrieval operation binding the contract event 0x40e1840f5769073d61bd01372d9b75baa9842d5629a0c99ff103be1178a8e9e2. -// -// Solidity: event log_array(address[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogArray1(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogArray1Iterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_array1") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogArray1Iterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_array1", logs: logs, sub: sub}, nil -} - -// WatchLogArray1 is a free log subscription operation binding the contract event 0x40e1840f5769073d61bd01372d9b75baa9842d5629a0c99ff103be1178a8e9e2. -// -// Solidity: event log_array(address[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogArray1(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogArray1) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_array1") - 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(GatewayEVMUUPSUpgradeTestLogArray1) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_array1", 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 -} - -// ParseLogArray1 is a log parse operation binding the contract event 0x40e1840f5769073d61bd01372d9b75baa9842d5629a0c99ff103be1178a8e9e2. -// -// Solidity: event log_array(address[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogArray1(log types.Log) (*GatewayEVMUUPSUpgradeTestLogArray1, error) { - event := new(GatewayEVMUUPSUpgradeTestLogArray1) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_array1", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogBytesIterator is returned from FilterLogBytes and is used to iterate over the raw logs and unpacked data for LogBytes events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogBytesIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogBytes // 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 *GatewayEVMUUPSUpgradeTestLogBytesIterator) 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(GatewayEVMUUPSUpgradeTestLogBytes) - 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(GatewayEVMUUPSUpgradeTestLogBytes) - 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 *GatewayEVMUUPSUpgradeTestLogBytesIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogBytesIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogBytes represents a LogBytes event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogBytes struct { - Arg0 []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogBytes is a free log retrieval operation binding the contract event 0x23b62ad0584d24a75f0bf3560391ef5659ec6db1269c56e11aa241d637f19b20. -// -// Solidity: event log_bytes(bytes arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogBytes(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogBytesIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_bytes") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogBytesIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_bytes", logs: logs, sub: sub}, nil -} - -// WatchLogBytes is a free log subscription operation binding the contract event 0x23b62ad0584d24a75f0bf3560391ef5659ec6db1269c56e11aa241d637f19b20. -// -// Solidity: event log_bytes(bytes arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogBytes(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogBytes) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_bytes") - 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(GatewayEVMUUPSUpgradeTestLogBytes) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_bytes", 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 -} - -// ParseLogBytes is a log parse operation binding the contract event 0x23b62ad0584d24a75f0bf3560391ef5659ec6db1269c56e11aa241d637f19b20. -// -// Solidity: event log_bytes(bytes arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogBytes(log types.Log) (*GatewayEVMUUPSUpgradeTestLogBytes, error) { - event := new(GatewayEVMUUPSUpgradeTestLogBytes) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_bytes", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogBytes32Iterator is returned from FilterLogBytes32 and is used to iterate over the raw logs and unpacked data for LogBytes32 events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogBytes32Iterator struct { - Event *GatewayEVMUUPSUpgradeTestLogBytes32 // 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 *GatewayEVMUUPSUpgradeTestLogBytes32Iterator) 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(GatewayEVMUUPSUpgradeTestLogBytes32) - 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(GatewayEVMUUPSUpgradeTestLogBytes32) - 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 *GatewayEVMUUPSUpgradeTestLogBytes32Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogBytes32Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogBytes32 represents a LogBytes32 event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogBytes32 struct { - Arg0 [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogBytes32 is a free log retrieval operation binding the contract event 0xe81699b85113eea1c73e10588b2b035e55893369632173afd43feb192fac64e3. -// -// Solidity: event log_bytes32(bytes32 arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogBytes32(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogBytes32Iterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_bytes32") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogBytes32Iterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_bytes32", logs: logs, sub: sub}, nil -} - -// WatchLogBytes32 is a free log subscription operation binding the contract event 0xe81699b85113eea1c73e10588b2b035e55893369632173afd43feb192fac64e3. -// -// Solidity: event log_bytes32(bytes32 arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogBytes32(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogBytes32) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_bytes32") - 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(GatewayEVMUUPSUpgradeTestLogBytes32) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_bytes32", 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 -} - -// ParseLogBytes32 is a log parse operation binding the contract event 0xe81699b85113eea1c73e10588b2b035e55893369632173afd43feb192fac64e3. -// -// Solidity: event log_bytes32(bytes32 arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogBytes32(log types.Log) (*GatewayEVMUUPSUpgradeTestLogBytes32, error) { - event := new(GatewayEVMUUPSUpgradeTestLogBytes32) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_bytes32", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogIntIterator is returned from FilterLogInt and is used to iterate over the raw logs and unpacked data for LogInt events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogIntIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogInt // 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 *GatewayEVMUUPSUpgradeTestLogIntIterator) 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(GatewayEVMUUPSUpgradeTestLogInt) - 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(GatewayEVMUUPSUpgradeTestLogInt) - 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 *GatewayEVMUUPSUpgradeTestLogIntIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogIntIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogInt represents a LogInt event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogInt struct { - Arg0 *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogInt is a free log retrieval operation binding the contract event 0x0eb5d52624c8d28ada9fc55a8c502ed5aa3fbe2fb6e91b71b5f376882b1d2fb8. -// -// Solidity: event log_int(int256 arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogInt(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogIntIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_int") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogIntIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_int", logs: logs, sub: sub}, nil -} - -// WatchLogInt is a free log subscription operation binding the contract event 0x0eb5d52624c8d28ada9fc55a8c502ed5aa3fbe2fb6e91b71b5f376882b1d2fb8. -// -// Solidity: event log_int(int256 arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogInt(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogInt) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_int") - 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(GatewayEVMUUPSUpgradeTestLogInt) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_int", 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 -} - -// ParseLogInt is a log parse operation binding the contract event 0x0eb5d52624c8d28ada9fc55a8c502ed5aa3fbe2fb6e91b71b5f376882b1d2fb8. -// -// Solidity: event log_int(int256 arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogInt(log types.Log) (*GatewayEVMUUPSUpgradeTestLogInt, error) { - event := new(GatewayEVMUUPSUpgradeTestLogInt) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_int", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedAddressIterator is returned from FilterLogNamedAddress and is used to iterate over the raw logs and unpacked data for LogNamedAddress events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedAddressIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogNamedAddress // 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 *GatewayEVMUUPSUpgradeTestLogNamedAddressIterator) 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(GatewayEVMUUPSUpgradeTestLogNamedAddress) - 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(GatewayEVMUUPSUpgradeTestLogNamedAddress) - 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 *GatewayEVMUUPSUpgradeTestLogNamedAddressIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogNamedAddressIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedAddress represents a LogNamedAddress event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedAddress struct { - Key string - Val common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogNamedAddress is a free log retrieval operation binding the contract event 0x9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f. -// -// Solidity: event log_named_address(string key, address val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogNamedAddress(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogNamedAddressIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_named_address") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogNamedAddressIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_named_address", logs: logs, sub: sub}, nil -} - -// WatchLogNamedAddress is a free log subscription operation binding the contract event 0x9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f. -// -// Solidity: event log_named_address(string key, address val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogNamedAddress(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogNamedAddress) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_named_address") - 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(GatewayEVMUUPSUpgradeTestLogNamedAddress) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_address", 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 -} - -// ParseLogNamedAddress is a log parse operation binding the contract event 0x9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f. -// -// Solidity: event log_named_address(string key, address val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogNamedAddress(log types.Log) (*GatewayEVMUUPSUpgradeTestLogNamedAddress, error) { - event := new(GatewayEVMUUPSUpgradeTestLogNamedAddress) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_address", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedArrayIterator is returned from FilterLogNamedArray and is used to iterate over the raw logs and unpacked data for LogNamedArray events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedArrayIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogNamedArray // 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 *GatewayEVMUUPSUpgradeTestLogNamedArrayIterator) 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(GatewayEVMUUPSUpgradeTestLogNamedArray) - 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(GatewayEVMUUPSUpgradeTestLogNamedArray) - 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 *GatewayEVMUUPSUpgradeTestLogNamedArrayIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogNamedArrayIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedArray represents a LogNamedArray event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedArray struct { - Key string - Val []*big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogNamedArray is a free log retrieval operation binding the contract event 0x00aaa39c9ffb5f567a4534380c737075702e1f7f14107fc95328e3b56c0325fb. -// -// Solidity: event log_named_array(string key, uint256[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogNamedArray(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogNamedArrayIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_named_array") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogNamedArrayIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_named_array", logs: logs, sub: sub}, nil -} - -// WatchLogNamedArray is a free log subscription operation binding the contract event 0x00aaa39c9ffb5f567a4534380c737075702e1f7f14107fc95328e3b56c0325fb. -// -// Solidity: event log_named_array(string key, uint256[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogNamedArray(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogNamedArray) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_named_array") - 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(GatewayEVMUUPSUpgradeTestLogNamedArray) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_array", 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 -} - -// ParseLogNamedArray is a log parse operation binding the contract event 0x00aaa39c9ffb5f567a4534380c737075702e1f7f14107fc95328e3b56c0325fb. -// -// Solidity: event log_named_array(string key, uint256[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogNamedArray(log types.Log) (*GatewayEVMUUPSUpgradeTestLogNamedArray, error) { - event := new(GatewayEVMUUPSUpgradeTestLogNamedArray) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_array", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedArray0Iterator is returned from FilterLogNamedArray0 and is used to iterate over the raw logs and unpacked data for LogNamedArray0 events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedArray0Iterator struct { - Event *GatewayEVMUUPSUpgradeTestLogNamedArray0 // 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 *GatewayEVMUUPSUpgradeTestLogNamedArray0Iterator) 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(GatewayEVMUUPSUpgradeTestLogNamedArray0) - 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(GatewayEVMUUPSUpgradeTestLogNamedArray0) - 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 *GatewayEVMUUPSUpgradeTestLogNamedArray0Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogNamedArray0Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedArray0 represents a LogNamedArray0 event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedArray0 struct { - Key string - Val []*big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogNamedArray0 is a free log retrieval operation binding the contract event 0xa73eda09662f46dde729be4611385ff34fe6c44fbbc6f7e17b042b59a3445b57. -// -// Solidity: event log_named_array(string key, int256[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogNamedArray0(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogNamedArray0Iterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_named_array0") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogNamedArray0Iterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_named_array0", logs: logs, sub: sub}, nil -} - -// WatchLogNamedArray0 is a free log subscription operation binding the contract event 0xa73eda09662f46dde729be4611385ff34fe6c44fbbc6f7e17b042b59a3445b57. -// -// Solidity: event log_named_array(string key, int256[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogNamedArray0(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogNamedArray0) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_named_array0") - 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(GatewayEVMUUPSUpgradeTestLogNamedArray0) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_array0", 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 -} - -// ParseLogNamedArray0 is a log parse operation binding the contract event 0xa73eda09662f46dde729be4611385ff34fe6c44fbbc6f7e17b042b59a3445b57. -// -// Solidity: event log_named_array(string key, int256[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogNamedArray0(log types.Log) (*GatewayEVMUUPSUpgradeTestLogNamedArray0, error) { - event := new(GatewayEVMUUPSUpgradeTestLogNamedArray0) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_array0", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedArray1Iterator is returned from FilterLogNamedArray1 and is used to iterate over the raw logs and unpacked data for LogNamedArray1 events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedArray1Iterator struct { - Event *GatewayEVMUUPSUpgradeTestLogNamedArray1 // 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 *GatewayEVMUUPSUpgradeTestLogNamedArray1Iterator) 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(GatewayEVMUUPSUpgradeTestLogNamedArray1) - 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(GatewayEVMUUPSUpgradeTestLogNamedArray1) - 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 *GatewayEVMUUPSUpgradeTestLogNamedArray1Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogNamedArray1Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedArray1 represents a LogNamedArray1 event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedArray1 struct { - Key string - Val []common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogNamedArray1 is a free log retrieval operation binding the contract event 0x3bcfb2ae2e8d132dd1fce7cf278a9a19756a9fceabe470df3bdabb4bc577d1bd. -// -// Solidity: event log_named_array(string key, address[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogNamedArray1(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogNamedArray1Iterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_named_array1") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogNamedArray1Iterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_named_array1", logs: logs, sub: sub}, nil -} - -// WatchLogNamedArray1 is a free log subscription operation binding the contract event 0x3bcfb2ae2e8d132dd1fce7cf278a9a19756a9fceabe470df3bdabb4bc577d1bd. -// -// Solidity: event log_named_array(string key, address[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogNamedArray1(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogNamedArray1) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_named_array1") - 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(GatewayEVMUUPSUpgradeTestLogNamedArray1) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_array1", 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 -} - -// ParseLogNamedArray1 is a log parse operation binding the contract event 0x3bcfb2ae2e8d132dd1fce7cf278a9a19756a9fceabe470df3bdabb4bc577d1bd. -// -// Solidity: event log_named_array(string key, address[] val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogNamedArray1(log types.Log) (*GatewayEVMUUPSUpgradeTestLogNamedArray1, error) { - event := new(GatewayEVMUUPSUpgradeTestLogNamedArray1) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_array1", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedBytesIterator is returned from FilterLogNamedBytes and is used to iterate over the raw logs and unpacked data for LogNamedBytes events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedBytesIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogNamedBytes // 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 *GatewayEVMUUPSUpgradeTestLogNamedBytesIterator) 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(GatewayEVMUUPSUpgradeTestLogNamedBytes) - 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(GatewayEVMUUPSUpgradeTestLogNamedBytes) - 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 *GatewayEVMUUPSUpgradeTestLogNamedBytesIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogNamedBytesIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedBytes represents a LogNamedBytes event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedBytes struct { - Key string - Val []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogNamedBytes is a free log retrieval operation binding the contract event 0xd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18. -// -// Solidity: event log_named_bytes(string key, bytes val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogNamedBytes(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogNamedBytesIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_named_bytes") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogNamedBytesIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_named_bytes", logs: logs, sub: sub}, nil -} - -// WatchLogNamedBytes is a free log subscription operation binding the contract event 0xd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18. -// -// Solidity: event log_named_bytes(string key, bytes val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogNamedBytes(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogNamedBytes) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_named_bytes") - 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(GatewayEVMUUPSUpgradeTestLogNamedBytes) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_bytes", 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 -} - -// ParseLogNamedBytes is a log parse operation binding the contract event 0xd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18. -// -// Solidity: event log_named_bytes(string key, bytes val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogNamedBytes(log types.Log) (*GatewayEVMUUPSUpgradeTestLogNamedBytes, error) { - event := new(GatewayEVMUUPSUpgradeTestLogNamedBytes) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_bytes", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedBytes32Iterator is returned from FilterLogNamedBytes32 and is used to iterate over the raw logs and unpacked data for LogNamedBytes32 events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedBytes32Iterator struct { - Event *GatewayEVMUUPSUpgradeTestLogNamedBytes32 // 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 *GatewayEVMUUPSUpgradeTestLogNamedBytes32Iterator) 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(GatewayEVMUUPSUpgradeTestLogNamedBytes32) - 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(GatewayEVMUUPSUpgradeTestLogNamedBytes32) - 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 *GatewayEVMUUPSUpgradeTestLogNamedBytes32Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogNamedBytes32Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedBytes32 represents a LogNamedBytes32 event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedBytes32 struct { - Key string - Val [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogNamedBytes32 is a free log retrieval operation binding the contract event 0xafb795c9c61e4fe7468c386f925d7a5429ecad9c0495ddb8d38d690614d32f99. -// -// Solidity: event log_named_bytes32(string key, bytes32 val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogNamedBytes32(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogNamedBytes32Iterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_named_bytes32") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogNamedBytes32Iterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_named_bytes32", logs: logs, sub: sub}, nil -} - -// WatchLogNamedBytes32 is a free log subscription operation binding the contract event 0xafb795c9c61e4fe7468c386f925d7a5429ecad9c0495ddb8d38d690614d32f99. -// -// Solidity: event log_named_bytes32(string key, bytes32 val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogNamedBytes32(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogNamedBytes32) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_named_bytes32") - 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(GatewayEVMUUPSUpgradeTestLogNamedBytes32) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_bytes32", 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 -} - -// ParseLogNamedBytes32 is a log parse operation binding the contract event 0xafb795c9c61e4fe7468c386f925d7a5429ecad9c0495ddb8d38d690614d32f99. -// -// Solidity: event log_named_bytes32(string key, bytes32 val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogNamedBytes32(log types.Log) (*GatewayEVMUUPSUpgradeTestLogNamedBytes32, error) { - event := new(GatewayEVMUUPSUpgradeTestLogNamedBytes32) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_bytes32", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedDecimalIntIterator is returned from FilterLogNamedDecimalInt and is used to iterate over the raw logs and unpacked data for LogNamedDecimalInt events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedDecimalIntIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogNamedDecimalInt // 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 *GatewayEVMUUPSUpgradeTestLogNamedDecimalIntIterator) 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(GatewayEVMUUPSUpgradeTestLogNamedDecimalInt) - 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(GatewayEVMUUPSUpgradeTestLogNamedDecimalInt) - 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 *GatewayEVMUUPSUpgradeTestLogNamedDecimalIntIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogNamedDecimalIntIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedDecimalInt represents a LogNamedDecimalInt event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedDecimalInt struct { - Key string - Val *big.Int - Decimals *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogNamedDecimalInt is a free log retrieval operation binding the contract event 0x5da6ce9d51151ba10c09a559ef24d520b9dac5c5b8810ae8434e4d0d86411a95. -// -// Solidity: event log_named_decimal_int(string key, int256 val, uint256 decimals) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogNamedDecimalInt(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogNamedDecimalIntIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_named_decimal_int") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogNamedDecimalIntIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_named_decimal_int", logs: logs, sub: sub}, nil -} - -// WatchLogNamedDecimalInt is a free log subscription operation binding the contract event 0x5da6ce9d51151ba10c09a559ef24d520b9dac5c5b8810ae8434e4d0d86411a95. -// -// Solidity: event log_named_decimal_int(string key, int256 val, uint256 decimals) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogNamedDecimalInt(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogNamedDecimalInt) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_named_decimal_int") - 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(GatewayEVMUUPSUpgradeTestLogNamedDecimalInt) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_decimal_int", 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 -} - -// ParseLogNamedDecimalInt is a log parse operation binding the contract event 0x5da6ce9d51151ba10c09a559ef24d520b9dac5c5b8810ae8434e4d0d86411a95. -// -// Solidity: event log_named_decimal_int(string key, int256 val, uint256 decimals) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogNamedDecimalInt(log types.Log) (*GatewayEVMUUPSUpgradeTestLogNamedDecimalInt, error) { - event := new(GatewayEVMUUPSUpgradeTestLogNamedDecimalInt) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_decimal_int", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedDecimalUintIterator is returned from FilterLogNamedDecimalUint and is used to iterate over the raw logs and unpacked data for LogNamedDecimalUint events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedDecimalUintIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogNamedDecimalUint // 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 *GatewayEVMUUPSUpgradeTestLogNamedDecimalUintIterator) 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(GatewayEVMUUPSUpgradeTestLogNamedDecimalUint) - 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(GatewayEVMUUPSUpgradeTestLogNamedDecimalUint) - 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 *GatewayEVMUUPSUpgradeTestLogNamedDecimalUintIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogNamedDecimalUintIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedDecimalUint represents a LogNamedDecimalUint event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedDecimalUint struct { - Key string - Val *big.Int - Decimals *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogNamedDecimalUint is a free log retrieval operation binding the contract event 0xeb8ba43ced7537421946bd43e828b8b2b8428927aa8f801c13d934bf11aca57b. -// -// Solidity: event log_named_decimal_uint(string key, uint256 val, uint256 decimals) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogNamedDecimalUint(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogNamedDecimalUintIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_named_decimal_uint") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogNamedDecimalUintIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_named_decimal_uint", logs: logs, sub: sub}, nil -} - -// WatchLogNamedDecimalUint is a free log subscription operation binding the contract event 0xeb8ba43ced7537421946bd43e828b8b2b8428927aa8f801c13d934bf11aca57b. -// -// Solidity: event log_named_decimal_uint(string key, uint256 val, uint256 decimals) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogNamedDecimalUint(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogNamedDecimalUint) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_named_decimal_uint") - 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(GatewayEVMUUPSUpgradeTestLogNamedDecimalUint) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_decimal_uint", 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 -} - -// ParseLogNamedDecimalUint is a log parse operation binding the contract event 0xeb8ba43ced7537421946bd43e828b8b2b8428927aa8f801c13d934bf11aca57b. -// -// Solidity: event log_named_decimal_uint(string key, uint256 val, uint256 decimals) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogNamedDecimalUint(log types.Log) (*GatewayEVMUUPSUpgradeTestLogNamedDecimalUint, error) { - event := new(GatewayEVMUUPSUpgradeTestLogNamedDecimalUint) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_decimal_uint", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedIntIterator is returned from FilterLogNamedInt and is used to iterate over the raw logs and unpacked data for LogNamedInt events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedIntIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogNamedInt // 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 *GatewayEVMUUPSUpgradeTestLogNamedIntIterator) 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(GatewayEVMUUPSUpgradeTestLogNamedInt) - 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(GatewayEVMUUPSUpgradeTestLogNamedInt) - 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 *GatewayEVMUUPSUpgradeTestLogNamedIntIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogNamedIntIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedInt represents a LogNamedInt event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedInt struct { - Key string - Val *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogNamedInt is a free log retrieval operation binding the contract event 0x2fe632779174374378442a8e978bccfbdcc1d6b2b0d81f7e8eb776ab2286f168. -// -// Solidity: event log_named_int(string key, int256 val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogNamedInt(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogNamedIntIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_named_int") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogNamedIntIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_named_int", logs: logs, sub: sub}, nil -} - -// WatchLogNamedInt is a free log subscription operation binding the contract event 0x2fe632779174374378442a8e978bccfbdcc1d6b2b0d81f7e8eb776ab2286f168. -// -// Solidity: event log_named_int(string key, int256 val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogNamedInt(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogNamedInt) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_named_int") - 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(GatewayEVMUUPSUpgradeTestLogNamedInt) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_int", 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 -} - -// ParseLogNamedInt is a log parse operation binding the contract event 0x2fe632779174374378442a8e978bccfbdcc1d6b2b0d81f7e8eb776ab2286f168. -// -// Solidity: event log_named_int(string key, int256 val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogNamedInt(log types.Log) (*GatewayEVMUUPSUpgradeTestLogNamedInt, error) { - event := new(GatewayEVMUUPSUpgradeTestLogNamedInt) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_int", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedStringIterator is returned from FilterLogNamedString and is used to iterate over the raw logs and unpacked data for LogNamedString events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedStringIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogNamedString // 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 *GatewayEVMUUPSUpgradeTestLogNamedStringIterator) 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(GatewayEVMUUPSUpgradeTestLogNamedString) - 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(GatewayEVMUUPSUpgradeTestLogNamedString) - 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 *GatewayEVMUUPSUpgradeTestLogNamedStringIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogNamedStringIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedString represents a LogNamedString event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedString struct { - Key string - Val string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogNamedString is a free log retrieval operation binding the contract event 0x280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583. -// -// Solidity: event log_named_string(string key, string val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogNamedString(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogNamedStringIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_named_string") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogNamedStringIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_named_string", logs: logs, sub: sub}, nil -} - -// WatchLogNamedString is a free log subscription operation binding the contract event 0x280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583. -// -// Solidity: event log_named_string(string key, string val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogNamedString(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogNamedString) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_named_string") - 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(GatewayEVMUUPSUpgradeTestLogNamedString) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_string", 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 -} - -// ParseLogNamedString is a log parse operation binding the contract event 0x280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583. -// -// Solidity: event log_named_string(string key, string val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogNamedString(log types.Log) (*GatewayEVMUUPSUpgradeTestLogNamedString, error) { - event := new(GatewayEVMUUPSUpgradeTestLogNamedString) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_string", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedUintIterator is returned from FilterLogNamedUint and is used to iterate over the raw logs and unpacked data for LogNamedUint events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedUintIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogNamedUint // 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 *GatewayEVMUUPSUpgradeTestLogNamedUintIterator) 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(GatewayEVMUUPSUpgradeTestLogNamedUint) - 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(GatewayEVMUUPSUpgradeTestLogNamedUint) - 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 *GatewayEVMUUPSUpgradeTestLogNamedUintIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogNamedUintIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogNamedUint represents a LogNamedUint event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogNamedUint struct { - Key string - Val *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogNamedUint is a free log retrieval operation binding the contract event 0xb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8. -// -// Solidity: event log_named_uint(string key, uint256 val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogNamedUint(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogNamedUintIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_named_uint") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogNamedUintIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_named_uint", logs: logs, sub: sub}, nil -} - -// WatchLogNamedUint is a free log subscription operation binding the contract event 0xb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8. -// -// Solidity: event log_named_uint(string key, uint256 val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogNamedUint(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogNamedUint) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_named_uint") - 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(GatewayEVMUUPSUpgradeTestLogNamedUint) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_uint", 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 -} - -// ParseLogNamedUint is a log parse operation binding the contract event 0xb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8. -// -// Solidity: event log_named_uint(string key, uint256 val) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogNamedUint(log types.Log) (*GatewayEVMUUPSUpgradeTestLogNamedUint, error) { - event := new(GatewayEVMUUPSUpgradeTestLogNamedUint) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_named_uint", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogStringIterator is returned from FilterLogString and is used to iterate over the raw logs and unpacked data for LogString events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogStringIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogString // 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 *GatewayEVMUUPSUpgradeTestLogStringIterator) 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(GatewayEVMUUPSUpgradeTestLogString) - 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(GatewayEVMUUPSUpgradeTestLogString) - 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 *GatewayEVMUUPSUpgradeTestLogStringIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogStringIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogString represents a LogString event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogString struct { - Arg0 string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogString is a free log retrieval operation binding the contract event 0x0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b. -// -// Solidity: event log_string(string arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogString(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogStringIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_string") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogStringIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_string", logs: logs, sub: sub}, nil -} - -// WatchLogString is a free log subscription operation binding the contract event 0x0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b. -// -// Solidity: event log_string(string arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogString(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogString) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_string") - 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(GatewayEVMUUPSUpgradeTestLogString) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_string", 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 -} - -// ParseLogString is a log parse operation binding the contract event 0x0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b. -// -// Solidity: event log_string(string arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogString(log types.Log) (*GatewayEVMUUPSUpgradeTestLogString, error) { - event := new(GatewayEVMUUPSUpgradeTestLogString) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_string", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogUintIterator is returned from FilterLogUint and is used to iterate over the raw logs and unpacked data for LogUint events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogUintIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogUint // 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 *GatewayEVMUUPSUpgradeTestLogUintIterator) 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(GatewayEVMUUPSUpgradeTestLogUint) - 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(GatewayEVMUUPSUpgradeTestLogUint) - 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 *GatewayEVMUUPSUpgradeTestLogUintIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogUintIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogUint represents a LogUint event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogUint struct { - Arg0 *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogUint is a free log retrieval operation binding the contract event 0x2cab9790510fd8bdfbd2115288db33fec66691d476efc5427cfd4c0969301755. -// -// Solidity: event log_uint(uint256 arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogUint(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogUintIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "log_uint") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogUintIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "log_uint", logs: logs, sub: sub}, nil -} - -// WatchLogUint is a free log subscription operation binding the contract event 0x2cab9790510fd8bdfbd2115288db33fec66691d476efc5427cfd4c0969301755. -// -// Solidity: event log_uint(uint256 arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogUint(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogUint) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "log_uint") - 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(GatewayEVMUUPSUpgradeTestLogUint) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_uint", 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 -} - -// ParseLogUint is a log parse operation binding the contract event 0x2cab9790510fd8bdfbd2115288db33fec66691d476efc5427cfd4c0969301755. -// -// Solidity: event log_uint(uint256 arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogUint(log types.Log) (*GatewayEVMUUPSUpgradeTestLogUint, error) { - event := new(GatewayEVMUUPSUpgradeTestLogUint) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "log_uint", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GatewayEVMUUPSUpgradeTestLogsIterator is returned from FilterLogs and is used to iterate over the raw logs and unpacked data for Logs events raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogsIterator struct { - Event *GatewayEVMUUPSUpgradeTestLogs // 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 *GatewayEVMUUPSUpgradeTestLogsIterator) 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(GatewayEVMUUPSUpgradeTestLogs) - 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(GatewayEVMUUPSUpgradeTestLogs) - 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 *GatewayEVMUUPSUpgradeTestLogsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GatewayEVMUUPSUpgradeTestLogsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GatewayEVMUUPSUpgradeTestLogs represents a Logs event raised by the GatewayEVMUUPSUpgradeTest contract. -type GatewayEVMUUPSUpgradeTestLogs struct { - Arg0 []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLogs is a free log retrieval operation binding the contract event 0xe7950ede0394b9f2ce4a5a1bf5a7e1852411f7e6661b4308c913c4bfd11027e4. -// -// Solidity: event logs(bytes arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterLogs(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestLogsIterator, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "logs") - if err != nil { - return nil, err - } - return &GatewayEVMUUPSUpgradeTestLogsIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "logs", logs: logs, sub: sub}, nil -} - -// WatchLogs is a free log subscription operation binding the contract event 0xe7950ede0394b9f2ce4a5a1bf5a7e1852411f7e6661b4308c913c4bfd11027e4. -// -// Solidity: event logs(bytes arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchLogs(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestLogs) (event.Subscription, error) { - - logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "logs") - 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(GatewayEVMUUPSUpgradeTestLogs) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "logs", 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 -} - -// ParseLogs is a log parse operation binding the contract event 0xe7950ede0394b9f2ce4a5a1bf5a7e1852411f7e6661b4308c913c4bfd11027e4. -// -// Solidity: event logs(bytes arg0) -func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseLogs(log types.Log) (*GatewayEVMUUPSUpgradeTestLogs, error) { - event := new(GatewayEVMUUPSUpgradeTestLogs) - if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "logs", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go b/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go index 691217016..9ca5dcafd 100644 --- a/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go +++ b/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -47,8 +47,8 @@ type RevertOptions struct { // GatewayEVMUpgradeTestMetaData contains all meta data concerning the GatewayEVMUpgradeTest contract. var GatewayEVMUpgradeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516136d86100fd6000396000818161217a015281816121a3015261262f01526136d86000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ad3cb1cc11610095578063d547741f11610064578063d547741f14610621578063dda79b7514610641578063e63ab1e914610661578063ece697b31461069557600080fd5b8063ad3cb1cc14610578578063ae7a3a6f146105c1578063c0c53b8b146105e1578063d09e3b781461060157600080fd5b80638456cb59116100d15780638456cb59146104b557806391d14854146104ca578063a217fddf1461052f578063a783c7891461054457600080fd5b80635c975abb146104245780635d62c8601461045b578063726ac97c1461048f578063744b9b8b146104a257600080fd5b80632f2ff15d1161017a5780635131ab59116101495780635131ab59146103af57806352d1902d146103cf57806357bec62f146103e45780635b1125911461040457600080fd5b80632f2ff15d1461034757806336568abe146103675780633f4ba83a146103875780634f1ef2861461039c57600080fd5b80631becceb4116101b65780631becceb4146102725780631cff79cd1461029257806321e093b1146102b2578063248a9ca3146102ea57600080fd5b806301ffc9a7146101e857806310188aef1461021d578063102614b01461023f57806314fd2d481461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612d1f565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d7d565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612db0565b610842565b61023d61026d366004612e73565b610955565b34801561027e57600080fd5b5061023d61028d366004612ee6565b610b56565b6102a56102a0366004612f4d565b610bed565b604051610214919061300e565b3480156102be57600080fd5b506003546102d2906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102f657600080fd5b50610339610305366004613021565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b34801561035357600080fd5b5061023d61036236600461303a565b610cf0565b34801561037357600080fd5b5061023d61038236600461303a565b610d34565b34801561039357600080fd5b5061023d610d85565b61023d6103aa366004613095565b610dba565b3480156103bb57600080fd5b5061023d6103ca36600461319c565b610dd9565b3480156103db57600080fd5b506103396110f2565b3480156103f057600080fd5b506002546102d2906001600160a01b031681565b34801561041057600080fd5b506001546102d2906001600160a01b031681565b34801561043057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561046757600080fd5b506103397f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b61023d61049d36600461320b565b611121565b61023d6104b0366004612ee6565b6112b2565b3480156104c157600080fd5b5061023d611447565b3480156104d657600080fd5b506102086104e536600461303a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561053b57600080fd5b50610339600081565b34801561055057600080fd5b506103397f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561058457600080fd5b506102a56040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105cd57600080fd5b5061023d6105dc366004612d7d565b611479565b3480156105ed57600080fd5b5061023d6105fc366004613259565b61156d565b34801561060d57600080fd5b5061023d61061c36600461329c565b611822565b34801561062d57600080fd5b5061023d61063c36600461303a565b611933565b34801561064d57600080fd5b506000546102d2906001600160a01b031681565b34801561066d57600080fd5b506103397f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156106a157600080fd5b5061023d6106b0366004613334565b611977565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b39565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611c30565b610852611c8e565b8260000361088c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d7338385611d0f565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091e939291906134f7565b60405180910390a361094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61097f81611b39565b610987611c30565b61098f611c8e565b6001600160a01b0385166109cf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610a1c576040519150601f19603f3d011682016040523d82523d6000602084013e610a21565b606091505b5050905080610a5c576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa9b0a73c0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063a9b0a73c90610aa190869060040161356f565b600060405180830381600087803b158015610abb57600080fd5b505af1158015610acf573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167fbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c34888888604051610b1d9493929190613582565b60405180910390a350610b4f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610b5e611c30565b610b66611c8e565b6001600160a01b038416610ba6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091e939291906135b9565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c1981611b39565b610c21611c30565b610c29611c8e565b6001600160a01b038516610c69576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c76868686611f72565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546348787604051610cb5939291906135df565b60405180910390a29150610ce860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d2a81611b39565b61094f8383611b43565b6001600160a01b0381163314610d76576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d80828261201b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610daf81611b39565b610db76120df565b50565b610dc261216f565b610dcb8261223f565b610dd5828261224a565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e0381611b39565b610e0b611c30565b610e13611c8e565b83600003610e4d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610e8d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e97868661236e565b610ecd576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5991906135f9565b610f8f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f9a858484611f72565b50610fa5868661236e565b610fdb576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561103b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105f9190613616565b905080156110715761107187826123fe565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516110b8939291906135df565b60405180910390a3506110ea60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006110fc612624565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b611129611c30565b611131611c8e565b3460000361116b576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166111ab576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146111f8576040519150601f19603f3d011682016040523d82523d6000602084013e6111fd565b606091505b5050905080611238576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600086604051611280939291906134f7565b60405180910390a350610dd560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6112ba611c30565b6112c2611c8e565b346000036112fc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661133c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611389576040519150601f19603f3d011682016040523d82523d6000602084013e61138e565b606091505b50509050806113c9576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600088888860405161141595949392919061362f565b60405180910390a35061094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61147181611b39565b610db7612686565b600061148481611b39565b6001600160a01b0382166114c4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611507576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115317f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115b85750825b905060008267ffffffffffffffff1660011480156115d55750303b155b9050811580156115e3575080155b1561161a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561167b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061169857506001600160a01b038716155b156116cf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116d76126ff565b6116df612707565b6116e76126ff565b6116ef612717565b6116fa600087611b43565b506117257f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b43565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556117837f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b43565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118185784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61182a611c30565b611832611c8e565b8460000361186c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166118ac576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118b7338587611d0f565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c878787878760405161190295949392919061362f565b60405180910390a36110ea60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461196d81611b39565b61094f838361201b565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96119a181611b39565b6119a9611c30565b6119b1611c8e565b846000036119eb576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611a2b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a3f6001600160a01b0388168787612727565b6040517fa9b0a73c0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063a9b0a73c90611a8490859060040161356f565b600060405180830381600087803b158015611a9e57600080fd5b505af1158015611ab2573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167fbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c87878787604051611aff9493929190613582565b60405180910390a3611b3060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610db7813361279b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c26576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bdc3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c8c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e7357611d3a6001600160a01b038316843084612828565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca91906135f9565b611e00576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e5f57600080fd5b505af1158015611b30573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efa91906135f9565b611f30576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610d80906001600160a01b038481169186911684612828565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611f92929190613676565b60006040518083038185875af1925050503d8060008114611fcf576040519150601f19603f3d011682016040523d82523d6000602084013e611fd4565b606091505b509150915081612010576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c26576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b6120e7612861565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061220857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121fc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dd581611b39565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122c2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526122bf91810190613616565b60015b612308576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612364576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016122ff565b610d8083836128bc565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156123da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201491906135f9565b6003546001600160a01b039081169083160361254d576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a491906135f9565b6124da576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561253957600080fd5b505af11580156110ea573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d491906135f9565b61260a576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610dd5906001600160a01b03848116911683612727565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61268e611c30565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612151565b611c8c612912565b61270f612912565b611c8c612979565b61271f612912565b611c8c612981565b6040516001600160a01b03838116602483015260448201839052610d8091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129d2565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610dd5576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016122ff565b6040516001600160a01b03848116602483015283811660448301526064820183905261094f9186918216906323b872dd90608401612754565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c8c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c582612a4e565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561290a57610d808282612af6565b610dd5612b6c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c8c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4c612912565b612989612912565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60006129e76001600160a01b03841683612ba4565b90508051600014158015612a0c575080806020019051810190612a0a91906135f9565b155b15610d80576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016122ff565b806001600160a01b03163b600003612a9d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016122ff565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b139190613686565b600060405180830381855af49150503d8060008114612b4e576040519150601f19603f3d011682016040523d82523d6000602084013e612b53565b606091505b5091509150612b63858383612bb2565b95945050505050565b3415611c8c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061201483836000612c27565b606082612bc757612bc282612cdd565b612014565b8151158015612bde57506001600160a01b0384163b155b15612c20576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016122ff565b5080612014565b606081471015612c65576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016122ff565b600080856001600160a01b03168486604051612c819190613686565b60006040518083038185875af1925050503d8060008114612cbe576040519150601f19603f3d011682016040523d82523d6000602084013e612cc3565b606091505b5091509150612cd3868383612bb2565b9695505050505050565b805115612ced5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d3157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461201457600080fd5b80356001600160a01b0381168114612d7857600080fd5b919050565b600060208284031215612d8f57600080fd5b61201482612d61565b600060a08284031215612daa57600080fd5b50919050565b60008060008060808587031215612dc657600080fd5b612dcf85612d61565b935060208501359250612de460408601612d61565b9150606085013567ffffffffffffffff811115612e0057600080fd5b612e0c87828801612d98565b91505092959194509250565b60008083601f840112612e2a57600080fd5b50813567ffffffffffffffff811115612e4257600080fd5b602083019150836020828501011115612e5a57600080fd5b9250929050565b600060608284031215612daa57600080fd5b60008060008060608587031215612e8957600080fd5b612e9285612d61565b9350602085013567ffffffffffffffff811115612eae57600080fd5b612eba87828801612e18565b909450925050604085013567ffffffffffffffff811115612eda57600080fd5b612e0c87828801612e61565b60008060008060608587031215612efc57600080fd5b612f0585612d61565b9350602085013567ffffffffffffffff811115612f2157600080fd5b612f2d87828801612e18565b909450925050604085013567ffffffffffffffff811115612e0057600080fd5b600080600060408486031215612f6257600080fd5b612f6b84612d61565b9250602084013567ffffffffffffffff811115612f8757600080fd5b612f9386828701612e18565b9497909650939450505050565b60005b83811015612fbb578181015183820152602001612fa3565b50506000910152565b60008151808452612fdc816020860160208601612fa0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006120146020830184612fc4565b60006020828403121561303357600080fd5b5035919050565b6000806040838503121561304d57600080fd5b8235915061305d60208401612d61565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156130a857600080fd5b6130b183612d61565b9150602083013567ffffffffffffffff8111156130cd57600080fd5b8301601f810185136130de57600080fd5b803567ffffffffffffffff8111156130f8576130f8613066565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561316457613164613066565b60405281815282820160200187101561317c57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806000806000608086880312156131b457600080fd5b6131bd86612d61565b94506131cb60208701612d61565b935060408601359250606086013567ffffffffffffffff8111156131ee57600080fd5b6131fa88828901612e18565b969995985093965092949392505050565b6000806040838503121561321e57600080fd5b61322783612d61565b9150602083013567ffffffffffffffff81111561324357600080fd5b61324f85828601612d98565b9150509250929050565b60008060006060848603121561326e57600080fd5b61327784612d61565b925061328560208501612d61565b915061329360408501612d61565b90509250925092565b60008060008060008060a087890312156132b557600080fd5b6132be87612d61565b9550602087013594506132d360408801612d61565b9350606087013567ffffffffffffffff8111156132ef57600080fd5b6132fb89828a01612e18565b909450925050608087013567ffffffffffffffff81111561331b57600080fd5b61332789828a01612d98565b9150509295509295509295565b60008060008060008060a0878903121561334d57600080fd5b61335687612d61565b955061336460208801612d61565b945060408701359350606087013567ffffffffffffffff81111561338757600080fd5b61339389828a01612e18565b909450925050608087013567ffffffffffffffff8111156133b357600080fd5b61332789828a01612e61565b8015158114610db757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261340257600080fd5b830160208101925035905067ffffffffffffffff81111561342257600080fd5b803603821315612e5a57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361348b82612d61565b1682526000602082013561349e816133bf565b151560208401526001600160a01b036134b960408401612d61565b1660408401526134cc60608301836133cd565b60a060608601526134e160a086018284613431565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612b6360a083018461347a565b6001600160a01b0361353e82612d61565b16825260208181013590830152600061355a60408301836133cd565b60606040860152612b63606086018284613431565b602081526000612014602083018461352d565b84815260606020820152600061359c606083018587613431565b82810360408401526135ae818561352d565b979650505050505050565b6040815260006135cd604083018587613431565b8281036020840152612cd3818561347a565b838152604060208201526000612b63604083018486613431565b60006020828403121561360b57600080fd5b8151612014816133bf565b60006020828403121561362857600080fd5b5051919050565b8581526001600160a01b0385166020820152608060408201526000613658608083018587613431565b828103606084015261366a818561347a565b98975050505050505050565b8183823760009101908152919050565b60008251613698818460208701612fa0565b919091019291505056fea264697066735822122076e0082ca3fb5364fa6ea74c9233b28ed9e58510c3b43084ad842c4b820b2afc64736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_PAYLOAD_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516139966100fd600039600081816122fc0152818161232501526127b101526139966000f3fe6080604052600436106102195760003560e01c8063726ac97c1161011d578063ad3cb1cc116100b0578063d0b492c31161007f578063dda79b7511610064578063dda79b75146106ba578063e63ab1e9146106da578063f7ad60db1461070e57600080fd5b8063d0b492c31461067a578063d547741f1461069a57600080fd5b8063ad3cb1cc146105d1578063ae7a3a6f1461061a578063c0c53b8b1461063a578063d09e3b781461065a57600080fd5b8063950837aa116100ec578063950837aa14610552578063a217fddf14610572578063a2ba193414610587578063a783c7891461059d57600080fd5b8063726ac97c146104b2578063744b9b8b146104c55780638456cb59146104d857806391d14854146104ed57600080fd5b806336568abe116101b057806352d1902d1161017f5780635b112591116101645780635b112591146104275780635c975abb146104475780635d62c8601461047e57600080fd5b806352d1902d146103f257806357bec62f1461040757600080fd5b806336568abe1461038a5780633f4ba83a146103aa5780634f1ef286146103bf5780635131ab59146103d257600080fd5b80631cff79cd116101ec5780631cff79cd146102b557806321e093b1146102d5578063248a9ca31461030d5780632f2ff15d1461036a57600080fd5b806301ffc9a71461021e57806310188aef14610253578063102614b0146102755780631becceb414610295575b600080fd5b34801561022a57600080fd5b5061023e610239366004612f26565b610721565b60405190151581526020015b60405180910390f35b34801561025f57600080fd5b5061027361026e366004612f84565b6107ba565b005b34801561028157600080fd5b50610273610290366004612fb7565b610895565b3480156102a157600080fd5b506102736102b0366004613068565b61098f565b6102c86102c33660046130cf565b610a5f565b60405161024a9190613190565b3480156102e157600080fd5b506003546102f5906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b34801561031957600080fd5b5061035c6103283660046131a3565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161024a565b34801561037657600080fd5b506102736103853660046131bc565b610b49565b34801561039657600080fd5b506102736103a53660046131bc565b610b8d565b3480156103b657600080fd5b50610273610bde565b6102736103cd366004613217565b610c13565b3480156103de57600080fd5b506102736103ed36600461331e565b610c32565b3480156103fe57600080fd5b5061035c610f32565b34801561041357600080fd5b506002546102f5906001600160a01b031681565b34801561043357600080fd5b506001546102f5906001600160a01b031681565b34801561045357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661023e565b34801561048a57600080fd5b5061035c7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102736104c036600461338d565b610f61565b6102736104d3366004613068565b6110d9565b3480156104e457600080fd5b506102736112a7565b3480156104f957600080fd5b5061023e6105083660046131bc565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055e57600080fd5b5061027361056d366004612f84565b6112d9565b34801561057e57600080fd5b5061035c600081565b34801561059357600080fd5b5061035c61040081565b3480156105a957600080fd5b5061035c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105dd57600080fd5b506102c86040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561062657600080fd5b50610273610635366004612f84565b6113f0565b34801561064657600080fd5b506102736106553660046133db565b6114cb565b34801561066657600080fd5b5061027361067536600461341e565b611792565b34801561068657600080fd5b506102736106953660046134c8565b6118dc565b3480156106a657600080fd5b506102736106b53660046131bc565b611a85565b3480156106c657600080fd5b506000546102f5906001600160a01b031681565b3480156106e657600080fd5b5061035c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61027361071c366004613553565b611ac9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107b457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006107c581611cb1565b6001600160a01b0382166107ec5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b03161561082f576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108597f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611cbb565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61089d611da8565b6108a5611e06565b826000036108df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109065760405163d92e233d60e01b815260040160405180910390fd5b610911338385611e87565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c858585604051610958939291906136fe565b60405180910390a361098960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b610997611da8565b61099f611e06565b6001600160a01b0384166109c65760405163d92e233d60e01b815260040160405180910390fd5b6104006109d66060830183613734565b6109e1915084613799565b10610a18576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d974858585604051610958939291906137d3565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a8b81611cb1565b610a93611da8565b610a9b611e06565b6001600160a01b038516610ac25760405163d92e233d60e01b815260040160405180910390fd5b6000610acf8686866120ea565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546348787604051610b0e939291906137f9565b60405180910390a29150610b4160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b8381611cb1565b6109898383611cbb565b6001600160a01b0381163314610bcf576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bd9828261219d565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c0881611cb1565b610c10612261565b50565b610c1b6122f1565b610c24826123c1565b610c2e82826123cc565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610c5c81611cb1565b610c64611da8565b610c6c611e06565b83600003610ca6576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610ccd5760405163d92e233d60e01b815260040160405180910390fd5b610cd786866124f0565b610d0d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610d75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d999190613813565b610dcf576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dda8584846120ea565b50610de586866124f0565b610e1b576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9f9190613830565b90508015610eb157610eb18782612580565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610ef8939291906137f9565b60405180910390a350610f2a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000610f3c6127a6565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f69611da8565b610f71611e06565b34600003610fab576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610fd25760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d806000811461101f576040519150601f19603f3d011682016040523d82523d6000602084013e611024565b606091505b505090508061105f576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000866040516110a7939291906136fe565b60405180910390a350610c2e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6110e1611da8565b6110e9611e06565b34600003611123576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661114a5760405163d92e233d60e01b815260040160405180910390fd5b61040061115a6060830183613734565b611165915084613799565b1061119c576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146111e9576040519150601f19603f3d011682016040523d82523d6000602084013e6111ee565b606091505b5050905080611229576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000888888604051611275959493929190613849565b60405180910390a35061098960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112d181611cb1565b610c10612808565b60006112e481611cb1565b6001600160a01b03821661130b5760405163d92e233d60e01b815260040160405180910390fd5b600154611342907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b031661219d565b5061136d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611cbb565b50600154604080516001600160a01b03928316815291841660208301527f3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579910160405180910390a150600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60006113fb81611cb1565b6001600160a01b0382166114225760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611465576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61148f7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611cbb565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115165750825b905060008267ffffffffffffffff1660011480156115335750303b155b905081158015611541575080155b15611578576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156115d95784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806115f657506001600160a01b038716155b156116145760405163d92e233d60e01b815260040160405180910390fd5b61161c612881565b611624612889565b61162c612881565b611634612899565b61163f600087611cbb565b5061166a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611cbb565b506116957f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a89611cbb565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556116f37f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611cbb565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156117885784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61179a611da8565b6117a2611e06565b846000036117dc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166118035760405163d92e233d60e01b815260040160405180910390fd5b6104006118136060830183613734565b61181e915084613799565b10611855576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611860338587611e87565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c87878787876040516118ab959493929190613849565b60405180910390a3610f2a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961190681611cb1565b61190e611da8565b611916611e06565b84600003611950576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166119775760405163d92e233d60e01b815260040160405180910390fd5b61198b6001600160a01b03881687876128a9565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de0906119d09085906004016138ea565b600060405180830381600087803b1580156119ea57600080fd5b505af11580156119fe573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143687878787604051611a4b94939291906138fd565b60405180910390a3611a7c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611abf81611cb1565b610989838361219d565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb611af381611cb1565b611afb611da8565b611b03611e06565b6001600160a01b038516611b2a5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114611b77576040519150601f19603f3d011682016040523d82523d6000602084013e611b7c565b606091505b5050905080611bb7576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611bfc9086906004016138ea565b600060405180830381600087803b158015611c1657600080fd5b505af1158015611c2a573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611c7894939291906138fd565b60405180910390a350611caa60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610c10813361291d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611d9e576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d543390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107b4565b60009150506107b4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e04576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611e81576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611feb57611eb26001600160a01b0383168430846129aa565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f429190613813565b611f78576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611fd757600080fd5b505af1158015611a7c573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561204e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120729190613813565b6120a8576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610bd9906001600160a01b0384811691869116846129aa565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606120f683836129e3565b600080856001600160a01b0316348686604051612114929190613934565b60006040518083038185875af1925050503d8060008114612151576040519150601f19603f3d011682016040523d82523d6000602084013e612156565b606091505b509150915081612192576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611d9e576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107b4565b612269612a68565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061238a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661237e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e04576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c2e81611cb1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612444575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261244191810190613830565b60015b61248a576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146124e6576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612481565b610bd98383612ac3565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af115801561255c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121969190613813565b6003546001600160a01b03908116908316036126cf576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126269190613813565b61265c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156126bb57600080fd5b505af1158015610f2a573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127569190613813565b61278c576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610c2e906001600160a01b038481169116836128a9565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e04576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612810611da8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336122d3565b611e04612b19565b612891612b19565b611e04612b80565b6128a1612b19565b611e04612b88565b6040516001600160a01b03838116602483015260448201839052610bd991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612bd9565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610c2e576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612481565b6040516001600160a01b0384811660248301528381166044830152606482018390526109899186918216906323b872dd906084016128d6565b60048110610c2e5781357f99f46220000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610bd9576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e04576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612acc82612c55565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b1157610bd98282612cfd565b610c2e612d73565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e04576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c4612b19565b612b90612b19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000612bee6001600160a01b03841683612dab565b90508051600014158015612c13575080806020019051810190612c119190613813565b155b15610bd9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612481565b806001600160a01b03163b600003612ca4576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612481565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d1a9190613944565b600060405180830381855af49150503d8060008114612d55576040519150601f19603f3d011682016040523d82523d6000602084013e612d5a565b606091505b5091509150612d6a858383612db9565b95945050505050565b3415611e04576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061219683836000612e2e565b606082612dce57612dc982612ee4565b612196565b8151158015612de557506001600160a01b0384163b155b15612e27576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612481565b5080612196565b606081471015612e6c576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612481565b600080856001600160a01b03168486604051612e889190613944565b60006040518083038185875af1925050503d8060008114612ec5576040519150601f19603f3d011682016040523d82523d6000602084013e612eca565b606091505b5091509150612eda868383612db9565b9695505050505050565b805115612ef45780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612f3857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461219657600080fd5b80356001600160a01b0381168114612f7f57600080fd5b919050565b600060208284031215612f9657600080fd5b61219682612f68565b600060a08284031215612fb157600080fd5b50919050565b60008060008060808587031215612fcd57600080fd5b612fd685612f68565b935060208501359250612feb60408601612f68565b9150606085013567ffffffffffffffff81111561300757600080fd5b61301387828801612f9f565b91505092959194509250565b60008083601f84011261303157600080fd5b50813567ffffffffffffffff81111561304957600080fd5b60208301915083602082850101111561306157600080fd5b9250929050565b6000806000806060858703121561307e57600080fd5b61308785612f68565b9350602085013567ffffffffffffffff8111156130a357600080fd5b6130af8782880161301f565b909450925050604085013567ffffffffffffffff81111561300757600080fd5b6000806000604084860312156130e457600080fd5b6130ed84612f68565b9250602084013567ffffffffffffffff81111561310957600080fd5b6131158682870161301f565b9497909650939450505050565b60005b8381101561313d578181015183820152602001613125565b50506000910152565b6000815180845261315e816020860160208601613122565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006121966020830184613146565b6000602082840312156131b557600080fd5b5035919050565b600080604083850312156131cf57600080fd5b823591506131df60208401612f68565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561322a57600080fd5b61323383612f68565b9150602083013567ffffffffffffffff81111561324f57600080fd5b8301601f8101851361326057600080fd5b803567ffffffffffffffff81111561327a5761327a6131e8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156132e6576132e66131e8565b6040528181528282016020018710156132fe57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561333657600080fd5b61333f86612f68565b945061334d60208701612f68565b935060408601359250606086013567ffffffffffffffff81111561337057600080fd5b61337c8882890161301f565b969995985093965092949392505050565b600080604083850312156133a057600080fd5b6133a983612f68565b9150602083013567ffffffffffffffff8111156133c557600080fd5b6133d185828601612f9f565b9150509250929050565b6000806000606084860312156133f057600080fd5b6133f984612f68565b925061340760208501612f68565b915061341560408501612f68565b90509250925092565b60008060008060008060a0878903121561343757600080fd5b61344087612f68565b95506020870135945061345560408801612f68565b9350606087013567ffffffffffffffff81111561347157600080fd5b61347d89828a0161301f565b909450925050608087013567ffffffffffffffff81111561349d57600080fd5b6134a989828a01612f9f565b9150509295509295509295565b600060608284031215612fb157600080fd5b60008060008060008060a087890312156134e157600080fd5b6134ea87612f68565b95506134f860208801612f68565b945060408701359350606087013567ffffffffffffffff81111561351b57600080fd5b61352789828a0161301f565b909450925050608087013567ffffffffffffffff81111561354757600080fd5b6134a989828a016134b6565b6000806000806060858703121561356957600080fd5b61357285612f68565b9350602085013567ffffffffffffffff81111561358e57600080fd5b61359a8782880161301f565b909450925050604085013567ffffffffffffffff8111156135ba57600080fd5b613013878288016134b6565b8015158114610c1057600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261360957600080fd5b830160208101925035905067ffffffffffffffff81111561362957600080fd5b80360382131561306157600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361369282612f68565b168252600060208201356136a5816135c6565b151560208401526001600160a01b036136c060408401612f68565b1660408401526136d360608301836135d4565b60a060608601526136e860a086018284613638565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612d6a60a0830184613681565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261376957600080fd5b83018035915067ffffffffffffffff82111561378457600080fd5b60200191503681900382131561306157600080fd5b808201808211156107b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6040815260006137e7604083018587613638565b8281036020840152612eda8185613681565b838152604060208201526000612d6a604083018486613638565b60006020828403121561382557600080fd5b8151612196816135c6565b60006020828403121561384257600080fd5b5051919050565b8581526001600160a01b0385166020820152608060408201526000613872608083018587613638565b82810360608401526138848185613681565b98975050505050505050565b6001600160a01b036138a182612f68565b1682526000602082013567ffffffffffffffff81168082146138c257600080fd5b6020850152506138d560408301836135d4565b60606040860152612d6a606086018284613638565b6020815260006121966020830184613890565b848152606060208201526000613917606083018587613638565b82810360408401526139298185613890565b979650505050505050565b8183823760009101908152919050565b60008251613956818460208701613122565b919091019291505056fea26469706673582212206e742690b5819b708d9604a1cb17b6c2fbaedbc51537d18a5ccc3e3287d52b4664736f6c634300081a0033", } // GatewayEVMUpgradeTestABI is the input ABI used to generate the binding from. @@ -280,6 +280,37 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestCallerSession) DEFAULTADMINRO return _GatewayEVMUpgradeTest.Contract.DEFAULTADMINROLE(&_GatewayEVMUpgradeTest.CallOpts) } +// MAXPAYLOADSIZE is a free data retrieval call binding the contract method 0xa2ba1934. +// +// Solidity: function MAX_PAYLOAD_SIZE() view returns(uint256) +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestCaller) MAXPAYLOADSIZE(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GatewayEVMUpgradeTest.contract.Call(opts, &out, "MAX_PAYLOAD_SIZE") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXPAYLOADSIZE is a free data retrieval call binding the contract method 0xa2ba1934. +// +// Solidity: function MAX_PAYLOAD_SIZE() view returns(uint256) +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestSession) MAXPAYLOADSIZE() (*big.Int, error) { + return _GatewayEVMUpgradeTest.Contract.MAXPAYLOADSIZE(&_GatewayEVMUpgradeTest.CallOpts) +} + +// MAXPAYLOADSIZE is a free data retrieval call binding the contract method 0xa2ba1934. +// +// Solidity: function MAX_PAYLOAD_SIZE() view returns(uint256) +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestCallerSession) MAXPAYLOADSIZE() (*big.Int, error) { + return _GatewayEVMUpgradeTest.Contract.MAXPAYLOADSIZE(&_GatewayEVMUpgradeTest.CallOpts) +} + // PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. // // Solidity: function PAUSER_ROLE() view returns(bytes32) @@ -778,23 +809,23 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) Execute(de return _GatewayEVMUpgradeTest.Contract.Execute(&_GatewayEVMUpgradeTest.TransactOpts, destination, data) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x14fd2d48. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint256,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactor) ExecuteRevert(opts *bind.TransactOpts, destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMUpgradeTest.contract.Transact(opts, "executeRevert", destination, data, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x14fd2d48. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint256,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMUpgradeTest.Contract.ExecuteRevert(&_GatewayEVMUpgradeTest.TransactOpts, destination, data, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x14fd2d48. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint256,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMUpgradeTest.Contract.ExecuteRevert(&_GatewayEVMUpgradeTest.TransactOpts, destination, data, revertContext) } @@ -904,23 +935,23 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) RenounceRo return _GatewayEVMUpgradeTest.Contract.RenounceRole(&_GatewayEVMUpgradeTest.TransactOpts, role, callerConfirmation) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xece697b3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactor) RevertWithERC20(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMUpgradeTest.contract.Transact(opts, "revertWithERC20", token, to, amount, data, revertContext) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xece697b3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMUpgradeTest.Contract.RevertWithERC20(&_GatewayEVMUpgradeTest.TransactOpts, token, to, amount, data, revertContext) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xece697b3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMUpgradeTest.Contract.RevertWithERC20(&_GatewayEVMUpgradeTest.TransactOpts, token, to, amount, data, revertContext) } @@ -1009,6 +1040,27 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) Unpause() return _GatewayEVMUpgradeTest.Contract.Unpause(&_GatewayEVMUpgradeTest.TransactOpts) } +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactor) UpdateTSSAddress(opts *bind.TransactOpts, newTSSAddress common.Address) (*types.Transaction, error) { + return _GatewayEVMUpgradeTest.contract.Transact(opts, "updateTSSAddress", newTSSAddress) +} + +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestSession) UpdateTSSAddress(newTSSAddress common.Address) (*types.Transaction, error) { + return _GatewayEVMUpgradeTest.Contract.UpdateTSSAddress(&_GatewayEVMUpgradeTest.TransactOpts, newTSSAddress) +} + +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) UpdateTSSAddress(newTSSAddress common.Address) (*types.Transaction, error) { + return _GatewayEVMUpgradeTest.Contract.UpdateTSSAddress(&_GatewayEVMUpgradeTest.TransactOpts, newTSSAddress) +} + // UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. // // Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() @@ -2134,9 +2186,9 @@ type GatewayEVMUpgradeTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMUpgradeTestRevertedIterator, error) { var toRule []interface{} @@ -2155,9 +2207,9 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) FilterReverted(opts return &GatewayEVMUpgradeTestRevertedIterator{contract: _GatewayEVMUpgradeTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMUpgradeTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2201,9 +2253,9 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) WatchReverted(opts }), nil } -// ParseReverted is a log parse operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) ParseReverted(log types.Log) (*GatewayEVMUpgradeTestReverted, error) { event := new(GatewayEVMUpgradeTestReverted) if err := _GatewayEVMUpgradeTest.contract.UnpackLog(event, "Reverted", log); err != nil { @@ -2902,13 +2954,14 @@ func (it *GatewayEVMUpgradeTestUpdatedGatewayTSSAddressIterator) Close() error { // GatewayEVMUpgradeTestUpdatedGatewayTSSAddress represents a UpdatedGatewayTSSAddress event raised by the GatewayEVMUpgradeTest contract. type GatewayEVMUpgradeTestUpdatedGatewayTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) FilterUpdatedGatewayTSSAddress(opts *bind.FilterOpts) (*GatewayEVMUpgradeTestUpdatedGatewayTSSAddressIterator, error) { logs, sub, err := _GatewayEVMUpgradeTest.contract.FilterLogs(opts, "UpdatedGatewayTSSAddress") @@ -2918,9 +2971,9 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) FilterUpdatedGatewa return &GatewayEVMUpgradeTestUpdatedGatewayTSSAddressIterator{contract: _GatewayEVMUpgradeTest.contract, event: "UpdatedGatewayTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) WatchUpdatedGatewayTSSAddress(opts *bind.WatchOpts, sink chan<- *GatewayEVMUpgradeTestUpdatedGatewayTSSAddress) (event.Subscription, error) { logs, sub, err := _GatewayEVMUpgradeTest.contract.WatchLogs(opts, "UpdatedGatewayTSSAddress") @@ -2955,9 +3008,9 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) WatchUpdatedGateway }), nil } -// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) ParseUpdatedGatewayTSSAddress(log types.Log) (*GatewayEVMUpgradeTestUpdatedGatewayTSSAddress, error) { event := new(GatewayEVMUpgradeTestUpdatedGatewayTSSAddress) if err := _GatewayEVMUpgradeTest.contract.UnpackLog(event, "UpdatedGatewayTSSAddress", log); err != nil { diff --git a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go index 492155856..a01f91d3d 100644 --- a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go +++ b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -65,8 +65,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMZEVMTestMetaData contains all meta data concerning the GatewayEVMZEVMTest contract. var GatewayEVMZEVMTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5062011f09806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261126e565b60405161013f9190617af4565b60405180910390f35b6101506112d0565b60405161013f9190617b90565b610132611412565b610132611472565b6101286114d2565b61017d611d41565b60405161013f9190617cf6565b610128611ec3565b61019a6126e6565b60405161013f9190617d94565b6101af6127b6565b60405161013f9190617e0b565b6101286128b1565b6101af612ea5565b61019a612fa0565b6101dc613070565b604051901515815260200161013f565b610128613144565b610132613868565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e8054909116614321179055604051610267906179d9565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610331906179d9565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526138c8565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602854602654604051929391821692911690610532906179e7565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c9906179f5565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617ea2565b506040516109e990617a03565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526138c8565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617a11565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c4990617a1f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb90617a2d565b610cea96959493929190617ec4565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617ea2565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617ea2565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617ea2565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b50506040805160a08101825261032180825260016020808401918252838501928352845190810190945260008085526060840185905260808401528251602f80549251151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0392831617929092178255915160308054919093167fffffffffffffffffffffffff00000000000000000000000000000000000000009190911617909155909350915060319061125d9082618084565b506080820151816003015590505050565b606060168054806020026020016040519081016040528092919081815260200182805480156112c657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112a8575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561140957600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156113f257838290600052602060002001805461136590617fe8565b80601f016020809104026020016040519081016040528092919081815260200182805461139190617fe8565b80156113de5780601f106113b3576101008083540402835291602001916113de565b820191906000526020600020905b8154815290600101906020018083116113c157829003601f168201915b505050505081526020019060010190611346565b5050505081525050815260200190600101906112f4565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156112c6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112a8575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156112c6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112a8575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561157e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a29190618143565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906115df9088908890889060240161815c565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611678926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546116af926207a120916001600160a01b0316908690600190602f90602401618275565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f048ae42c00000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161176c916001600160a01b03919091169060009086906004016182de565b600060405180830381600087803b15801561178657600080fd5b505af115801561179a573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561181057600080fd5b505af1158015611824573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526118be926207a120916001600160a01b0316908d908d908d90600401618306565b600060405180830381600087803b1580156118d857600080fd5b505af11580156118ec573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561196957600080fd5b505af115801561197d573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a0f57600080fd5b505af1158015611a23573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa9350611a6c92506001600160a01b039091169087908b908b908b9061835b565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611b5b908790869061839c565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611bd557600080fd5b505af1158015611be9573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611c3d92169087906004016183b5565b60006040518083038185885af1158015611c5b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c849190810190618490565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d139190618143565b9050611d37816001611d286207a120886184f4565b611d3291906184f4565b6138e7565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114095783829060005260206000209060020201604051806040016040529081600082018054611d9890617fe8565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc490617fe8565b8015611e115780601f10611de657610100808354040283529160200191611e11565b820191906000526020600020905b815481529060010190602001808311611df457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611eab57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611e585790505b50505050508152505081526020019060010190611d65565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611f3f9087908790879060240161815c565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039093166084820152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561203157600080fd5b505af1158015612045573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216916207a1209188918491634d8943bb916004808201926020929091908290030181865afa15801561211a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213e9190618143565b896001602f604051612157989796959493929190618507565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156121d157600080fd5b505af11580156121e5573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063048ae42c915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352612281926207a120916001600160a01b0316908890600190602f90600401618569565b600060405180830381600087803b15801561229b57600080fd5b505af11580156122af573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561231b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233f9190618143565b905061235281611d32846207a1206184f4565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156123cb57600080fd5b505af11580156123df573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561247157600080fd5b505af1158015612485573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506124ce92506001600160a01b039091169087908b908b908b9061835b565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561256457600080fd5b505af1158015612578573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506125bd908790879061839c565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561263757600080fd5b505af115801561264b573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350889261269f92169088906004016183b5565b60006040518083038185885af11580156126bd573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611d379190810190618490565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561140957838290600052602060002001805461272990617fe8565b80601f016020809104026020016040519081016040528092919081815260200182805461275590617fe8565b80156127a25780601f10612777576101008083540402835291602001916127a2565b820191906000526020600020905b81548152906001019060200180831161278557829003601f168201915b50505050508152602001906001019061270a565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114095760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561289957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116128465790505b505050505081525050815260200190600101906127da565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061292d9087908790879060240161815c565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a0057600080fd5b505af1158015612a14573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612aa657600080fd5b505af1158015612aba573d6000803e3d6000fd5b5050602d54602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf9060340160408051601f1981840301815290829052612b3a918690600190602f906185bd565b60405180910390a3602a546025546040805160609290921b6bffffffffffffffffffffffff19166020830152805180830360140181526034830191829052602d547f1cb5ea75000000000000000000000000000000000000000000000000000000009092526001600160a01b0393841693631cb5ea7593612bca9391909116908690600190602f906038016185fc565b600060405180830381600087803b158015612be457600080fd5b505af1158015612bf8573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612c7557600080fd5b505af1158015612c89573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612d1b57600080fd5b505af1158015612d2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612d74908590859061839c565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612dee57600080fd5b505af1158015612e02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508692612e5692169086906004016183b5565b60006040518083038185885af1158015612e74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612e9d9190810190618490565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114095760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612f8857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f355790505b50505050508152505081526020019060010190612ec9565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611409578382906000526020600020018054612fe390617fe8565b80601f016020809104026020016040519081016040528092919081815260200182805461300f90617fe8565b801561305c5780601f106130315761010080835404028352916020019161305c565b820191906000526020600020905b81548152906001019060200180831161303f57829003601f168201915b505050505081526020019060010190612fc4565b60085460009060ff1615613088575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313d9190618143565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f9700000000000000000000000000000000000000000000000000000000906131c09087908790879060240161815c565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092613259926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d5461328d926001600160a01b03909116908590600190602f90602401618656565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1cb5ea7500000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161334a916001600160a01b03919091169060009086906004016182de565b600060405180830381600087803b15801561336457600080fd5b505af1158015613378573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156133ee57600080fd5b505af1158015613402573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637a34d8bb915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352613499926001600160a01b03909116908b908b908b906004016186a7565b600060405180830381600087803b1580156134b357600080fd5b505af11580156134c7573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561354457600080fd5b505af1158015613558573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156135ea57600080fd5b505af11580156135fe573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061364792506001600160a01b039091169086908a908a908a9061835b565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156136dd57600080fd5b505af11580156136f1573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150613736908690869061839c565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156137b057600080fd5b505af11580156137c4573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350879261381892169087906004016183b5565b60006040518083038185885af1158015613836573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261385f9190810190618490565b50505050505050565b606060158054806020026020016040519081016040528092919081815260200182805480156112c6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112a8575050505050905090565b60006138d2617a3b565b6138dd848483613966565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561395257600080fd5b505afa158015612e9d573d6000803e3d6000fd5b60008061397385846139e1565b90506139d66040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016139c19291906183b5565b604051602081830303815290604052856139ed565b9150505b9392505050565b60006139da8383613a1b565b60c08101515160009015613a1157613a0a84848460c00151613a36565b90506139da565b613a0a8484613bdc565b6000613a278383613cc7565b6139da838360200151846139ed565b600080613a41613cd7565b90506000613a4f8683613daa565b90506000613a668260600151836020015185614250565b90506000613a7683838989614462565b90506000613a83826152df565b602081015181519192509060030b15613af657898260400151604051602001613aad9291906186f5565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613aed91600401618776565b60405180910390fd5b6000613b396040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016154ae565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613b8c908490600401618776565b602060405180830381865afa158015613ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bcd9190618789565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613c31908790600401618776565b600060405180830381865afa158015613c4e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c769190810190618490565b90506000613ca48285604051602001613c909291906187b2565b6040516020818303038152906040526156ae565b90506001600160a01b0381166138dd578484604051602001613aad9291906187e1565b613cd3828260006156c1565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613d5e90849060040161888c565b600060405180830381865afa158015613d7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613da391908101906188d3565b9250505090565b613ddc6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613e276040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613e30856157c4565b60208201526000613e4086615ba9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613e82573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613eaa91908101906188d3565b86838560200151604051602001613ec4949392919061891c565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613f1c908590600401618776565b600060405180830381865afa158015613f39573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f6191908101906188d3565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613fa9908490600401618a20565b602060405180830381865afa158015613fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fea9190617ea2565b613fff5781604051602001613aad9190618a72565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614044908490600401618b04565b600060405180830381865afa158015614061573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261408991908101906188d3565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906140d0908490600401618b56565b602060405180830381865afa1580156140ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141119190617ea2565b156141a6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061415b908490600401618b56565b600060405180830381865afa158015614178573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141a091908101906188d3565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016141cb9190618ba8565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016141f7929190618c14565b600060405180830381865afa158015614214573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261423c91908101906188d3565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161426c5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106142cc576142cc618c39565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061432057614320618c39565b60200260200101819052508460405160200161433c9190618c68565b6040516020818303038152906040528160028151811061435e5761435e618c39565b60200260200101819052508260405160200161437a9190618cd4565b6040516020818303038152906040528160038151811061439c5761439c618c39565b602002602001018190525060006143b2826152df565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144439060408051808201825260008082526020918201528151808301909252845182528085019082015290615e2c565b6144585785604051602001613aad9190618d15565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156144b2565b511590565b6146265782602001511561456e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613aed565b8260c0015115614626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613aed565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161463f57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061469a90618da6565b935060ff16815181106146af576146af618c39565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016147009190618dc5565b60405160208183030381529060405282828061471b90618da6565b935060ff168151811061473057614730618c39565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061477d90618da6565b935060ff168151811061479257614792618c39565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806147df90618da6565b935060ff16815181106147f4576147f4618c39565b6020026020010181905250876020015182828061481090618da6565b935060ff168151811061482557614825618c39565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061487290618da6565b935060ff168151811061488757614887618c39565b60209081029190910101528751828261489f81618da6565b935060ff16815181106148b4576148b4618c39565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061490190618da6565b935060ff168151811061491657614916618c39565b602002602001018190525061492a46615e8d565b828261493581618da6565b935060ff168151811061494a5761494a618c39565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061499790618da6565b935060ff16815181106149ac576149ac618c39565b6020026020010181905250868282806149c490618da6565b935060ff16815181106149d9576149d9618c39565b6020908102919091010152855115614b005760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614a2a81618da6565b935060ff1681518110614a3f57614a3f618c39565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614a8f908990600401618776565b600060405180830381865afa158015614aac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ad491908101906188d3565b8282614adf81618da6565b935060ff1681518110614af457614af4618c39565b60200260200101819052505b846020015115614bd05760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614b4981618da6565b935060ff1681518110614b5e57614b5e618c39565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614bab90618da6565b935060ff1681518110614bc057614bc0618c39565b6020026020010181905250614d97565b614c086144ad8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614c9b5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614c4b81618da6565b935060ff1681518110614c6057614c60618c39565b60200260200101819052508460a00151604051602001614c809190618c68565b604051602081830303815290604052828280614bab90618da6565b8460c00151158015614cde575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614cdc90511590565b155b15614d975760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614d2281618da6565b935060ff1681518110614d3757614d37618c39565b6020026020010181905250614d4b88615f2d565b604051602001614d5b9190618c68565b604051602081830303815290604052828280614d7690618da6565b935060ff1681518110614d8b57614d8b618c39565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614dcb90511590565b614e605760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614e0e81618da6565b935060ff1681518110614e2357614e23618c39565b60200260200101819052508460400151828280614e3f90618da6565b935060ff1681518110614e5457614e54618c39565b60200260200101819052505b606085015115614f815760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614ea981618da6565b935060ff1681518110614ebe57614ebe618c39565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614f2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f5591908101906188d3565b8282614f6081618da6565b935060ff1681518110614f7557614f75618c39565b60200260200101819052505b60e085015151156150285760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614fcb81618da6565b935060ff1681518110614fe057614fe0618c39565b6020026020010181905250614ffc8560e0015160000151615e8d565b828261500781618da6565b935060ff168151811061501c5761501c618c39565b60200260200101819052505b60e085015160200151156150d25760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261507581618da6565b935060ff168151811061508a5761508a618c39565b60200260200101819052506150a68560e0015160200151615e8d565b82826150b181618da6565b935060ff16815181106150c6576150c6618c39565b60200260200101819052505b60e0850151604001511561517c5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261511f81618da6565b935060ff168151811061513457615134618c39565b60200260200101819052506151508560e0015160400151615e8d565b828261515b81618da6565b935060ff168151811061517057615170618c39565b60200260200101819052505b60e085015160600151156152265760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826151c981618da6565b935060ff16815181106151de576151de618c39565b60200260200101819052506151fa8560e0015160600151615e8d565b828261520581618da6565b935060ff168151811061521a5761521a618c39565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561524457615244617fb9565b60405190808252806020026020018201604052801561527757816020015b60608152602001906001900390816152625790505b50905060005b8260ff168160ff1610156152d057838160ff16815181106152a0576152a0618c39565b6020026020010151828260ff16815181106152bd576152bd618c39565b602090810291909101015260010161527d565b5093505050505b949350505050565b6153066040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161538c91869101618e30565b600060405180830381865afa1580156153a9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153d191908101906188d3565b905060006153df8683616a1c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161540f9190617d94565b6000604051808303816000875af115801561542e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154569190810190618e77565b805190915060030b1580159061546f5750602081015151155b801561547e5750604081015151155b15614458578160008151811061549657615496618c39565b6020026020010151604051602001613aad9190618f2d565b606060006154e38560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061551a9082905b90616b71565b15615677576000615597826155918461558b61555d8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616b98565b90616bfa565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506155fb908290616b71565b1561566557604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615662905b8290616c7f565b90505b61566e81616ca5565b925050506139da565b8215615690578484604051602001613aad929190619119565b50506040805160208101909152600081526139da565b509392505050565b6000808251602084016000f09392505050565b8160a00151156156d057505050565b60006156dd848484616d0e565b905060006156ea826152df565b602081015181519192509060030b1580156157865750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261578690604080518082018252600080825260209182015281518083019092528451825280850190820152615514565b1561579357505050505050565b604082015151156157b3578160400151604051602001613aad91906191c0565b80604051602001613aad919061921e565b606060006157f98360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061585e905b8290615e2c565b156158cd57604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526139da906158c89083906172a9565b616ca5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261592f905b8290617333565b6001036159fc57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159959061565b565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526139da906158c8905b8390616c7f565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a5b90615857565b15615b9257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615ac39083906173cd565b905060008160018351615ad691906184f4565b81518110615ae657615ae6618c39565b60200260200101519050615b896158c8615b5c6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906172a9565b95945050505050565b82604051602001613aad9190619289565b50919050565b60606000615bde8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615c4090615857565b15615c4e576139da81616ca5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cad90615928565b600103615d1757604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526139da906158c8906159f5565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d7690615857565b15615b9257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615dde9083906173cd565b9050600181511115615e1a578060028251615df991906184f4565b81518110615e0957615e09618c39565b602002602001015192505050919050565b5082604051602001613aad9190619289565b805182516000911115615e41575060006138e1565b81518351602085015160009291615e5791619367565b615e6191906184f4565b905082602001518103615e785760019150506138e1565b82516020840151819020912014905092915050565b60606000615e9a83617472565b600101905060008167ffffffffffffffff811115615eba57615eba617fb9565b6040519080825280601f01601f191660200182016040528015615ee4576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615eee57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615fb9905b8290617554565b15615ff957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261605890615fb2565b1561609857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160f790615fb2565b1561613757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261619690615fb2565b806161fb5750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161fb90615fb2565b1561623b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261629a90615fb2565b806162ff5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162ff90615fb2565b1561633f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261639e90615fb2565b806164035750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261640390615fb2565b1561644357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164a290615fb2565b806165075750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261650790615fb2565b1561654757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165a690615fb2565b156165e657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261664590615fb2565b1561668557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166e490615fb2565b1561672457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261678390615fb2565b156167c357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261682290615fb2565b1561686257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168c190615fb2565b806169265750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261692690615fb2565b1561696657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169c590615fb2565b15616a0557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613aad929060200161937a565b60608060005b8451811015616aa75781858281518110616a3e57616a3e618c39565b6020026020010151604051602001616a579291906187b2565b604051602081830303815290604052915060018551616a7691906184f4565b8114616a9f5781604051602001616a8d91906194e3565b60405160208183030381529060405291505b600101616a22565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616ac05790505090508381600081518110616aeb57616aeb618c39565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616b3f57616b3f618c39565b60200260200101819052508181600281518110616b5e57616b5e618c39565b6020908102919091010152949350505050565b6020808301518351835192840151600093616b8f9291849190617568565b14159392505050565b60408051808201909152600080825260208201526000616bca8460000151856020015185600001518660200151617679565b9050836020015181616bdc91906184f4565b84518590616beb9083906184f4565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616c1f5750816138e1565b6020808301519084015160019114616c465750815160208481015190840151829020919020145b8015616c7757825184518590616c5d9083906184f4565b9052508251602085018051616c73908390619367565b9052505b509192915050565b6040805180820190915260008082526020820152616c9e838383617799565b5092915050565b60606000826000015167ffffffffffffffff811115616cc657616cc6617fb9565b6040519080825280601f01601f191660200182016040528015616cf0576020820181803683370190505b5090506000602082019050616c9e8185602001518660000151617844565b60606000616d1a613cd7565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616d3757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616d9290618da6565b935060ff1681518110616da757616da7618c39565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616df89190619524565b604051602081830303815290604052828280616e1390618da6565b935060ff1681518110616e2857616e28618c39565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616e7590618da6565b935060ff1681518110616e8a57616e8a618c39565b602002602001018190525082604051602001616ea69190618cd4565b604051602081830303815290604052828280616ec190618da6565b935060ff1681518110616ed657616ed6618c39565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616f2390618da6565b935060ff1681518110616f3857616f38618c39565b6020026020010181905250616f4d87846178be565b8282616f5881618da6565b935060ff1681518110616f6d57616f6d618c39565b6020908102919091010152855151156170195760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616fbf81618da6565b935060ff1681518110616fd457616fd4618c39565b6020026020010181905250616fed8660000151846178be565b8282616ff881618da6565b935060ff168151811061700d5761700d618c39565b60200260200101819052505b8560800151156170875760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261706281618da6565b935060ff168151811061707757617077618c39565b60200260200101819052506170ed565b84156170ed5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826170cc81618da6565b935060ff16815181106170e1576170e1618c39565b60200260200101819052505b604086015151156171895760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261713781618da6565b935060ff168151811061714c5761714c618c39565b6020026020010181905250856040015182828061716890618da6565b935060ff168151811061717d5761717d618c39565b60200260200101819052505b8560600151156171f35760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826171d281618da6565b935060ff16815181106171e7576171e7618c39565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561721157617211617fb9565b60405190808252806020026020018201604052801561724457816020015b606081526020019060019003908161722f5790505b50905060005b8260ff168160ff16101561729d57838160ff168151811061726d5761726d618c39565b6020026020010151828260ff168151811061728a5761728a618c39565b602090810291909101015260010161724a565b50979650505050505050565b60408051808201909152600080825260208201528151835110156172ce5750816138e1565b815183516020850151600092916172e491619367565b6172ee91906184f4565b6020840151909150600190821461730f575082516020840151819020908220145b801561732a578351855186906173269083906184f4565b9052505b50929392505050565b60008082600001516173578560000151866020015186600001518760200151617679565b6173619190619367565b90505b835160208501516173759190619367565b8111616c9e578161738581619569565b92505082600001516173bc8560200151836173a091906184f4565b86516173ac91906184f4565b8386600001518760200151617679565b6173c69190619367565b9050617364565b606060006173db8484617333565b6173e6906001619367565b67ffffffffffffffff8111156173fe576173fe617fb9565b60405190808252806020026020018201604052801561743157816020015b606081526020019060019003908161741c5790505b50905060005b81518110156156a65761744d6158c88686616c7f565b82828151811061745f5761745f618c39565b6020908102919091010152600101617437565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106174bb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106174e7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061750557662386f26fc10000830492506010015b6305f5e100831061751d576305f5e100830492506008015b612710831061753157612710830492506004015b60648310617543576064830492506002015b600a83106138e15760010192915050565b600061756083836178fe565b159392505050565b60008085841161766f576020841161761b57600084156175b357600161758f8660206184f4565b61759a906008619583565b6175a5906002619681565b6175af91906184f4565b1990505b83518116856175c28989619367565b6175cc91906184f4565b805190935082165b818114617606578784116175ee57879450505050506152d7565b836175f88161968d565b9450508284511690506175d4565b6176108785619367565b9450505050506152d7565b83832061762885886184f4565b6176329087619367565b91505b85821061766d5784822080820361765a576176508684619367565b93505050506152d7565b6176656001846184f4565b925050617635565b505b5092949350505050565b60008381868511617784576020851161773357600085156176c55760016176a18760206184f4565b6176ac906008619583565b6176b7906002619681565b6176c191906184f4565b1990505b845181166000876176d68b8b619367565b6176e091906184f4565b855190915083165b8281146177255781861061770d576177008b8b619367565b96505050505050506152d7565b8561771781619569565b9650508386511690506176e8565b8596505050505050506152d7565b508383206000905b61774586896184f4565b82116177825785832080820361776157839450505050506152d7565b61776c600185619367565b935050818061777a90619569565b92505061773b565b505b61778e8787619367565b979650505050505050565b604080518082019091526000808252602082015260006177cb8560000151866020015186600001518760200151617679565b6020808701805191860191909152519091506177e790826184f4565b8352845160208601516177fa9190619367565b8103617809576000855261783b565b835183516178179190619367565b855186906178269083906184f4565b90525083516178359082619367565b60208601525b50909392505050565b6020811061787c578151835261785b602084619367565b9250617868602083619367565b91506178756020826184f4565b9050617844565b60001981156178ab5760016178928360206184f4565b61789e90610100619681565b6178a891906184f4565b90505b9151835183169219169190911790915250565b606060006178cc8484613daa565b80516020808301516040519394506178e6939091016196a4565b60405160208183030381529060405291505092915050565b8151815160009190811115617911575081515b6020808501519084015160005b838110156179ca578251825180821461799a5760001960208710156179795760018461794b8960206184f4565b6179559190619367565b617960906008619583565b61796b906002619681565b61797591906184f4565b1990505b81811683821681810391146179975797506138e19650505050505050565b50505b6179a5602086619367565b94506179b2602085619367565b935050506020816179c39190619367565b905061791e565b508451865161445891906196fc565b610c9f806200971d83390190565b611de7806200a3bc83390190565b611993806200c1a383390190565b610dc1806200db3683390190565b610a2c806200e8f783390190565b610b3f806200f32383390190565b612072806200fe6283390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617a7e617a83565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617a7e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617b355783516001600160a01b0316835260209384019390920191600101617b0e565b509095945050505050565b60005b83811015617b5b578181015183820152602001617b43565b50506000910152565b60008151808452617b7c816020860160208601617b40565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c8c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617c72577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617c5c848651617b64565b6020958601959094509290920191600101617c22565b509197505050602094850194929092019150600101617bb8565b50929695505050505050565b600081518084526020840193506020830160005b82811015617cec5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617cac565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c8c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617d626040880182617b64565b9050602082015191508681036020880152617d7d8183617c98565b965050506020938401939190910190600101617d1e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c8c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617df6858351617b64565b94506020938401939190910190600101617dbc565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c8c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617e8c6040870182617c98565b9550506020938401939190910190600101617e33565b600060208284031215617eb457600080fd5b815180151581146139da57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617f7e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617f9f60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c90821680617ffc57607f821691505b602082108103615ba3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561807f57806000526020600020601f840160051c8101602085101561805c5750805b601f840160051c820191505b8181101561807c5760008155600101618068565b50505b505050565b815167ffffffffffffffff81111561809e5761809e617fb9565b6180b2816180ac8454617fe8565b84618035565b6020601f8211600181146180e657600083156180ce5750848201515b600019600385901b1c1916600184901b17845561807c565b600084815260208120601f198516915b8281101561811657878501518255602094850194600190920191016180f6565b50848210156181345786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561815557600080fd5b5051919050565b60608152600061816f6060830186617b64565b602083019490945250901515604090910152919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a06060850152600081546181d081617fe8565b8060a088015260018216600081146181ef57600181146182295761825d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b890101935061825d565b84600052602060002060005b838110156182545781548a820160c00152600190910190602001618235565b890160c0019450505b50505060038401546080860152809250505092915050565b60c08152600061828860c0830189617b64565b62ffffff881660208401526001600160a01b038716604084015282810360608401526182b48187617b64565b905060ff8516608084015282810360a08401526182d18185618186565b9998505050505050505050565b6001600160a01b0384168152826020820152606060408201526000615b896060830184617b64565b60c08152600061831960c0830189617b64565b8760208401526001600160a01b038716604084015282810360608401526183408187617b64565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a06040820152600061838360a0830186617b64565b6060830194909452509015156080909101529392505050565b8281526040602082015260006152d76040830184617b64565b6001600160a01b03831681526040602082015260006152d76040830184617b64565b6040516060810167ffffffffffffffff811182821017156183fa576183fa617fb9565b60405290565b60008067ffffffffffffffff84111561841b5761841b617fb9565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561844a5761844a617fb9565b60405283815290508082840185101561846257600080fd5b6156a6846020830185617b40565b600082601f83011261848157600080fd5b6139da83835160208501618400565b6000602082840312156184a257600080fd5b815167ffffffffffffffff8111156184b957600080fd5b6138dd84828501618470565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156138e1576138e16184c5565b6101008152600061851c61010083018b617b64565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a084015261854f8187617b64565b90508460c084015282810360e0840152613bcd8185618186565b60c08152600061857c60c0830189617b64565b8760208401526001600160a01b038716604084015282810360608401526185a38187617b64565b905084608084015282810360a08401526182d18185618186565b6080815260006185d06080830187617b64565b82810360208401526185e28187617b64565b9050846040840152828103606084015261778e8185618186565b60a08152600061860f60a0830188617b64565b6001600160a01b038716602084015282810360408401526186308187617b64565b9050846060840152828103608084015261864a8185618186565b98975050505050505050565b60a08152600061866960a0830188617b64565b6001600160a01b0387166020840152828103604084015261868a8187617b64565b905060ff85166060840152828103608084015261864a8185618186565b60a0815260006186ba60a0830188617b64565b6001600160a01b038716602084015282810360408401526186db8187617b64565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161872d81601a850160208801617b40565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161876a81601c840160208801617b40565b01601c01949350505050565b6020815260006139da6020830184617b64565b60006020828403121561879b57600080fd5b81516001600160a01b03811681146139da57600080fd5b600083516187c4818460208801617b40565b8351908301906187d8818360208801617b40565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161881981601a850160208801617b40565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618856816033840160208801617b40565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006139da6080830184617b64565b6000602082840312156188e557600080fd5b815167ffffffffffffffff8111156188fc57600080fd5b8201601f8101841361890d57600080fd5b6138dd84825160208401618400565b6000855161892e818460208a01617b40565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618968816001840160208a01617b40565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516189a6816002840160208901617b40565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516189e8816002840160208801617b40565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618a336040830184617b64565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618aaa81601f850160208701617b40565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618b176040830184617b64565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618b696040830184617b64565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618be0816014850160208701617b40565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618c276040830185617b64565b82810360208401526139d68185617b64565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618ca0816001850160208701617b40565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618ce6818460208701617b40565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618d9981604b850160208701617b40565b91909101604b0192915050565b600060ff821660ff8103618dbc57618dbc6184c5565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618e23816029850160208701617b40565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006139da6080830184617b64565b600060208284031215618e8957600080fd5b815167ffffffffffffffff811115618ea057600080fd5b820160608185031215618eb257600080fd5b618eba6183d7565b81518060030b8114618ecb57600080fd5b8152602082015167ffffffffffffffff811115618ee757600080fd5b618ef386828501618470565b602083015250604082015167ffffffffffffffff811115618f1357600080fd5b618f1f86828501618470565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618f8b816021850160208701617b40565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619177816021850160208801617b40565b7f2720696e206f75747075743a200000000000000000000000000000000000000060219184019182015283516191b481602e840160208801617b40565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618e23816029850160208701617b40565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161927c816022850160208701617b40565b9190910160220192915050565b7f436f6e7472616374206e616d65200000000000000000000000000000000000008152600082516192c181600e850160208701617b40565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b808201808211156138e1576138e16184c5565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516193b2816018850160208801617b40565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516193ef81601c840160208801617b40565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516194f5818460208701617b40565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161955c81601c850160208701617b40565b91909101601c0192915050565b6000600019820361957c5761957c6184c5565b5060010190565b80820281158282048414176138e1576138e16184c5565b6001815b60018411156195d5578085048111156195b9576195b96184c5565b60018416156195c757908102905b60019390931c92800261959e565b935093915050565b6000826195ec575060016138e1565b816195f9575060006138e1565b816001811461960f576002811461961957619635565b60019150506138e1565b60ff84111561962a5761962a6184c5565b50506001821b6138e1565b5060208310610133831016604e8410600b8410161715619658575081810a6138e1565b619665600019848461959a565b8060001904821115619679576196796184c5565b029392505050565b60006139da83836195dd565b60008161969c5761969c6184c5565b506000190190565b600083516196b6818460208801617b40565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516196f0816001840160208801617b40565b01600101949350505050565b8181036000831280158383131683831282161715616c9e57616c9e6184c556fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611de7380380611de783398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611dc78339815191528261014c565b50610143600080516020611dc78339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611b50610277600039600081816101d501528181610574015281816105c9015281816107e6015261083b0152611b506000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638456cb59116100ee578063a217fddf11610097578063d9caed1211610071578063d9caed12146103e0578063e609055e146103f3578063e63ab1e914610406578063eab103df1461042d57600080fd5b8063a217fddf146103a2578063d547741f146103aa578063d936547e146103bd57600080fd5b8063950837aa116100c8578063950837aa146103695780639a5904271461037c5780639b19251a1461038f57600080fd5b80638456cb591461030157806385f438c11461030957806391d148541461033057600080fd5b806336568abe116101505780635b1125911161012a5780635b112591146102d05780635c975abb146102e35780637ab697e7146102ee57600080fd5b806336568abe1461028e5780633f4ba83a146102a1578063570618e1146102a957600080fd5b8063248a9ca311610181578063248a9ca314610224578063252f07bf146102565780632f2ff15d1461027b57600080fd5b806301ffc9a7146101a8578063116191b6146101d057806321fc65f21461020f575b600080fd5b6101bb6101b636600461155e565b610440565b60405190151581526020015b60405180910390f35b6101f77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c7565b61022261021d3660046115fe565b6104d9565b005b610248610232366004611671565b6000908152600160208190526040909120015490565b6040519081526020016101c7565b6004546101bb9074010000000000000000000000000000000000000000900460ff1681565b61022261028936600461168a565b610699565b61022261029c36600461168a565b6106c5565b610222610716565b6102487f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101f7906001600160a01b031681565b60025460ff166101bb565b6102226102fc3660046116ba565b61074b565b610222610910565b6102487f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101bb61033e36600461168a565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61022261037736600461175d565b610942565b61022261038a36600461175d565b610ac0565b61022261039d36600461175d565b610b74565b610248600081565b6102226103b836600461168a565b610c2b565b6101bb6103cb36600461175d565b60036020526000908152604090205460ff1681565b6102226103ee36600461177a565b610c51565b6102226104013660046117bb565b610d49565b6102487f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61022261043b36600461185a565b610f75565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104e1610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461050b8161100e565b610513611018565b6001600160a01b03851660009081526003602052604090205460ff16610565576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105996001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086611057565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106069088908a908990899089906004016118c0565b600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161067f93929190611903565b60405180910390a3506106926001600055565b5050505050565b600082815260016020819052604090912001546106b58161100e565b6106bf83836110cb565b50505050565b6001600160a01b0381163314610707576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610711828261115e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107408161100e565b6107486111e5565b50565b610753610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461077d8161100e565b610785611018565b6001600160a01b03861660009081526003602052604090205460ff166107d7576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61080b6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087611057565b6040517fece697b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ece697b39061087a9089908b908a908a908a908a906004016119bf565b600060405180830381600087803b15801561089457600080fd5b505af11580156108a8573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640878787876040516108f59493929190611a16565b60405180910390a3506109086001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61093a8161100e565b610748611237565b600061094d8161100e565b6001600160a01b03821661098d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546109c4907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661115e565b506004546109fc907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661115e565b50610a277f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836110cb565b50610a527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a836110cb565b50600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527f086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba9060200160405180910390a15050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610aea8161100e565b6001600160a01b038216610b2a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610b9e8161100e565b6001600160a01b038216610bde576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610c478161100e565b6106bf838361115e565b610c59610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610c838161100e565b610c8b611018565b6001600160a01b03831660009081526003602052604090205460ff16610cdd576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf16001600160a01b0384168584611057565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610d3691815260200190565b60405180910390a3506107116001600055565b610d51610fcb565b610d59611018565b60045474010000000000000000000000000000000000000000900460ff16610dad576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610dff576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a42565b9050610e9a6001600160a01b038616333087611274565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f459190611a42565b610f4f9190611a5b565b8787604051610f62959493929190611a95565b60405180910390a2506109086001600055565b6000610f808161100e565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403611007576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61074881336112ad565b60025460ff1615611055576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611324565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166111565760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104d3565b5060006104d3565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16156111565760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104d3565b6111ed6113a0565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61123f611018565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861121a3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106bf9186918216906323b872dd90608401611084565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611320576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b60006113396001600160a01b038416836113dc565b9050805160001415801561135e57508080602001905181019061135c9190611ace565b155b15610711576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611317565b60025460ff16611055576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606113ea838360006113f1565b9392505050565b60608147101561142f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611317565b600080856001600160a01b0316848660405161144b9190611aeb565b60006040518083038185875af1925050503d8060008114611488576040519150601f19603f3d011682016040523d82523d6000602084013e61148d565b606091505b509150915061149d8683836114a7565b9695505050505050565b6060826114bc576114b78261151c565b6113ea565b81511580156114d357506001600160a01b0384163b155b15611515576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611317565b50806113ea565b80511561152c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561157057600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113ea57600080fd5b6001600160a01b038116811461074857600080fd5b60008083601f8401126115c757600080fd5b50813567ffffffffffffffff8111156115df57600080fd5b6020830191508360208285010111156115f757600080fd5b9250929050565b60008060008060006080868803121561161657600080fd5b8535611621816115a0565b94506020860135611631816115a0565b935060408601359250606086013567ffffffffffffffff81111561165457600080fd5b611660888289016115b5565b969995985093965092949392505050565b60006020828403121561168357600080fd5b5035919050565b6000806040838503121561169d57600080fd5b8235915060208301356116af816115a0565b809150509250929050565b60008060008060008060a087890312156116d357600080fd5b86356116de816115a0565b955060208701356116ee816115a0565b945060408701359350606087013567ffffffffffffffff81111561171157600080fd5b61171d89828a016115b5565b909450925050608087013567ffffffffffffffff81111561173d57600080fd5b87016060818a03121561174f57600080fd5b809150509295509295509295565b60006020828403121561176f57600080fd5b81356113ea816115a0565b60008060006060848603121561178f57600080fd5b833561179a816115a0565b925060208401356117aa816115a0565b929592945050506040919091013590565b600080600080600080608087890312156117d457600080fd5b863567ffffffffffffffff8111156117eb57600080fd5b6117f789828a016115b5565b909750955050602087013561180b816115a0565b935060408701359250606087013567ffffffffffffffff81111561182e57600080fd5b61183a89828a016115b5565b979a9699509497509295939492505050565b801515811461074857600080fd5b60006020828403121561186c57600080fd5b81356113ea8161184c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b03851660208201528360408201526080606082015260006118f8608083018486611877565b979650505050505050565b83815260406020820152600061191d604083018486611877565b95945050505050565b60008135611933816115a0565b6001600160a01b03168352602082810135908401526040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261197e57600080fd5b820160208101903567ffffffffffffffff81111561199b57600080fd5b8036038213156119aa57600080fd5b6060604086015261191d606086018284611877565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006119f760a083018587611877565b8281036080840152611a098185611926565b9998505050505050505050565b848152606060208201526000611a30606083018587611877565b82810360408401526118f88185611926565b600060208284031215611a5457600080fd5b5051919050565b818103818111156104d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611aa9606083018789611877565b8560208401528281036040840152611ac2818587611877565b98975050505050505050565b600060208284031215611ae057600080fd5b81516113ea8161184c565b6000825160005b81811015611b0c5760208186018101518583015201611af2565b50600092019182525091905056fea2646970667358221220a57d389b60850bdfffcd53692f80a9c416ca5b9b4d1b7d58052beba77fb7a96b64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960045534801561001657600080fd5b5060405161199338038061199383398101604081905261003591610238565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100dd60008261016c565b506101087f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361016c565b506101337f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361016c565b5061015e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261016c565b50505050505050505061028c565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166102125760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610216565b5060005b92915050565b80516001600160a01b038116811461023357600080fd5b919050565b6000806000806080858703121561024e57600080fd5b6102578561021c565b93506102656020860161021c565b92506102736040860161021c565b91506102816060860161021c565b905092959194509250565b60805160a0516116a36102f060003960008181610220015281816106d80152818161084a01528181610b6301528181610ce40152610e060152600081816101d401528181610648015281816106ab01528181610ad30152610b3601526116a36000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80636f8b44b0116100e3578063a217fddf1161008c578063d547741f11610066578063d547741f146103cf578063d5abeb01146103e2578063e63ab1e9146103eb57600080fd5b8063a217fddf1461038d578063a783c78914610395578063afd2dce4146103bc57600080fd5b806385f438c1116100bd57806385f438c11461030d57806391d1485414610334578063950837aa1461037a57600080fd5b80636f8b44b0146102df578063743e0c9b146102f25780638456cb591461030557600080fd5b80632f2ff15d116101455780635b1125911161011f5780635b112591146102a15780635c975abb146102c15780635e3e9fef146102cc57600080fd5b80632f2ff15d1461027357806336568abe146102865780633f4ba83a1461029957600080fd5b8063116191b611610176578063116191b6146101cf57806321e093b11461021b578063248a9ca31461024257600080fd5b806301ffc9a714610192578063106e6290146101ba575b600080fd5b6101a56101a03660046111c8565b610412565b60405190151581526020015b60405180910390f35b6101cd6101c836600461123a565b6104ab565b005b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b61026561025036600461126d565b60009081526002602052604090206001015490565b6040519081526020016101b1565b6101cd610281366004611286565b610550565b6101cd610294366004611286565b61057b565b6101cd6105d4565b6003546101f69073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff166101a5565b6101cd6102da3660046112fb565b610609565b6101cd6102ed36600461126d565b61079e565b6101cd61030036600461126d565b61080d565b6101cd6108b7565b6102657f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a5610342366004611286565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cd61038836600461135d565b6108e9565b610265600081565b6102657f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101cd6103ca366004611378565b610a94565b6101cd6103dd366004611286565b610c2e565b61026560045481565b6102657f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104a557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104b3610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104dd81610c96565b6104e5610ca0565b6104f0848484610cdf565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161053891815260200190565b60405180910390a25061054b6001600055565b505050565b60008281526002602052604090206001015461056b81610c96565b6105758383610e67565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146105ca576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61054b8282610f67565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fe81610c96565b610606611026565b50565b610611610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461063b81610c96565b610643610ca0565b61066e7f00000000000000000000000000000000000000000000000000000000000000008684610cdf565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610708907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611459565b600060405180830381600087803b15801561072257600080fd5b505af1158015610736573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610784939291906114b6565b60405180910390a2506107976001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c881610c96565b6107d0610ca0565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c906020015b60405180910390a15050565b610815610ca0565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156108a357600080fd5b505af1158015610797573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108e181610c96565b6106066110a3565b60006108f481610c96565b73ffffffffffffffffffffffffffffffffffffffff8216610941576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354610985907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e49073ffffffffffffffffffffffffffffffffffffffff16610f67565b506003546109ca907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb9073ffffffffffffffffffffffffffffffffffffffff16610f67565b506109f57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610e67565b50610a207f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610e67565b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f190602001610801565b610a9c610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ac681610c96565b610ace610ca0565b610af97f00000000000000000000000000000000000000000000000000000000000000008785610cdf565b6040517fece697b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ece697b390610b95907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161157d565b600060405180830381600087803b158015610baf57600080fd5b505af1158015610bc3573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac87878786604051610c1394939291906115ee565b60405180910390a250610c266001600055565b505050505050565b600082815260026020526040902060010154610c4981610c96565b6105758383610f67565b600260005403610c8f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61060681336110fc565b60015460ff1615610cdd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d71919061161a565b610d7b9084611633565b1115610db3576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610e4a57600080fd5b505af1158015610e5e573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610efd3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016104a5565b5060006104a5565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104a5565b61102e61118c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6110ab610ca0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611079565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611188576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610cdd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156111da57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461120a57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461123557600080fd5b919050565b60008060006060848603121561124f57600080fd5b61125884611211565b95602085013595506040909401359392505050565b60006020828403121561127f57600080fd5b5035919050565b6000806040838503121561129957600080fd5b823591506112a960208401611211565b90509250929050565b60008083601f8401126112c457600080fd5b50813567ffffffffffffffff8111156112dc57600080fd5b6020830191508360208285010111156112f457600080fd5b9250929050565b60008060008060006080868803121561131357600080fd5b61131c86611211565b945060208601359350604086013567ffffffffffffffff81111561133f57600080fd5b61134b888289016112b2565b96999598509660600135949350505050565b60006020828403121561136f57600080fd5b61120a82611211565b60008060008060008060a0878903121561139157600080fd5b61139a87611211565b955060208701359450604087013567ffffffffffffffff8111156113bd57600080fd5b6113c989828a016112b2565b90955093505060608701359150608087013567ffffffffffffffff8111156113f057600080fd5b87016060818a03121561140257600080fd5b809150509295509295509295565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114ab608083018486611410565b979650505050505050565b8381526040602082015260006114d0604083018486611410565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff6114f782611211565b1682526020818101359083015260006040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261153c57600080fd5b820160208101903567ffffffffffffffff81111561155957600080fd5b80360382131561156857600080fd5b606060408601526114d0606086018284611410565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a0606082015260006115cf60a083018587611410565b82810360808401526115e181856114d9565b9998505050505050505050565b848152606060208201526000611608606083018587611410565b82810360408401526114ab81856114d9565b60006020828403121561162c57600080fd5b5051919050565b808201808211156104a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206fa68043397322d1636dba3251c7e40948706562c8e08173e2df059302eb268d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d9d806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c578063a9b0a73c146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106f9565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7fcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e53382604051610210929190610a2f565b60405180910390a150565b61022361036f565b6000610230600285610b38565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610be1565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c6b565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d2e565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d4b565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610a6d83610694565b166040820152600080602084013590508060608401525060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ab957600080fd5b830160208101903567ffffffffffffffff811115610ad657600080fd5b803603821315610ae557600080fd5b606060808501528060a0850152808260c0860137600060c0828601015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509392505050565b600082610b6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b8e578181015183820152602001610b76565b50506000910152565b60008151808452610baf816020860160208601610b73565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c1660a0830186610b97565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c61578151865260209586019590910190600101610c43565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610cfe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610ce9858351610b97565b94506020938401939190910190600101610caf565b505050508281036040840152610d148186610c2f565b915050610d25606083018415159052565b95945050505050565b600060208284031215610d4057600080fd5b81516104f681610840565b60008251610d5d818460208701610b73565b919091019291505056fea264697066735822122098725982494f2e15151404f3fbfc80b0517e09c0b3e8ae0e6602ac62c5ba8d0d64736f6c634300081a00336080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526001602080840182905283850192909252835191820184526000808352606084019290925260808301829052905492517f048ae42c000000000000000000000000000000000000000000000000000000008152919273ffffffffffffffffffffffffffffffffffffffff169163048ae42c916102d7918c918c918c9189918990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a081018352610321808252600182840181905282850191909152835192830184526000808452606083019390935260808201839052915492517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201526024810183905293945092909188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220390328e54184295fe4eac56bf800f8f4c63d13597995a05e15347f2e505c481464736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea264697066735822122058a621ddf8438dd7ed89077cf75a72ac07bd86d7792e5230bee3a1bbfb92685b64736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220fb6961ae414af975574482aefc4202f06ad94e36dc71b2e66a1991b19eec7bda64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e82a8061003c6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b6101326112bf565b60405161013f9190617b70565b60405180910390f35b610150611321565b60405161013f9190617c0c565b610132611463565b6101326114c3565b610128611523565b61017d611da7565b60405161013f9190617d72565b610128611f29565b61019a612761565b60405161013f9190617e10565b6101af612831565b60405161013f9190617e87565b61012861292c565b6101af612f2d565b61019a613028565b6101dc6130f8565b604051901515815260200161013f565b6101286131cc565b610132613905565b601f546101dc9060ff1681565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780548216615678179055602d805490911661432117905560405161026790617a76565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617a76565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190851660248201526044810193909352921660648201526000916104a7916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613965565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c000000000000000000000000000000006020820152602754602554925193909504841660248401529383166044830152909116606482015291925061054a9160840161044a565b602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091178255604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c00000000000093810193909352601f546023546027546025549351610100909304851660248401529084166044830152831660648201529116608482015291925061064e9160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e00000000000000000000000000000000000000000000000000000000179052613965565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179091556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b5050601f546020546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b15801561080957600080fd5b505af115801561081d573d6000803e3d6000fd5b5050601f546021546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b15801561088857600080fd5b505af115801561089c573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108fe57600080fd5b505af1158015610912573d6000803e3d6000fd5b50506022546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561098157600080fd5b505af1158015610995573d6000803e3d6000fd5b50506022546020546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af1158015610a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2d9190617f1e565b50604051610a3a90617a83565b604051809103906000f080158015610a56573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316178155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602354602d5492519085169381019390935292166044820152610b3c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613965565b602880546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602980549092168117909155604051610b8d90617a90565b6001600160a01b039091168152602001604051809103906000f080158015610bb9573d6000803e3d6000fd5b50602a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c6e57600080fd5b505af1158015610c82573d6000803e3d6000fd5b505050506000806000604051610c9790617a9d565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610cd3573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602954604051601293600193600093849391921690610d2990617aaa565b610d3896959493929190617f40565b604051809103906000f080158015610d54573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602b546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610deb57600080fd5b505af1158015610dff573d6000803e3d6000fd5b5050602b546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b5050602c54602d546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f159190617f1e565b50602c54602a546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faa9190617f1e565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561100957600080fd5b505af115801561101d573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561109357600080fd5b505af11580156110a7573d6000803e3d6000fd5b5050602c546029546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af115801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190617f1e565b506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506040805160a0810182526103218082526000602080840182815284860193845285519182019095528181526060840181905260808401919091528251602e80549551151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009096166001600160a01b03928316179590951785559151602f8054919093167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179091559093509091506030906112ad9082618100565b50608082015181600301559050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561131757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112f9575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561145a57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114435783829060005260206000200180546113b690618064565b80601f01602080910402602001604051908101604052809291908181526020018280546113e290618064565b801561142f5780601f106114045761010080835404028352916020019161142f565b820191906000526020600020905b81548152906001019060200180831161141257829003601f168201915b505050505081526020019060010190611397565b505050508152505081526020019060010190611345565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602c54602a805493517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03948516600482015292939092600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa1580156115cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f391906181bf565b6040519091506000907fe04d4f970000000000000000000000000000000000000000000000000000000090611630908890889088906024016181d8565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260245490519193506000926116c9926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602c54611700926207a120916001600160a01b0316908690600190602e906024016182f1565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f048ae42c0000000000000000000000000000000000000000000000000000000017905260295490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916117bd916001600160a01b039190911690600090869060040161835a565b600060405180830381600087803b1580156117d757600080fd5b505af11580156117eb573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561186157600080fd5b505af1158015611875573d6000803e3d6000fd5b5050602a5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261190f926207a120916001600160a01b0316908d908d908d90600401618382565b600060405180830381600087803b15801561192957600080fd5b505af115801561193d573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b1580156119be57600080fd5b505af11580156119d2573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a6557600080fd5b505af1158015611a79573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031685898989604051611ac99594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b6357600080fd5b505af1158015611b77573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611bbc9087908690618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c3657600080fd5b505af1158015611c4a573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd93508892611ca39216908790600401618431565b60006040518083038185885af1158015611cc1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611cea919081019061850c565b50602c54602a546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7991906181bf565b9050611d9d816001611d8e6207a12088618570565b611d989190618570565b613984565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561145a5783829060005260206000209060020201604051806040016040529081600082018054611dfe90618064565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2a90618064565b8015611e775780601f10611e4c57610100808354040283529160200191611e77565b820191906000526020600020905b815481529060010190602001808311611e5a57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611f1157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611ebe5790505b50505050508152505081526020019060010190611dcb565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611fa5908790879087906024016181d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000949094169390931790925260295491517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039093166084820152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561209757600080fd5b505af11580156120ab573d6000803e3d6000fd5b5050602d5460245460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f19818403018152828252602c547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216916207a1209188918491634d8943bb916004808201926020929091908290030181865afa158015612180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a491906181bf565b896001602e6040516121bd989796959493929190618583565b60405180910390a3602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561223757600080fd5b505af115801561224b573d6000803e3d6000fd5b505060295460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063048ae42c915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526122e7926207a120916001600160a01b0316908890600190602e906004016185e5565b600060405180830381600087803b15801561230157600080fd5b505af1158015612315573d6000803e3d6000fd5b5050602c54602d546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a591906181bf565b90506123b881611d98846207a120618570565b601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561243557600080fd5b505af1158015612449573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156124dc57600080fd5b505af11580156124f0573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b0316858989896040516125409594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156125da57600080fd5b505af11580156125ee573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506126339087908790618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156126ad57600080fd5b505af11580156126c1573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd9350889261271a9216908890600401618431565b60006040518083038185885af1158015612738573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611d9d919081019061850c565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561145a5783829060005260206000200180546127a490618064565b80601f01602080910402602001604051908101604052809291908181526020018280546127d090618064565b801561281d5780601f106127f25761010080835404028352916020019161281d565b820191906000526020600020905b81548152906001019060200180831161280057829003601f168201915b505050505081526020019060010190612785565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561145a5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561291457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116128c15790505b50505050508152505081526020019060010190612855565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f9700000000000000000000000000000000000000000000000000000000906129a8908790879087906024016181d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602d5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a7b57600080fd5b505af1158015612a8f573d6000803e3d6000fd5b50506029546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612b2157600080fd5b505af1158015612b35573d6000803e3d6000fd5b5050602c54602d5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf9060340160408051601f1981840301815290829052612bb5918690600190602e90618639565b60405180910390a36029546024546040805160609290921b6bffffffffffffffffffffffff19166020830152805180830360140181526034830191829052602c547f1cb5ea75000000000000000000000000000000000000000000000000000000009092526001600160a01b0393841693631cb5ea7593612c459391909116908690600190602e90603801618678565b600060405180830381600087803b158015612c5f57600080fd5b505af1158015612c73573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612cf457600080fd5b505af1158015612d08573d6000803e3d6000fd5b5050601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612d9e57600080fd5b505af1158015612db2573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612df79085908590618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e7157600080fd5b505af1158015612e85573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd93508692612ede9216908690600401618431565b60006040518083038185885af1158015612efc573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612f25919081019061850c565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561145a5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561301057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612fbd5790505b50505050508152505081526020019060010190612f51565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561145a57838290600052602060002001805461306b90618064565b80601f016020809104026020016040519081016040528092919081815260200182805461309790618064565b80156130e45780601f106130b9576101008083540402835291602001916130e4565b820191906000526020600020905b8154815290600101906020018083116130c757829003601f168201915b50505050508152602001906001019061304c565b60085460009060ff1615613110575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156131a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c591906181bf565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090613248908790879087906024016181d8565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260245490519193506000926132e1926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602c54613315926001600160a01b03909116908590600190602e906024016186d2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1cb5ea750000000000000000000000000000000000000000000000000000000017905260295490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916133d2916001600160a01b039190911690600090869060040161835a565b600060405180830381600087803b1580156133ec57600080fd5b505af1158015613400573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561347657600080fd5b505af115801561348a573d6000803e3d6000fd5b5050602a5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637a34d8bb915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352613521926001600160a01b03909116908b908b908b90600401618723565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b1580156135d057600080fd5b505af11580156135e4573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561367757600080fd5b505af115801561368b573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b0316848888886040516136db9594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561377557600080fd5b505af1158015613789573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506137ce9086908690618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561384857600080fd5b505af115801561385c573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd935087926138b59216908790600401618431565b60006040518083038185885af11580156138d3573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526138fc919081019061850c565b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b600061396f617ab7565b61397a848483613a03565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156139ef57600080fd5b505afa158015612f25573d6000803e3d6000fd5b600080613a108584613a7e565b9050613a736040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613a5e929190618431565b60405160208183030381529060405285613a8a565b9150505b9392505050565b6000613a778383613ab8565b60c08101515160009015613aae57613aa784848460c00151613ad3565b9050613a77565b613aa78484613c79565b6000613ac48383613d64565b613a7783836020015184613a8a565b600080613ade613d74565b90506000613aec8683613e47565b90506000613b0382606001518360200151856142ed565b90506000613b13838389896144ff565b90506000613b208261537c565b602081015181519192509060030b15613b9357898260400151604051602001613b4a929190618771565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b8a916004016187f2565b60405180910390fd5b6000613bd66040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161554b565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613c299084906004016187f2565b602060405180830381865afa158015613c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6a9190618805565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613cce9087906004016187f2565b600060405180830381865afa158015613ceb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d13919081019061850c565b90506000613d418285604051602001613d2d92919061882e565b60405160208183030381529060405261574b565b90506001600160a01b03811661397a578484604051602001613b4a92919061885d565b613d708282600061575e565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613dfb908490600401618908565b600060405180830381865afa158015613e18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e40919081019061894f565b9250505090565b613e796040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613ec46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613ecd85615861565b60208201526000613edd86615c46565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613f1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f47919081019061894f565b86838560200151604051602001613f619493929190618998565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613fb99085906004016187f2565b600060405180830381865afa158015613fd6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ffe919081019061894f565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614046908490600401618a9c565b602060405180830381865afa158015614063573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140879190617f1e565b61409c5781604051602001613b4a9190618aee565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906140e1908490600401618b80565b600060405180830381865afa1580156140fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614126919081019061894f565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061416d908490600401618bd2565b602060405180830381865afa15801561418a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ae9190617f1e565b15614243576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906141f8908490600401618bd2565b600060405180830381865afa158015614215573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261423d919081019061894f565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016142689190618c24565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614294929190618c90565b600060405180830381865afa1580156142b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142d9919081019061894f565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816143095790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061436957614369618cb5565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106143bd576143bd618cb5565b6020026020010181905250846040516020016143d99190618ce4565b604051602081830303815290604052816002815181106143fb576143fb618cb5565b6020026020010181905250826040516020016144179190618d50565b6040516020818303038152906040528160038151811061443957614439618cb5565b6020026020010181905250600061444f8261537c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144e09060408051808201825260008082526020918201528151808301909252845182528085019082015290615ec9565b6144f55785604051602001613b4a9190618d91565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561454f565b511590565b6146c35782602001511561460b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b8a565b8260c00151156146c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b8a565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816146dc57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061473790618e22565b935060ff168151811061474c5761474c618cb5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161479d9190618e41565b6040516020818303038152906040528282806147b890618e22565b935060ff16815181106147cd576147cd618cb5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061481a90618e22565b935060ff168151811061482f5761482f618cb5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061487c90618e22565b935060ff168151811061489157614891618cb5565b602002602001018190525087602001518282806148ad90618e22565b935060ff16815181106148c2576148c2618cb5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061490f90618e22565b935060ff168151811061492457614924618cb5565b60209081029190910101528751828261493c81618e22565b935060ff168151811061495157614951618cb5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061499e90618e22565b935060ff16815181106149b3576149b3618cb5565b60200260200101819052506149c746615f2a565b82826149d281618e22565b935060ff16815181106149e7576149e7618cb5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614a3490618e22565b935060ff1681518110614a4957614a49618cb5565b602002602001018190525086828280614a6190618e22565b935060ff1681518110614a7657614a76618cb5565b6020908102919091010152855115614b9d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614ac781618e22565b935060ff1681518110614adc57614adc618cb5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614b2c9089906004016187f2565b600060405180830381865afa158015614b49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b71919081019061894f565b8282614b7c81618e22565b935060ff1681518110614b9157614b91618cb5565b60200260200101819052505b846020015115614c6d5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614be681618e22565b935060ff1681518110614bfb57614bfb618cb5565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614c4890618e22565b935060ff1681518110614c5d57614c5d618cb5565b6020026020010181905250614e34565b614ca561454a8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614d385760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614ce881618e22565b935060ff1681518110614cfd57614cfd618cb5565b60200260200101819052508460a00151604051602001614d1d9190618ce4565b604051602081830303815290604052828280614c4890618e22565b8460c00151158015614d7b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d7990511590565b155b15614e345760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614dbf81618e22565b935060ff1681518110614dd457614dd4618cb5565b6020026020010181905250614de888615fca565b604051602001614df89190618ce4565b604051602081830303815290604052828280614e1390618e22565b935060ff1681518110614e2857614e28618cb5565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e6890511590565b614efd5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614eab81618e22565b935060ff1681518110614ec057614ec0618cb5565b60200260200101819052508460400151828280614edc90618e22565b935060ff1681518110614ef157614ef1618cb5565b60200260200101819052505b60608501511561501e5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614f4681618e22565b935060ff1681518110614f5b57614f5b618cb5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614fca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ff2919081019061894f565b8282614ffd81618e22565b935060ff168151811061501257615012618cb5565b60200260200101819052505b60e085015151156150c55760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261506881618e22565b935060ff168151811061507d5761507d618cb5565b60200260200101819052506150998560e0015160000151615f2a565b82826150a481618e22565b935060ff16815181106150b9576150b9618cb5565b60200260200101819052505b60e0850151602001511561516f5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261511281618e22565b935060ff168151811061512757615127618cb5565b60200260200101819052506151438560e0015160200151615f2a565b828261514e81618e22565b935060ff168151811061516357615163618cb5565b60200260200101819052505b60e085015160400151156152195760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826151bc81618e22565b935060ff16815181106151d1576151d1618cb5565b60200260200101819052506151ed8560e0015160400151615f2a565b82826151f881618e22565b935060ff168151811061520d5761520d618cb5565b60200260200101819052505b60e085015160600151156152c35760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261526681618e22565b935060ff168151811061527b5761527b618cb5565b60200260200101819052506152978560e0015160600151615f2a565b82826152a281618e22565b935060ff16815181106152b7576152b7618cb5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156152e1576152e1618035565b60405190808252806020026020018201604052801561531457816020015b60608152602001906001900390816152ff5790505b50905060005b8260ff168160ff16101561536d57838160ff168151811061533d5761533d618cb5565b6020026020010151828260ff168151811061535a5761535a618cb5565b602090810291909101015260010161531a565b5093505050505b949350505050565b6153a36040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161542991869101618eac565b600060405180830381865afa158015615446573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261546e919081019061894f565b9050600061547c8683616ab9565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016154ac9190617e10565b6000604051808303816000875af11580156154cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154f39190810190618ef3565b805190915060030b1580159061550c5750602081015151155b801561551b5750604081015151155b156144f5578160008151811061553357615533618cb5565b6020026020010151604051602001613b4a9190618fa9565b606060006155808560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155b79082905b90616c0e565b156157145760006156348261562e846156286155fa8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616c35565b90616c97565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615698908290616c0e565b1561570257604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526156ff905b8290616d1c565b90505b61570b81616d42565b92505050613a77565b821561572d578484604051602001613b4a929190619195565b5050604080516020810190915260008152613a77565b509392505050565b6000808251602084016000f09392505050565b8160a001511561576d57505050565b600061577a848484616dab565b905060006157878261537c565b602081015181519192509060030b1580156158235750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615823906040805180820182526000808252602091820152815180830190925284518252808501908201526155b1565b1561583057505050505050565b60408201515115615850578160400151604051602001613b4a919061923c565b80604051602001613b4a919061929a565b606060006158968360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506158fb905b8290615ec9565b1561596a57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a7790615965908390617346565b616d42565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159cc905b82906173d0565b600103615a9957604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a32906156f8565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a7790615965905b8390616d1c565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615af8906158f4565b15615c2f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b6090839061746a565b905060008160018351615b739190618570565b81518110615b8357615b83618cb5565b60200260200101519050615c26615965615bf96040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617346565b95945050505050565b82604051602001613b4a9190619305565b50919050565b60606000615c7b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615cdd906158f4565b15615ceb57613a7781616d42565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d4a906159c5565b600103615db457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a779061596590615a92565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e13906158f4565b15615c2f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e7b90839061746a565b9050600181511115615eb7578060028251615e969190618570565b81518110615ea657615ea6618cb5565b602002602001015192505050919050565b5082604051602001613b4a9190619305565b805182516000911115615ede5750600061397e565b81518351602085015160009291615ef4916193e3565b615efe9190618570565b905082602001518103615f1557600191505061397e565b82516020840151819020912014905092915050565b60606000615f378361750f565b600101905060008167ffffffffffffffff811115615f5757615f57618035565b6040519080825280601f01601f191660200182016040528015615f81576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f8b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616056905b82906175f1565b1561609657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160f59061604f565b1561613557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161949061604f565b156161d457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162339061604f565b806162985750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162989061604f565b156162d857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163379061604f565b8061639c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261639c9061604f565b156163dc57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261643b9061604f565b806164a05750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164a09061604f565b156164e057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653f9061604f565b806165a45750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165a49061604f565b156165e457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166439061604f565b1561668357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166e29061604f565b1561672257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167819061604f565b156167c157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168209061604f565b1561686057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168bf9061604f565b156168ff57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261695e9061604f565b806169c35750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169c39061604f565b15616a0357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a629061604f565b15616aa257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613b4a92906020016193f6565b60608060005b8451811015616b445781858281518110616adb57616adb618cb5565b6020026020010151604051602001616af492919061882e565b604051602081830303815290604052915060018551616b139190618570565b8114616b3c5781604051602001616b2a919061955f565b60405160208183030381529060405291505b600101616abf565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616b5d5790505090508381600081518110616b8857616b88618cb5565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616bdc57616bdc618cb5565b60200260200101819052508181600281518110616bfb57616bfb618cb5565b6020908102919091010152949350505050565b6020808301518351835192840151600093616c2c9291849190617605565b14159392505050565b60408051808201909152600080825260208201526000616c678460000151856020015185600001518660200151617716565b9050836020015181616c799190618570565b84518590616c88908390618570565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616cbc57508161397e565b6020808301519084015160019114616ce35750815160208481015190840151829020919020145b8015616d1457825184518590616cfa908390618570565b9052508251602085018051616d109083906193e3565b9052505b509192915050565b6040805180820190915260008082526020820152616d3b838383617836565b5092915050565b60606000826000015167ffffffffffffffff811115616d6357616d63618035565b6040519080825280601f01601f191660200182016040528015616d8d576020820181803683370190505b5090506000602082019050616d3b81856020015186600001516178e1565b60606000616db7613d74565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616dd457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616e2f90618e22565b935060ff1681518110616e4457616e44618cb5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616e9591906195a0565b604051602081830303815290604052828280616eb090618e22565b935060ff1681518110616ec557616ec5618cb5565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616f1290618e22565b935060ff1681518110616f2757616f27618cb5565b602002602001018190525082604051602001616f439190618d50565b604051602081830303815290604052828280616f5e90618e22565b935060ff1681518110616f7357616f73618cb5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616fc090618e22565b935060ff1681518110616fd557616fd5618cb5565b6020026020010181905250616fea878461795b565b8282616ff581618e22565b935060ff168151811061700a5761700a618cb5565b6020908102919091010152855151156170b65760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261705c81618e22565b935060ff168151811061707157617071618cb5565b602002602001018190525061708a86600001518461795b565b828261709581618e22565b935060ff16815181106170aa576170aa618cb5565b60200260200101819052505b8560800151156171245760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826170ff81618e22565b935060ff168151811061711457617114618cb5565b602002602001018190525061718a565b841561718a5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261716981618e22565b935060ff168151811061717e5761717e618cb5565b60200260200101819052505b604086015151156172265760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171d481618e22565b935060ff16815181106171e9576171e9618cb5565b6020026020010181905250856040015182828061720590618e22565b935060ff168151811061721a5761721a618cb5565b60200260200101819052505b8560600151156172905760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261726f81618e22565b935060ff168151811061728457617284618cb5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156172ae576172ae618035565b6040519080825280602002602001820160405280156172e157816020015b60608152602001906001900390816172cc5790505b50905060005b8260ff168160ff16101561733a57838160ff168151811061730a5761730a618cb5565b6020026020010151828260ff168151811061732757617327618cb5565b60209081029190910101526001016172e7565b50979650505050505050565b604080518082019091526000808252602082015281518351101561736b57508161397e565b81518351602085015160009291617381916193e3565b61738b9190618570565b602084015190915060019082146173ac575082516020840151819020908220145b80156173c7578351855186906173c3908390618570565b9052505b50929392505050565b60008082600001516173f48560000151866020015186600001518760200151617716565b6173fe91906193e3565b90505b8351602085015161741291906193e3565b8111616d3b5781617422816195e5565b925050826000015161745985602001518361743d9190618570565b86516174499190618570565b8386600001518760200151617716565b61746391906193e3565b9050617401565b6060600061747884846173d0565b6174839060016193e3565b67ffffffffffffffff81111561749b5761749b618035565b6040519080825280602002602001820160405280156174ce57816020015b60608152602001906001900390816174b95790505b50905060005b8151811015615743576174ea6159658686616d1c565b8282815181106174fc576174fc618cb5565b60209081029190910101526001016174d4565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617558577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617584576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106175a257662386f26fc10000830492506010015b6305f5e10083106175ba576305f5e100830492506008015b61271083106175ce57612710830492506004015b606483106175e0576064830492506002015b600a831061397e5760010192915050565b60006175fd838361799b565b159392505050565b60008085841161770c57602084116176b8576000841561765057600161762c866020618570565b6176379060086195ff565b6176429060026196fd565b61764c9190618570565b1990505b835181168561765f89896193e3565b6176699190618570565b805190935082165b8181146176a35787841161768b5787945050505050615374565b8361769581619709565b945050828451169050617671565b6176ad87856193e3565b945050505050615374565b8383206176c58588618570565b6176cf90876193e3565b91505b85821061770a578482208082036176f7576176ed86846193e3565b9350505050615374565b617702600184618570565b9250506176d2565b505b5092949350505050565b6000838186851161782157602085116177d0576000851561776257600161773e876020618570565b6177499060086195ff565b6177549060026196fd565b61775e9190618570565b1990505b845181166000876177738b8b6193e3565b61777d9190618570565b855190915083165b8281146177c2578186106177aa5761779d8b8b6193e3565b9650505050505050615374565b856177b4816195e5565b965050838651169050617785565b859650505050505050615374565b508383206000905b6177e28689618570565b821161781f578583208082036177fe5783945050505050615374565b6178096001856193e3565b9350508180617817906195e5565b9250506177d8565b505b61782b87876193e3565b979650505050505050565b604080518082019091526000808252602082015260006178688560000151866020015186600001518760200151617716565b6020808701805191860191909152519091506178849082618570565b83528451602086015161789791906193e3565b81036178a657600085526178d8565b835183516178b491906193e3565b855186906178c3908390618570565b90525083516178d290826193e3565b60208601525b50909392505050565b6020811061791957815183526178f86020846193e3565b92506179056020836193e3565b9150617912602082618570565b90506178e1565b600019811561794857600161792f836020618570565b61793b906101006196fd565b6179459190618570565b90505b9151835183169219169190911790915250565b606060006179698484613e47565b805160208083015160405193945061798393909101619720565b60405160208183030381529060405291505092915050565b81518151600091908111156179ae575081515b6020808501519084015160005b83811015617a675782518251808214617a37576000196020871015617a16576001846179e8896020618570565b6179f291906193e3565b6179fd9060086195ff565b617a089060026196fd565b617a129190618570565b1990505b8181168382168181039114617a3457975061397e9650505050505050565b50505b617a426020866193e3565b9450617a4f6020856193e3565b93505050602081617a6091906193e3565b90506179bb565b50845186516144f59190619778565b610c9f8061979983390190565b610de08061a43883390190565b610a2c8061b21883390190565b610b3f8061bc4483390190565b6120728061c78383390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617afa617aff565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617afa6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617bb15783516001600160a01b0316835260209384019390920191600101617b8a565b509095945050505050565b60005b83811015617bd7578181015183820152602001617bbf565b50506000910152565b60008151808452617bf8816020860160208601617bbc565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617cee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617cd8848651617be0565b6020958601959094509290920191600101617c9e565b509197505050602094850194929092019150600101617c34565b50929695505050505050565b600081518084526020840193506020830160005b82811015617d685781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617d28565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617dde6040880182617be0565b9050602082015191508681036020880152617df98183617d14565b965050506020938401939190910190600101617d9a565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e72858351617be0565b94506020938401939190910190600101617e38565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617f086040870182617d14565b9550506020938401939190910190600101617eaf565b600060208284031215617f3057600080fd5b81518015158114613a7757600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617ffa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261801b60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061807857607f821691505b602082108103615c40577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f8211156180fb57806000526020600020601f840160051c810160208510156180d85750805b601f840160051c820191505b818110156180f857600081556001016180e4565b50505b505050565b815167ffffffffffffffff81111561811a5761811a618035565b61812e816181288454618064565b846180b1565b6020601f821160018114618162576000831561814a5750848201515b600019600385901b1c1916600184901b1784556180f8565b600084815260208120601f198516915b828110156181925787850151825560209485019460019092019101618172565b50848210156181b05786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156181d157600080fd5b5051919050565b6060815260006181eb6060830186617be0565b602083019490945250901515604090910152919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a060608501526000815461824c81618064565b8060a0880152600182166000811461826b57600181146182a5576182d9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b89010193506182d9565b84600052602060002060005b838110156182d05781548a820160c001526001909101906020016182b1565b890160c0019450505b50505060038401546080860152809250505092915050565b60c08152600061830460c0830189617be0565b62ffffff881660208401526001600160a01b038716604084015282810360608401526183308187617be0565b905060ff8516608084015282810360a084015261834d8185618202565b9998505050505050505050565b6001600160a01b0384168152826020820152606060408201526000615c266060830184617be0565b60c08152600061839560c0830189617be0565b8760208401526001600160a01b038716604084015282810360608401526183bc8187617be0565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a0604082015260006183ff60a0830186617be0565b6060830194909452509015156080909101529392505050565b8281526040602082015260006153746040830184617be0565b6001600160a01b03831681526040602082015260006153746040830184617be0565b6040516060810167ffffffffffffffff8111828210171561847657618476618035565b60405290565b60008067ffffffffffffffff84111561849757618497618035565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156184c6576184c6618035565b6040528381529050808284018510156184de57600080fd5b615743846020830185617bbc565b600082601f8301126184fd57600080fd5b613a778383516020850161847c565b60006020828403121561851e57600080fd5b815167ffffffffffffffff81111561853557600080fd5b61397a848285016184ec565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561397e5761397e618541565b6101008152600061859861010083018b617be0565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a08401526185cb8187617be0565b90508460c084015282810360e0840152613c6a8185618202565b60c0815260006185f860c0830189617be0565b8760208401526001600160a01b0387166040840152828103606084015261861f8187617be0565b905084608084015282810360a084015261834d8185618202565b60808152600061864c6080830187617be0565b828103602084015261865e8187617be0565b9050846040840152828103606084015261782b8185618202565b60a08152600061868b60a0830188617be0565b6001600160a01b038716602084015282810360408401526186ac8187617be0565b905084606084015282810360808401526186c68185618202565b98975050505050505050565b60a0815260006186e560a0830188617be0565b6001600160a01b038716602084015282810360408401526187068187617be0565b905060ff8516606084015282810360808401526186c68185618202565b60a08152600061873660a0830188617be0565b6001600160a01b038716602084015282810360408401526187578187617be0565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516187a981601a850160208801617bbc565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516187e681601c840160208801617bbc565b01601c01949350505050565b602081526000613a776020830184617be0565b60006020828403121561881757600080fd5b81516001600160a01b0381168114613a7757600080fd5b60008351618840818460208801617bbc565b835190830190618854818360208801617bbc565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161889581601a850160208801617bbc565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516188d2816033840160208801617bbc565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a776080830184617be0565b60006020828403121561896157600080fd5b815167ffffffffffffffff81111561897857600080fd5b8201601f8101841361898957600080fd5b61397a8482516020840161847c565b600085516189aa818460208a01617bbc565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516189e4816001840160208a01617bbc565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618a22816002840160208901617bbc565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618a64816002840160208801617bbc565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618aaf6040830184617be0565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618b2681601f850160208701617bbc565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618b936040830184617be0565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618be56040830184617be0565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618c5c816014850160208701617bbc565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618ca36040830185617be0565b8281036020840152613a738185617be0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618d1c816001850160208701617bbc565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618d62818460208701617bbc565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618e1581604b850160208701617bbc565b91909101604b0192915050565b600060ff821660ff8103618e3857618e38618541565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618e9f816029850160208701617bbc565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a776080830184617be0565b600060208284031215618f0557600080fd5b815167ffffffffffffffff811115618f1c57600080fd5b820160608185031215618f2e57600080fd5b618f36618453565b81518060030b8114618f4757600080fd5b8152602082015167ffffffffffffffff811115618f6357600080fd5b618f6f868285016184ec565b602083015250604082015167ffffffffffffffff811115618f8f57600080fd5b618f9b868285016184ec565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619007816021850160208701617bbc565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516191f3816021850160208801617bbc565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161923081602e840160208801617bbc565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618e9f816029850160208701617bbc565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516192f8816022850160208701617bbc565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161933d81600e850160208701617bbc565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561397e5761397e618541565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161942e816018850160208801617bbc565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161946b81601c840160208801617bbc565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619571818460208701617bbc565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516195d881601c850160208701617bbc565b91909101601c0192915050565b600060001982036195f8576195f8618541565b5060010190565b808202811582820484141761397e5761397e618541565b6001815b60018411156196515780850481111561963557619635618541565b600184161561964357908102905b60019390931c92800261961a565b935093915050565b6000826196685750600161397e565b816196755750600061397e565b816001811461968b5760028114619695576196b1565b600191505061397e565b60ff8411156196a6576196a6618541565b50506001821b61397e565b5060208310610133831016604e8410600b84101617156196d4575081810a61397e565b6196e16000198484619616565b80600019048211156196f5576196f5618541565b029392505050565b6000613a778383619659565b60008161971857619718618541565b506000190190565b60008351619732818460208801617bbc565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161976c816001840160208801617bbc565b01600101949350505050565b8181036000831280158383131683831282161715616d3b57616d3b61854156fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610dbc806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c578063660b9de01461008c5780636ed70169146100ac57005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6100a73660046106f9565b6101aa565b3480156100b857600080fd5b5061006a6101e6565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e33826040516101db929190610a78565b60405180910390a150565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61022361036f565b6000610230600285610b57565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610c00565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c8a565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d4d565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d6a565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610ab683610694565b1660408201526000602083013567ffffffffffffffff8116808214610ada57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610b1657600080fd5b830160208101903567ffffffffffffffff811115610b3357600080fd5b803603821315610b4257600080fd5b606060808501526105b660a085018284610a2f565b600082610b8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610bad578181015183820152602001610b95565b50506000910152565b60008151808452610bce816020860160208601610b92565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c3560a0830186610bb6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c80578151865260209586019590910190600101610c62565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610d1d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610d08858351610bb6565b94506020938401939190910190600101610cce565b505050508281036040840152610d338186610c4e565b915050610d44606083018415159052565b95945050505050565b600060208284031215610d5f57600080fd5b81516104f681610840565b60008251610d7c818460208701610b92565b919091019291505056fea2646970667358221220084d92a79207d5024a4431b52d5d0038017908edb40aae1ce1d94a5ec3de914064736f6c634300081a00336080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220d7e1a9075911564d308c037a0af9765ff7f3977eee9652547da152cb6de1448964736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220cc406cf4b9f9cfbacfa9f32870eb254a68b539001bcca4f238577e817f73a2ab64736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220f2cd66c5095466094d1853cde0efc766bf28b466754455677816c60dd94be00564736f6c634300081a0033", } // GatewayEVMZEVMTestABI is the input ABI used to generate the binding from. @@ -2103,9 +2103,9 @@ type GatewayEVMZEVMTestReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*GatewayEVMZEVMTestReceivedRevertIterator, error) { logs, sub, err := _GatewayEVMZEVMTest.contract.FilterLogs(opts, "ReceivedRevert") @@ -2115,9 +2115,9 @@ func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) FilterReceivedRevert(opts return &GatewayEVMZEVMTestReceivedRevertIterator{contract: _GatewayEVMZEVMTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *GatewayEVMZEVMTestReceivedRevert) (event.Subscription, error) { logs, sub, err := _GatewayEVMZEVMTest.contract.WatchLogs(opts, "ReceivedRevert") @@ -2152,9 +2152,9 @@ func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) WatchReceivedRevert(opts }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) ParseReceivedRevert(log types.Log) (*GatewayEVMZEVMTestReceivedRevert, error) { event := new(GatewayEVMZEVMTestReceivedRevert) if err := _GatewayEVMZEVMTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { @@ -2241,9 +2241,9 @@ type GatewayEVMZEVMTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMZEVMTestRevertedIterator, error) { var toRule []interface{} @@ -2262,9 +2262,9 @@ func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) FilterReverted(opts *bind return &GatewayEVMZEVMTestRevertedIterator{contract: _GatewayEVMZEVMTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMZEVMTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2308,9 +2308,9 @@ func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) WatchReverted(opts *bind. }), nil } -// ParseReverted is a log parse operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) ParseReverted(log types.Log) (*GatewayEVMZEVMTestReverted, error) { event := new(GatewayEVMZEVMTestReverted) if err := _GatewayEVMZEVMTest.contract.UnpackLog(event, "Reverted", log); err != nil { @@ -2389,13 +2389,14 @@ func (it *GatewayEVMZEVMTestUpdatedGatewayTSSAddressIterator) Close() error { // GatewayEVMZEVMTestUpdatedGatewayTSSAddress represents a UpdatedGatewayTSSAddress event raised by the GatewayEVMZEVMTest contract. type GatewayEVMZEVMTestUpdatedGatewayTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) FilterUpdatedGatewayTSSAddress(opts *bind.FilterOpts) (*GatewayEVMZEVMTestUpdatedGatewayTSSAddressIterator, error) { logs, sub, err := _GatewayEVMZEVMTest.contract.FilterLogs(opts, "UpdatedGatewayTSSAddress") @@ -2405,9 +2406,9 @@ func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) FilterUpdatedGatewayTSSAd return &GatewayEVMZEVMTestUpdatedGatewayTSSAddressIterator{contract: _GatewayEVMZEVMTest.contract, event: "UpdatedGatewayTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) WatchUpdatedGatewayTSSAddress(opts *bind.WatchOpts, sink chan<- *GatewayEVMZEVMTestUpdatedGatewayTSSAddress) (event.Subscription, error) { logs, sub, err := _GatewayEVMZEVMTest.contract.WatchLogs(opts, "UpdatedGatewayTSSAddress") @@ -2442,9 +2443,9 @@ func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) WatchUpdatedGatewayTSSAdd }), nil } -// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) ParseUpdatedGatewayTSSAddress(log types.Log) (*GatewayEVMZEVMTestUpdatedGatewayTSSAddress, error) { event := new(GatewayEVMZEVMTestUpdatedGatewayTSSAddress) if err := _GatewayEVMZEVMTest.contract.UnpackLog(event, "UpdatedGatewayTSSAddress", log); err != nil { diff --git a/v2/pkg/gatewayzevm.sol/gatewayzevm.go b/v2/pkg/gatewayzevm.sol/gatewayzevm.go index 37fb68ee2..8ac9b84d4 100644 --- a/v2/pkg/gatewayzevm.sol/gatewayzevm.go +++ b/v2/pkg/gatewayzevm.sol/gatewayzevm.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -54,8 +54,8 @@ type ZContext struct { // GatewayZEVMMetaData contains all meta data concerning the GatewayZEVM contract. var GatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_MESSAGE_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613b186100fd6000396000818161273f01528181612768015261293e0152613b186000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca3714610621578063d547741f14610641578063e63ab1e914610661578063f45346dc1461069557600080fd5b806397d340f514610580578063a217fddf14610596578063ad3cb1cc146105ab578063bcf7f32b1461060157600080fd5b80638456cb59116100d15780638456cb59146104c65780638fffac57146104db57806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f5780637c0dcb5f146104a657600080fd5b806334b1f5dc116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b806334b1f5dc1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b806321501a95116101a057806321501a95146102b557806321e093b1146102d5578063248a9ca31461030d5780632f2ff15d1461036a57600080fd5b806301ffc9a714610240578063048ae42c146102755780631cb5ea751461029557600080fd5b3661023b576101d36106b5565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612e87565b610713565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b5061023961029036600461303a565b6107ac565b3480156102a157600080fd5b506102396102b03660046130fa565b6109b3565b3480156102c157600080fd5b506102396102d03660046131c1565b610c75565b3480156102e157600080fd5b506000546102f5906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561031957600080fd5b5061035c61032836600461324d565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561037657600080fd5b50610239610385366004613266565b610e42565b34801561039657600080fd5b506102396103a5366004613296565b610e8c565b3480156103b657600080fd5b506102396103c5366004613266565b610f94565b3480156103d657600080fd5b506102396103e53660046132e6565b610fe5565b3480156103f657600080fd5b506102f573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b5061023961115a565b34801561043357600080fd5b50610239610442366004613379565b61118f565b6102396104553660046133a7565b6113e4565b34801561046657600080fd5b5061035c611403565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046133ed565b611432565b3480156104d257600080fd5b50610239611600565b3480156104e757600080fd5b506102396104f6366004613472565b611632565b34801561050757600080fd5b50610260610516366004613266565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b5061023961057b3660046134d2565b6118be565b34801561058c57600080fd5b5061035c61040081565b3480156105a257600080fd5b5061035c600081565b3480156105b757600080fd5b506105f46040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c91906135a4565b34801561060d57600080fd5b5061023961061c3660046135b7565b6119dd565b34801561062d57600080fd5b5061023961063c3660046135b7565b611b0d565b34801561064d57600080fd5b5061023961065c366004613266565b611d1c565b34801561066d57600080fd5b5061035c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156106a157600080fd5b506102396106b0366004613655565b611d60565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610711576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6107b4611f6f565b6107bc6106b5565b86516000036107f7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610831576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160000361086b576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61040061087b6060830183613697565b6108869150856136fc565b106108bd576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108ca878785611ff0565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095f9190613736565b8c8c8c8c6040516109789998979695949392919061388b565b60405180910390a3506109aa60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b6109bb611f6f565b6109c36106b5565b85516000036109fe576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610a38576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610a486060830183613697565b610a539150856136fc565b10610a8a576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1091906138fe565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb9919061392c565b610bef576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610c3a959493929190613949565b60405180910390a35050610c6d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610cc2576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cca6106b5565b6001600160a01b038316610d0a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610d44576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610d7757506001600160a01b03831630145b15610dae576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db884846122f3565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610e09928a921690899088908890600401613995565b600060405180830381600087803b158015610e2357600080fd5b505af1158015610e37573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e7c816124c1565b610e8683836124cb565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ed9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ee16106b5565b6001600160a01b038216610f21576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa9b0a73c0000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063a9b0a73c90610f66908490600401613a06565b600060405180830381600087803b158015610f8057600080fd5b505af1158015610c6d573d6000803e3d6000fd5b6001600160a01b0381163314610fd6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe082826125b8565b505050565b610fed611f6f565b610ff56106b5565b8551600003611030576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460000361106a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61040061107a6060830183613697565b6110859150846136fc565b106110bc576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110da8573735b14bb79463307aacbed86daf3322b1e6226ab6122f3565b60008054604051869233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d92611129928c926001600160a01b0316918c919081908c908c9083908d9061388b565b60405180910390a3610c6d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611184816124c1565b61118c61267c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156111da5750825b905060008267ffffffffffffffff1660011480156111f75750303b155b905081158015611205575080155b1561123c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561129d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03871615806112ba57506001600160a01b038616155b156112f1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112f961270c565b61130161270c565b611309612714565b611311612724565b61131c6000876124cb565b506113477f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876124cb565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156109aa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6113ec612734565b6113f582612804565b6113ff828261280f565b5050565b600061140d612933565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61143a611f6f565b6114426106b5565b835160000361147d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036114b7576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114c38484612995565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611534573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115589190613736565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611596573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ba9190613736565b8a6040516115ce9796959493929190613a58565b60405180910390a350610e8660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61162a816124c1565b61118c612a03565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461167f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116876106b5565b6001600160a01b03841615806116a457506001600160a01b038216155b156116db576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611715576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab148061174857506001600160a01b03821630145b1561177f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af11580156117e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180b919061392c565b611841576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa9b0a73c0000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063a9b0a73c90611886908490600401613a06565b600060405180830381600087803b1580156118a057600080fd5b505af11580156118b4573d6000803e3d6000fd5b5050505050505050565b6118c6611f6f565b6118ce6106b5565b8351600003611909576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611943576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119618373735b14bb79463307aacbed86daf3322b1e6226ab6122f3565b60008054604051849233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d926119ac928a926001600160a01b0316918a9190819081908b90613a58565b60405180910390a3610e8660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a2a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a326106b5565b6001600160a01b0385161580611a4f57506001600160a01b038316155b15611a86576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90611ad39089908990899088908890600401613995565b600060405180830381600087803b158015611aed57600080fd5b505af1158015611b01573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611b5a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b626106b5565b6001600160a01b0385161580611b7f57506001600160a01b038316155b15611bb6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611bf0576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611c2357506001600160a01b03831630145b15611c5a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce6919061392c565b611a86576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611d56816124c1565b610e8683836125b8565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611dad576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db56106b5565b6001600160a01b0383161580611dd257506001600160a01b038116155b15611e09576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611e43576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611e7657506001600160a01b03811630145b15611ead576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f39919061392c565b610fe0576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611fea576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b815260040161202391815260200190565b6040805180830381865afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206391906138fe565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af11580156120e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210c919061392c565b612142576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af11580156121ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d2919061392c565b612208576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228c919061392c565b6122c2576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612363573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612387919061392c565b6123bd576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561241c57600080fd5b505af1158015612430573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114612481576040519150601f19603f3d011682016040523d82523d6000602084013e612486565b606091505b5050905080610fe0576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61118c8133612a7c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166125ae576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556125643390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a6565b60009150506107a6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156125ae576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a6565b612684612b09565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b610711612b64565b61271c612b64565b610711612bcb565b61272c612b64565b610711612c1c565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806127cd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610711576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113ff816124c1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612887575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261288491810190613736565b60015b6128cd576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612929576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016128c4565b610fe08383612c24565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610711576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006122c68383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fe9190613736565b611ff0565b612a0b6106b5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336126ee565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166113ff576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016128c4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610711576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610711576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bd3612b64565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6122cd612b64565b612c2d82612c7a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612c7257610fe08282612d22565b6113ff612d98565b806001600160a01b03163b600003612cc9576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016128c4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d3f9190613ac6565b600060405180830381855af49150503d8060008114612d7a576040519150601f19603f3d011682016040523d82523d6000602084013e612d7f565b606091505b5091509150612d8f858383612dd0565b95945050505050565b3415610711576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612de557612de082612e45565b6122c6565b8151158015612dfc57506001600160a01b0384163b155b15612e3e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016128c4565b50806122c6565b805115612e555780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612e9957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146122c657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612f0957600080fd5b813567ffffffffffffffff811115612f2357612f23612ec9565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612f8f57612f8f612ec9565b604052818152838201602001851015612fa757600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b038116811461118c57600080fd5b60008083601f840112612feb57600080fd5b50813567ffffffffffffffff81111561300357600080fd5b60208301915083602082850101111561301b57600080fd5b9250929050565b600060a0828403121561303457600080fd5b50919050565b600080600080600080600060c0888a03121561305557600080fd5b873567ffffffffffffffff81111561306c57600080fd5b6130788a828b01612ef8565b97505060208801359550604088013561309081612fc4565b9450606088013567ffffffffffffffff8111156130ac57600080fd5b6130b88a828b01612fd9565b9095509350506080880135915060a088013567ffffffffffffffff8111156130df57600080fd5b6130eb8a828b01613022565b91505092959891949750929550565b60008060008060008060a0878903121561311357600080fd5b863567ffffffffffffffff81111561312a57600080fd5b61313689828a01612ef8565b965050602087013561314781612fc4565b9450604087013567ffffffffffffffff81111561316357600080fd5b61316f89828a01612fd9565b90955093505060608701359150608087013567ffffffffffffffff81111561319657600080fd5b6131a289828a01613022565b9150509295509295509295565b60006060828403121561303457600080fd5b6000806000806000608086880312156131d957600080fd5b853567ffffffffffffffff8111156131f057600080fd5b6131fc888289016131af565b95505060208601359350604086013561321481612fc4565b9250606086013567ffffffffffffffff81111561323057600080fd5b61323c88828901612fd9565b969995985093965092949392505050565b60006020828403121561325f57600080fd5b5035919050565b6000806040838503121561327957600080fd5b82359150602083013561328b81612fc4565b809150509250929050565b600080604083850312156132a957600080fd5b82356132b481612fc4565b9150602083013567ffffffffffffffff8111156132d057600080fd5b6132dc858286016131af565b9150509250929050565b60008060008060008060a087890312156132ff57600080fd5b863567ffffffffffffffff81111561331657600080fd5b61332289828a01612ef8565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561334d57600080fd5b61335989828a01612fd9565b909450925050608087013567ffffffffffffffff81111561319657600080fd5b6000806040838503121561338c57600080fd5b823561339781612fc4565b9150602083013561328b81612fc4565b600080604083850312156133ba57600080fd5b82356133c581612fc4565b9150602083013567ffffffffffffffff8111156133e157600080fd5b6132dc85828601612ef8565b6000806000806080858703121561340357600080fd5b843567ffffffffffffffff81111561341a57600080fd5b61342687828801612ef8565b94505060208501359250604085013561343e81612fc4565b9150606085013567ffffffffffffffff81111561345a57600080fd5b61346687828801613022565b91505092959194509250565b6000806000806080858703121561348857600080fd5b843561349381612fc4565b93506020850135925060408501356134aa81612fc4565b9150606085013567ffffffffffffffff8111156134c657600080fd5b613466878288016131af565b600080600080608085870312156134e857600080fd5b843567ffffffffffffffff8111156134ff57600080fd5b61350b87828801612ef8565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561345a57600080fd5b60005b83811015613551578181015183820152602001613539565b50506000910152565b60008151808452613572816020860160208601613536565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122c6602083018461355a565b60008060008060008060a087890312156135d057600080fd5b863567ffffffffffffffff8111156135e757600080fd5b6135f389828a016131af565b965050602087013561360481612fc4565b945060408701359350606087013561361b81612fc4565b9250608087013567ffffffffffffffff81111561363757600080fd5b61364389828a01612fd9565b979a9699509497509295939492505050565b60008060006060848603121561366a57600080fd5b833561367581612fc4565b925060208401359150604084013561368c81612fc4565b809150509250925092565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136cc57600080fd5b83018035915067ffffffffffffffff8211156136e757600080fd5b60200191503681900382131561301b57600080fd5b808201808211156107a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561374857600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b801515811461118c57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126137db57600080fd5b830160208101925035905067ffffffffffffffff8111156137fb57600080fd5b80360382131561301b57600080fd5b6000813561381781612fc4565b6001600160a01b03168352602082013561383081613798565b15156020840152604082013561384581612fc4565b6001600160a01b0316604084015261386060608301836137a6565b60a0606086015261387560a08601828461374f565b6080948501359590940194909452509092915050565b610100815260006138a061010083018c61355a565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a08401526138d481878961374f565b90508460c084015282810360e08401526138ee818561380a565b9c9b505050505050505050505050565b6000806040838503121561391157600080fd5b825161391c81612fc4565b6020939093015192949293505050565b60006020828403121561393e57600080fd5b81516122c681613798565b60808152600061395c608083018861355a565b828103602084015261396f81878961374f565b90508460408401528281036060840152613989818561380a565b98975050505050505050565b6080815260006139a587886137a6565b606060808501526139ba60e08501828461374f565b91505060208801356139cb81612fc4565b6001600160a01b0390811660a085015260408981013560c086015290881660208501528301869052828103606084015261398981858761374f565b6020815260008235613a1781612fc4565b6001600160a01b03811660208401525060006020840135905080604084015250613a4460408401846137a6565b606080850152612d8f60808501828461374f565b61010081526000613a6d61010083018a61355a565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e085015250613ab8602082018561380a565b9a9950505050505050505050565b60008251613ad8818460208701613536565b919091019291505056fea26469706673582212208a1195fa27b507b0665fe6f159431f9da136fe9cc8494a10ec7c60c690298a3564736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_MESSAGE_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallOnRevertNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZETANotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e9261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e9061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea2646970667358221220d6295002fd18ec461c02f99613a4db51b8eca02e82f77afc8b206b54bd8363c364736f6c634300081a0033", } // GatewayZEVMABI is the input ABI used to generate the binding from. @@ -650,23 +650,23 @@ func (_GatewayZEVM *GatewayZEVMTransactorSession) DepositAndCall0(context ZConte return _GatewayZEVM.Contract.DepositAndCall0(&_GatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } -// DepositAndRevert is a paid mutator transaction binding the contract method 0x8fffac57. +// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. // -// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint256,bytes) revertContext) returns() +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() func (_GatewayZEVM *GatewayZEVMTransactor) DepositAndRevert(opts *bind.TransactOpts, zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _GatewayZEVM.contract.Transact(opts, "depositAndRevert", zrc20, amount, target, revertContext) } -// DepositAndRevert is a paid mutator transaction binding the contract method 0x8fffac57. +// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. // -// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint256,bytes) revertContext) returns() +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() func (_GatewayZEVM *GatewayZEVMSession) DepositAndRevert(zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _GatewayZEVM.Contract.DepositAndRevert(&_GatewayZEVM.TransactOpts, zrc20, amount, target, revertContext) } -// DepositAndRevert is a paid mutator transaction binding the contract method 0x8fffac57. +// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. // -// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint256,bytes) revertContext) returns() +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() func (_GatewayZEVM *GatewayZEVMTransactorSession) DepositAndRevert(zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _GatewayZEVM.Contract.DepositAndRevert(&_GatewayZEVM.TransactOpts, zrc20, amount, target, revertContext) } @@ -692,23 +692,23 @@ func (_GatewayZEVM *GatewayZEVMTransactorSession) Execute(context ZContext, zrc2 return _GatewayZEVM.Contract.Execute(&_GatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x34b1f5dc. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. // -// Solidity: function executeRevert(address target, (address,uint256,bytes) revertContext) returns() +// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() func (_GatewayZEVM *GatewayZEVMTransactor) ExecuteRevert(opts *bind.TransactOpts, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _GatewayZEVM.contract.Transact(opts, "executeRevert", target, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x34b1f5dc. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. // -// Solidity: function executeRevert(address target, (address,uint256,bytes) revertContext) returns() +// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() func (_GatewayZEVM *GatewayZEVMSession) ExecuteRevert(target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _GatewayZEVM.Contract.ExecuteRevert(&_GatewayZEVM.TransactOpts, target, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x34b1f5dc. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. // -// Solidity: function executeRevert(address target, (address,uint256,bytes) revertContext) returns() +// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() func (_GatewayZEVM *GatewayZEVMTransactorSession) ExecuteRevert(target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _GatewayZEVM.Contract.ExecuteRevert(&_GatewayZEVM.TransactOpts, target, revertContext) } diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go index fa84619a7..feb3900d9 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go @@ -58,8 +58,8 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMInboundTestMetaData contains all meta data concerning the GatewayZEVMInboundTest contract. var GatewayZEVMInboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfGasLimitIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfMessageSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZETAFailsIfMessageSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfGasLimitIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfMessageSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETA\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIsAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f2738061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c806385226c811161017b578063bed3e813116100d8578063e20c9f711161008c578063fa7626d411610071578063fa7626d41461042e578063fbc611c81461043b578063fdad0ad01461044357600080fd5b8063e20c9f711461041e578063ea37902f1461042657600080fd5b8063d5a44689116100bd578063d5a4468914610406578063dc749dd71461040e578063dde7e9671461041657600080fd5b8063bed3e813146103f6578063ceccfab3146103fe57600080fd5b8063b5508aa91161012f578063ba414fa611610114578063ba414fa6146103ce578063ba800c91146103e6578063ba9adeef146103ee57600080fd5b8063b5508aa9146103be578063b7f05836146103c657600080fd5b8063a90f314b11610160578063a90f314b146103a6578063ae9da088146103ae578063b0464fdc146103b657600080fd5b806385226c811461037c578063916a17c61461039157600080fd5b806339cbb457116102295780635006fd80116101dd5780636221b509116101c25780636221b5091461035757806366d9a9a01461035f57806383ababa91461037457600080fd5b80635006fd80146103475780635d72228f1461034f57600080fd5b80633f7286f41161020e5780633f7286f41461032f578063423a5874146103375780634ffab9de1461033f57600080fd5b806339cbb4571461031f5780633e5e3c231461032757600080fd5b80631e63d2b91161028057806321aeb18c1161026557806321aeb18c146102fa5780632ade38801461030257806336431b3f1461031757600080fd5b80631e63d2b9146102d45780631ed7831c146102dc57600080fd5b806304019fba146102b25780630a9254e4146102bc5780631238212c146102c457806318a4cfdc146102cc575b600080fd5b6102ba61044b565b005b6102ba6105c9565b6102ba611117565b6102ba6114ec565b6102ba61196d565b6102e4611d7a565b6040516102f1919061948b565b60405180910390f35b6102ba611ddc565b61030a611efc565b6040516102f19190619527565b6102ba61203e565b6102ba6121af565b6102e4612320565b6102e4612380565b6102ba6123e0565b6102ba612548565b6102ba61265c565b6102ba612b13565b6102ba612e65565b61036761308a565b6040516102f1919061968d565b6102ba61320c565b6103846132f0565b6040516102f1919061972b565b6103996133c0565b6040516102f191906197a2565b6102ba6134bb565b6102ba6135cf565b61039961375e565b610384613859565b6102ba613929565b6103d6613b08565b60405190151581526020016102f1565b6102ba613bdc565b6102ba613cf2565b6102ba613e82565b6102ba614012565b6102ba61435e565b6102ba614472565b6102ba614515565b6102e4614954565b6102ba6149b4565b601f546103d69060ff1681565b6102ba614d9b565b6102ba615117565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561052c57600080fd5b505af1158015610540573d6000803e3d6000fd5b5050602080546040516001600160a01b039091169350633b2839339250015b6040516020818303038152906040526001808560286040518663ffffffff1660e01b8152600401610594959493929190619975565b600060405180830381600087803b1580156105ae57600080fd5b505af11580156105c2573d6000803e3d6000fd5b5050505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161060f9061939e565b604051809103906000f08015801561062b573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602554915160248101939093529216604482015261070f919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc9550000000000000000000000000000000000000000000000000000000017905261528d565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa1580156107d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f591906199c6565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610839906193ab565b604051809103906000f080158015610855573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b1580156108f157600080fd5b505af1158015610905573d6000803e3d6000fd5b50505050600080600060405161091a906193b8565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610956573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556020546040516012936001938493600093919216906109ac906193c5565b6109bb969594939291906199ef565b604051809103906000f0801580156109d7573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610a6e57600080fd5b505af1158015610a82573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610aec57600080fd5b505af1158015610b00573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610b8057600080fd5b505af1158015610b94573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610be957600080fd5b505af1158015610bfd573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190619ae4565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190619ae4565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610d8957600080fd5b505af1158015610d9d573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610e1357600080fd5b505af1158015610e27573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebf9190619ae4565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f1157600080fd5b505af1158015610f25573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610f99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbd9190619ae4565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561101c57600080fd5b505af1158015611030573d6000803e3d6000fd5b50506040805160a08101825261032180825260016020808401918252838501928352845190810190945260008085526060840185905260808401528251602880549251151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0392831617929092178255915160298054919093167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179091559093509150602a906111079082619b7c565b5060808201518160030155905050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611168573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118c9190619c3b565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561120157600080fd5b505af1158015611215573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015611287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ab9190619ae4565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561138757600080fd5b505af115801561139b573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526114359288916001600160a01b0316908790600190602890600401619c54565b600060405180830381600087803b15801561144f57600080fd5b505af1158015611463573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156114b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114da9190619c3b565b90506114e683826152ac565b50505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561153d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115619190619c3b565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156115b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d79190619c3b565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156116e657600080fd5b505af11580156116fa573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f198184030181529082905260225461178b926001600160a01b03909116908c9060009081908b908290602890619cb5565b60405180910390a3602080546026546040516001600160a01b0392831693633b283933936117d39316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405288848660286040518663ffffffff1660e01b8152600401611807959493929190619975565b600060405180830381600087803b15801561182157600080fd5b505af1158015611835573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190619c3b565b90506118c26118bc600188619d46565b826152ac565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119379190619c3b565b905061194386826152ac565b611963611951866001619d59565b6027546001600160a01b0316316152ac565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156119be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e29190619c3b565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039092166084820152919250908190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611aed57600080fd5b505af1158015611b01573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216918b9189918491634d8943bb916004808201926020929091908290030181865afa158015611bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf79190619c3b565b8a896028604051611c0f989796959493929190619cb5565b60405180910390a3602080546026546040516001600160a01b039283169363048ae42c93611c579316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611cb3928a916001600160a01b03169089908890602890600401619c54565b600060405180830381600087803b158015611ccd57600080fd5b505af1158015611ce1573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d589190619c3b565b9050611d7283611d688888619d46565b6118bc9190619d46565b505050505050565b60606016805480602002602001604051908101604052809291908181526020018280548015611dd257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611db4575b5050505050905090565b604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611e4857600080fd5b505af1158015611e5c573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef191506034015b6040516020818303038152906040526000600160286040518563ffffffff1660e01b8152600401611ece9493929190619d6c565b600060405180830381600087803b158015611ee857600080fd5b505af11580156114e6573d6000803e3d6000fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561203557600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561201e578382906000526020600020018054611f9190619839565b80601f0160208091040260200160405190810160405280929190818152602001828054611fbd90619839565b801561200a5780601f10611fdf5761010080835404028352916020019161200a565b820191906000526020600020905b815481529060010190602001808311611fed57829003601f168201915b505050505081526020019060010190611f72565b505050508152505081526020019060010190611f20565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b5050602080546040516001600160a01b03909116935063048ae42c9250015b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352610594926001916001600160a01b03169087908390602890600401619c54565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561229057600080fd5b505af11580156122a4573d6000803e3d6000fd5b5050602080546040516001600160a01b039091169350631cb5ea759250015b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352610594926001600160a01b03909116908690600190602890600401619d9d565b60606018805480602002602001604051908101604052809291908181526020018280548015611dd2576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611db4575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611dd2576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611db4575050505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156124c157600080fd5b505af11580156124d5573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250633b2839339150603401604051602081830303815290604052600060018560286040518663ffffffff1660e01b8152600401610594959493929190619975565b6040805161020080825261022082019092526000916020820181803683370190505060408051610200808252610220820190925291925060208201818036833701905050602a906125999082619b7c565b50604051630618f58760e51b81527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561260657600080fd5b505af115801561261a573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c9150603401612152565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d19190619c3b565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612723573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127479190619c3b565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561283b57600080fd5b505af115801561284f573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af11580156128c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e59190619ae4565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561294457600080fd5b505af1158015612958573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250633b283933915060340160405160208183030381529060405288848660286040518663ffffffff1660e01b81526004016129c9959493929190619975565b600060405180830381600087803b1580156129e357600080fd5b505af11580156129f7573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6e9190619c3b565b9050612a7a86826152ac565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612acb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aef9190619c3b565b9050612afb86826152ac565b6027546119639086906001600160a01b0316316152ac565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b889190619c3b565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612bfd57600080fd5b505af1158015612c11573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015612c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca79190619ae4565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d0657600080fd5b505af1158015612d1a573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352612daf9287916001600160a01b031690602890600401619deb565b600060405180830381600087803b158015612dc957600080fd5b505af1158015612ddd573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e549190619c3b565b9050612e6082826152ac565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eda9190619c3b565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015612f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6b9190619ae4565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612fd057600080fd5b505af1158015612fe4573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052858460286040518563ffffffff1660e01b81526004016130539493929190619d6c565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561203557838290600052602060002090600202016040518060400160405290816000820180546130e190619839565b80601f016020809104026020016040519081016040528092919081815260200182805461310d90619839565b801561315a5780601f1061312f5761010080835404028352916020019161315a565b820191906000526020600020905b81548152906001019060200180831161313d57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156131f457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116131a15790505b505050505081525050815260200190600101906130ae565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561327857600080fd5b505af115801561328c573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7c0dcb5f000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637c0dcb5f9350611ece929160019116602860248401619deb565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561203557838290600052602060002001805461333390619839565b80601f016020809104026020016040519081016040528092919081815260200182805461335f90619839565b80156133ac5780601f10613381576101008083540402835291602001916133ac565b820191906000526020600020905b81548152906001019060200180831161338f57829003601f168201915b505050505081526020019060010190613314565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156120355760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156134a357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116134505790505b505050505081525050815260200190600101906133e4565b6040805161020080825261022082019092526000916020820181803683370190505060408051610200808252610220820190925291925060208201818036833701905050602a9061350c9082619b7c565b50604051630618f58760e51b81527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561357957600080fd5b505af115801561358d573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250633b283933915060340161055f565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527f60ee1247000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156136b057600080fd5b505af11580156136c4573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250631cb5ea75915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352610594926001600160a01b03909116908690600090602890600401619d9d565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156120355760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561384157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116137ee5790505b50505050508152505081526020019060010190613782565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561203557838290600052602060002001805461389c90619839565b80601f01602080910402602001604051908101604052809291908181526020018280546138c890619839565b80156139155780601f106138ea57610100808354040283529160200191613915565b820191906000526020600020905b8154815290600101906020018083116138f857829003601f168201915b50505050508152602001906001019061387d565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613a2c57600080fd5b505af1158015613a40573d6000803e3d6000fd5b505060215460255460265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf9060340160408051601f1981840301815290829052613ac0918690600190602890619e25565b60405180910390a3602080546026546040516001600160a01b0392831693631cb5ea75936122c39316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60085460009060ff1615613b20575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd59190619c3b565b1415905090565b604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613c4857600080fd5b505af1158015613c5c573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611ece926000916001600160a01b031690602890600401619deb565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352610594926000916001600160a01b0316908790600190602890600401619c54565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527f60ee1247000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613f6357600080fd5b505af1158015613f77573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352610594926001916001600160a01b0316908790600090602890600401619c54565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614063573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140879190619c3b565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156140f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141189190619ae4565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561418b57600080fd5b505af115801561419f573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b15801561420257600080fd5b505af1158015614216573d6000803e3d6000fd5b5050604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561428757600080fd5b505af115801561429b573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526143309287916001600160a01b031690602890600401619deb565b600060405180830381600087803b15801561434a57600080fd5b505af1158015611d72573d6000803e3d6000fd5b6040805161020080825261022082019092526000916020820181803683370190505060408051610200808252610220820190925291925060208201818036833701905050602a906143af9082619b7c565b50604051630618f58760e51b81527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561441c57600080fd5b505af1158015614430573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250631cb5ea7591506034016122c3565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156144de57600080fd5b505af11580156144f2573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911693506397a1cef1925001611e9a565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458a9190619c3b565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156145dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146009190619c3b565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561467e57600080fd5b505af1158015614692573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015614704573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147289190619ae4565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561478757600080fd5b505af115801561479b573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052878460286040518563ffffffff1660e01b815260040161480a9493929190619d6c565b600060405180830381600087803b15801561482457600080fd5b505af1158015614838573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561488b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148af9190619c3b565b90506148bb85826152ac565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561490c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149309190619c3b565b905061493c85826152ac565b6027546130819085906001600160a01b0316316152ac565b60606015805480602002602001604051908101604052809291908181526020018280548015611dd2576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611db4575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a299190619c3b565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a9f9190619c3b565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614b3a57600080fd5b505af1158015614b4e573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f1981840301815290829052602254614bdd926001600160a01b03909116908b9060009081908190602890619e64565b60405180910390a3602080546026546040516001600160a01b03928316936397a1cef193614c259316910160609190911b6bffffffffffffffffffffffff1916815260140190565b604051602081830303815290604052878460286040518563ffffffff1660e01b8152600401614c579493929190619d6c565b600060405180830381600087803b158015614c7157600080fd5b505af1158015614c85573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cfc9190619c3b565b9050614d0c6118bc600187619d46565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d819190619c3b565b9050614d8d85826152ac565b613081611951856001619d59565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e109190619c3b565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614ea157600080fd5b505af1158015614eb5573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015614f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fac9190619c3b565b60006028604051614fc39796959493929190619e64565b60405180910390a3602080546026546040516001600160a01b0392831693637c0dcb5f9361500b9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526150639287916001600160a01b031690602890600401619deb565b600060405180830381600087803b15801561507d57600080fd5b505af1158015615091573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156150e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151089190619c3b565b9050612e606118bc8484619d46565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa158015615168573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061518c9190619c3b565b6021549091506001600160a01b031663a9059cbb6101236151ae600185619d46565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015615211573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152359190619ae4565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e09060240161426d565b60006152976193d2565b6152a284848361532b565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561531757600080fd5b505afa158015611d72573d6000803e3d6000fd5b60008061533885846153a6565b905061539b6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615386929190619ed2565b604051602081830303815290604052856153b2565b9150505b9392505050565b600061539f83836153e0565b60c081015151600090156153d6576153cf84848460c001516153fb565b905061539f565b6153cf84846155a1565b60006153ec838361568c565b61539f838360200151846153b2565b60008061540661569c565b90506000615414868361576f565b9050600061542b8260600151836020015185615c15565b9050600061543b83838989615e27565b9050600061544882616ca4565b602081015181519192509060030b156154bb57898260400151604051602001615472929190619ef4565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526154b291600401619f75565b60405180910390fd5b60006154fe6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616e73565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90615551908490600401619f75565b602060405180830381865afa15801561556e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061559291906199c6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906155f6908790600401619f75565b600060405180830381865afa158015615613573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261563b919081019061a041565b90506000615669828560405160200161565592919061a076565b604051602081830303815290604052617073565b90506001600160a01b0381166152a257848460405160200161547292919061a0a5565b61569882826000617086565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061572390849060040161a150565b600060405180830381865afa158015615740573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615768919081019061a197565b9250505090565b6157a16040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506157ec6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6157f585617189565b602082015260006158058661756e565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615847573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261586f919081019061a197565b86838560200151604051602001615889949392919061a1e0565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906158e1908590600401619f75565b600060405180830381865afa1580156158fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615926919081019061a197565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061596e90849060040161a2e4565b602060405180830381865afa15801561598b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906159af9190619ae4565b6159c45781604051602001615472919061a336565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615a0990849060040161a3c8565b600060405180830381865afa158015615a26573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a4e919081019061a197565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615a9590849060040161a41a565b602060405180830381865afa158015615ab2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615ad69190619ae4565b15615b6b576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615b2090849060040161a41a565b600060405180830381865afa158015615b3d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b65919081019061a197565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615b90919061a46c565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615bbc92919061a4d8565b600060405180830381865afa158015615bd9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615c01919081019061a197565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615c315790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615c9157615c9161a4fd565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615ce557615ce561a4fd565b602002602001018190525084604051602001615d01919061a52c565b60405160208183030381529060405281600281518110615d2357615d2361a4fd565b602002602001018190525082604051602001615d3f919061a598565b60405160208183030381529060405281600381518110615d6157615d6161a4fd565b60200260200101819052506000615d7782616ca4565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615e0890604080518082018252600080825260209182015281518083019092528451825280850190820152906177f1565b615e1d5785604051602001615472919061a5d9565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615e77565b511590565b615feb57826020015115615f33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016154b2565b8260c0015115615feb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016154b2565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161600457905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061605f9061a66a565b935060ff16815181106160745761607461a4fd565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016160c5919061a689565b6040516020818303038152906040528282806160e09061a66a565b935060ff16815181106160f5576160f561a4fd565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806161429061a66a565b935060ff16815181106161575761615761a4fd565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806161a49061a66a565b935060ff16815181106161b9576161b961a4fd565b602002602001018190525087602001518282806161d59061a66a565b935060ff16815181106161ea576161ea61a4fd565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806162379061a66a565b935060ff168151811061624c5761624c61a4fd565b6020908102919091010152875182826162648161a66a565b935060ff16815181106162795761627961a4fd565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806162c69061a66a565b935060ff16815181106162db576162db61a4fd565b60200260200101819052506162ef46617852565b82826162fa8161a66a565b935060ff168151811061630f5761630f61a4fd565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061635c9061a66a565b935060ff16815181106163715761637161a4fd565b6020026020010181905250868282806163899061a66a565b935060ff168151811061639e5761639e61a4fd565b60209081029190910101528551156164c55760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826163ef8161a66a565b935060ff16815181106164045761640461a4fd565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616454908990600401619f75565b600060405180830381865afa158015616471573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616499919081019061a197565b82826164a48161a66a565b935060ff16815181106164b9576164b961a4fd565b60200260200101819052505b8460200151156165955760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261650e8161a66a565b935060ff16815181106165235761652361a4fd565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806165709061a66a565b935060ff16815181106165855761658561a4fd565b602002602001018190525061675c565b6165cd615e728660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6166605760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826166108161a66a565b935060ff16815181106166255761662561a4fd565b60200260200101819052508460a00151604051602001616645919061a52c565b6040516020818303038152906040528282806165709061a66a565b8460c001511580156166a35750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526166a190511590565b155b1561675c5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826166e78161a66a565b935060ff16815181106166fc576166fc61a4fd565b6020026020010181905250616710886178f2565b604051602001616720919061a52c565b60405160208183030381529060405282828061673b9061a66a565b935060ff16815181106167505761675061a4fd565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261679090511590565b6168255760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826167d38161a66a565b935060ff16815181106167e8576167e861a4fd565b602002602001018190525084604001518282806168049061a66a565b935060ff16815181106168195761681961a4fd565b60200260200101819052505b6060850151156169465760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261686e8161a66a565b935060ff16815181106168835761688361a4fd565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156168f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261691a919081019061a197565b82826169258161a66a565b935060ff168151811061693a5761693a61a4fd565b60200260200101819052505b60e085015151156169ed5760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826169908161a66a565b935060ff16815181106169a5576169a561a4fd565b60200260200101819052506169c18560e0015160000151617852565b82826169cc8161a66a565b935060ff16815181106169e1576169e161a4fd565b60200260200101819052505b60e08501516020015115616a975760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616a3a8161a66a565b935060ff1681518110616a4f57616a4f61a4fd565b6020026020010181905250616a6b8560e0015160200151617852565b8282616a768161a66a565b935060ff1681518110616a8b57616a8b61a4fd565b60200260200101819052505b60e08501516040015115616b415760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282616ae48161a66a565b935060ff1681518110616af957616af961a4fd565b6020026020010181905250616b158560e0015160400151617852565b8282616b208161a66a565b935060ff1681518110616b3557616b3561a4fd565b60200260200101819052505b60e08501516060015115616beb5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616b8e8161a66a565b935060ff1681518110616ba357616ba361a4fd565b6020026020010181905250616bbf8560e0015160600151617852565b8282616bca8161a66a565b935060ff1681518110616bdf57616bdf61a4fd565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616c0957616c09619b06565b604051908082528060200260200182016040528015616c3c57816020015b6060815260200190600190039081616c275790505b50905060005b8260ff168160ff161015616c9557838160ff1681518110616c6557616c6561a4fd565b6020026020010151828260ff1681518110616c8257616c8261a4fd565b6020908102919091010152600101616c42565b5093505050505b949350505050565b616ccb6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91616d519186910161a6f4565b600060405180830381865afa158015616d6e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616d96919081019061a197565b90506000616da486836183e1565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401616dd4919061972b565b6000604051808303816000875af1158015616df3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616e1b919081019061a73b565b805190915060030b15801590616e345750602081015151155b8015616e435750604081015151155b15615e1d5781600081518110616e5b57616e5b61a4fd565b6020026020010151604051602001615472919061a7f1565b60606000616ea88560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616edf9082905b90618536565b1561703c576000616f5c82616f5684616f50616f228a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061855d565b906185bf565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616fc0908290618536565b1561702a57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617027905b8290618644565b90505b6170338161866a565b9250505061539f565b821561705557848460405160200161547292919061a9dd565b505060408051602081019091526000815261539f565b509392505050565b6000808251602084016000f09392505050565b8160a001511561709557505050565b60006170a28484846186d3565b905060006170af82616ca4565b602081015181519192509060030b15801561714b5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261714b90604080518082018252600080825260209182015281518083019092528451825280850190820152616ed9565b1561715857505050505050565b60408201515115617178578160400151604051602001615472919061aa84565b80604051602001615472919061aae2565b606060006171be8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617223905b82906177f1565b1561729257604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261539f9061728d908390618c6e565b61866a565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172f4905b8290618cf8565b6001036173c157604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261735a90617020565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261539f9061728d905b8390618644565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174209061721c565b1561755757604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617488908390618d92565b90506000816001835161749b9190619d46565b815181106174ab576174ab61a4fd565b6020026020010151905061754e61728d6175216040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618c6e565b95945050505050565b82604051602001615472919061ab4d565b50919050565b606060006175a38360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506176059061721c565b156176135761539f8161866a565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617672906172ed565b6001036176dc57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261539f9061728d906173ba565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261773b9061721c565b1561755757604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906177a3908390618d92565b90506001815111156177df5780600282516177be9190619d46565b815181106177ce576177ce61a4fd565b602002602001015192505050919050565b5082604051602001615472919061ab4d565b805182516000911115617806575060006152a6565b8151835160208501516000929161781c91619d59565b6178269190619d46565b90508260200151810361783d5760019150506152a6565b82516020840151819020912014905092915050565b6060600061785f83618e37565b600101905060008167ffffffffffffffff81111561787f5761787f619b06565b6040519080825280601f01601f1916602001820160405280156178a9576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846178b357509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161797e905b8290618f19565b156179be57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a1d90617977565b15617a5d57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617abc90617977565b15617afc57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b5b90617977565b80617bc05750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bc090617977565b15617c0057505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c5f90617977565b80617cc45750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cc490617977565b15617d0457505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d6390617977565b80617dc85750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dc890617977565b15617e0857505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e6790617977565b80617ecc5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ecc90617977565b15617f0c57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f6b90617977565b15617fab57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261800a90617977565b1561804a57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180a990617977565b156180e957505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261814890617977565b1561818857505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526181e790617977565b1561822757505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261828690617977565b806182eb5750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182eb90617977565b1561832b57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261838a90617977565b156183ca57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151615472929060200161ac2b565b60608060005b845181101561846c57818582815181106184035761840361a4fd565b602002602001015160405160200161841c92919061a076565b60405160208183030381529060405291506001855161843b9190619d46565b81146184645781604051602001618452919061ad94565b60405160208183030381529060405291505b6001016183e7565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161848557905050905083816000815181106184b0576184b061a4fd565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106185045761850461a4fd565b602002602001018190525081816002815181106185235761852361a4fd565b6020908102919091010152949350505050565b60208083015183518351928401516000936185549291849190618f2d565b14159392505050565b6040805180820190915260008082526020820152600061858f846000015185602001518560000151866020015161903e565b90508360200151816185a19190619d46565b845185906185b0908390619d46565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156185e45750816152a6565b602080830151908401516001911461860b5750815160208481015190840151829020919020145b801561863c57825184518590618622908390619d46565b9052508251602085018051618638908390619d59565b9052505b509192915050565b604080518082019091526000808252602082015261866383838361915e565b5092915050565b60606000826000015167ffffffffffffffff81111561868b5761868b619b06565b6040519080825280601f01601f1916602001820160405280156186b5576020820181803683370190505b50905060006020820190506186638185602001518660000151619209565b606060006186df61569c565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816186fc57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806187579061a66a565b935060ff168151811061876c5761876c61a4fd565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016187bd919061add5565b6040516020818303038152906040528282806187d89061a66a565b935060ff16815181106187ed576187ed61a4fd565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061883a9061a66a565b935060ff168151811061884f5761884f61a4fd565b60200260200101819052508260405160200161886b919061a598565b6040516020818303038152906040528282806188869061a66a565b935060ff168151811061889b5761889b61a4fd565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806188e89061a66a565b935060ff16815181106188fd576188fd61a4fd565b60200260200101819052506189128784619283565b828261891d8161a66a565b935060ff16815181106189325761893261a4fd565b6020908102919091010152855151156189de5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826189848161a66a565b935060ff16815181106189995761899961a4fd565b60200260200101819052506189b2866000015184619283565b82826189bd8161a66a565b935060ff16815181106189d2576189d261a4fd565b60200260200101819052505b856080015115618a4c5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282618a278161a66a565b935060ff1681518110618a3c57618a3c61a4fd565b6020026020010181905250618ab2565b8415618ab25760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282618a918161a66a565b935060ff1681518110618aa657618aa661a4fd565b60200260200101819052505b60408601515115618b4e5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618afc8161a66a565b935060ff1681518110618b1157618b1161a4fd565b60200260200101819052508560400151828280618b2d9061a66a565b935060ff1681518110618b4257618b4261a4fd565b60200260200101819052505b856060015115618bb85760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618b978161a66a565b935060ff1681518110618bac57618bac61a4fd565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618bd657618bd6619b06565b604051908082528060200260200182016040528015618c0957816020015b6060815260200190600190039081618bf45790505b50905060005b8260ff168160ff161015618c6257838160ff1681518110618c3257618c3261a4fd565b6020026020010151828260ff1681518110618c4f57618c4f61a4fd565b6020908102919091010152600101618c0f565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618c935750816152a6565b81518351602085015160009291618ca991619d59565b618cb39190619d46565b60208401519091506001908214618cd4575082516020840151819020908220145b8015618cef57835185518690618ceb908390619d46565b9052505b50929392505050565b6000808260000151618d1c856000015186602001518660000151876020015161903e565b618d269190619d59565b90505b83516020850151618d3a9190619d59565b81116186635781618d4a8161ae1a565b9250508260000151618d81856020015183618d659190619d46565b8651618d719190619d46565b838660000151876020015161903e565b618d8b9190619d59565b9050618d29565b60606000618da08484618cf8565b618dab906001619d59565b67ffffffffffffffff811115618dc357618dc3619b06565b604051908082528060200260200182016040528015618df657816020015b6060815260200190600190039081618de15790505b50905060005b815181101561706b57618e1261728d8686618644565b828281518110618e2457618e2461a4fd565b6020908102919091010152600101618dfc565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618e80577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618eac576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618eca57662386f26fc10000830492506010015b6305f5e1008310618ee2576305f5e100830492506008015b6127108310618ef657612710830492506004015b60648310618f08576064830492506002015b600a83106152a65760010192915050565b6000618f2583836192c3565b159392505050565b6000808584116190345760208411618fe05760008415618f78576001618f54866020619d46565b618f5f90600861ae34565b618f6a90600261af32565b618f749190619d46565b1990505b8351811685618f878989619d59565b618f919190619d46565b805190935082165b818114618fcb57878411618fb35787945050505050616c9c565b83618fbd8161af3e565b945050828451169050618f99565b618fd58785619d59565b945050505050616c9c565b838320618fed8588619d46565b618ff79087619d59565b91505b8582106190325784822080820361901f576190158684619d59565b9350505050616c9c565b61902a600184619d46565b925050618ffa565b505b5092949350505050565b6000838186851161914957602085116190f8576000851561908a576001619066876020619d46565b61907190600861ae34565b61907c90600261af32565b6190869190619d46565b1990505b8451811660008761909b8b8b619d59565b6190a59190619d46565b855190915083165b8281146190ea578186106190d2576190c58b8b619d59565b9650505050505050616c9c565b856190dc8161ae1a565b9650508386511690506190ad565b859650505050505050616c9c565b508383206000905b61910a8689619d46565b8211619147578583208082036191265783945050505050616c9c565b619131600185619d59565b935050818061913f9061ae1a565b925050619100565b505b6191538787619d59565b979650505050505050565b60408051808201909152600080825260208201526000619190856000015186602001518660000151876020015161903e565b6020808701805191860191909152519091506191ac9082619d46565b8352845160208601516191bf9190619d59565b81036191ce5760008552619200565b835183516191dc9190619d59565b855186906191eb908390619d46565b90525083516191fa9082619d59565b60208601525b50909392505050565b602081106192415781518352619220602084619d59565b925061922d602083619d59565b915061923a602082619d46565b9050619209565b6000198115619270576001619257836020619d46565b6192639061010061af32565b61926d9190619d46565b90505b9151835183169219169190911790915250565b60606000619291848461576f565b80516020808301516040519394506192ab9390910161af55565b60405160208183030381529060405291505092915050565b81518151600091908111156192d6575081515b6020808501519084015160005b8381101561938f578251825180821461935f57600019602087101561933e57600184619310896020619d46565b61931a9190619d59565b61932590600861ae34565b61933090600261af32565b61933a9190619d46565b1990505b818116838216818103911461935c5797506152a69650505050505050565b50505b61936a602086619d59565b9450619377602085619d59565b935050506020816193889190619d59565b90506192e3565b5084518651615e1d919061afad565b610b678061afce83390190565b6106288061bb3583390190565b61106f8061c15d83390190565b6120728061d1cc83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161941561941a565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016194156040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156194cc5783516001600160a01b03168352602093840193909201916001016194a5565b509095945050505050565b60005b838110156194f25781810151838201526020016194da565b50506000910152565b600081518084526195138160208601602086016194d7565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619623577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015619609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526195f38486516194fb565b60209586019590945092909201916001016195b9565b50919750505060209485019492909201915060010161954f565b50929695505050505050565b600081518084526020840193506020830160005b828110156196835781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101619643565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619623577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526196f960408801826194fb565b9050602082015191508681036020880152619714818361962f565b9650505060209384019391909101906001016196b5565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619623577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261978d8583516194fb565b94506020938401939190910190600101619753565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619623577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152619823604087018261962f565b95505060209384019391909101906001016197ca565b600181811c9082168061984d57607f821691505b602082108103617568577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a06060850152600081546198d081619839565b8060a088015260018216600081146198ef57600181146199295761995d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b890101935061995d565b84600052602060002060005b838110156199545781548a820160c00152600190910190602001619935565b890160c0019450505b50505060038401546080860152809250505092915050565b60a08152600061998860a08301886194fb565b86602084015285604084015282810360608401526199a681866194fb565b905082810360808401526199ba8185619886565b98975050505050505050565b6000602082840312156199d857600080fd5b81516001600160a01b038116811461539f57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619aa9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152619aca60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215619af657600080fd5b8151801515811461539f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f821115612e6057806000526020600020601f840160051c81016020851015619b5c5750805b601f840160051c820191505b818110156105c25760008155600101619b68565b815167ffffffffffffffff811115619b9657619b96619b06565b619baa81619ba48454619839565b84619b35565b6020601f821160018114619bde5760008315619bc65750848201515b600019600385901b1c1916600184901b1784556105c2565b600084815260208120601f198516915b82811015619c0e5787850151825560209485019460019092019101619bee565b5084821015619c2c5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215619c4d57600080fd5b5051919050565b60c081526000619c6760c08301896194fb565b8760208401526001600160a01b03871660408401528281036060840152619c8e81876194fb565b905084608084015282810360a0840152619ca88185619886565b9998505050505050505050565b61010081526000619cca61010083018b6194fb565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a0840152619cfd81876194fb565b90508460c084015282810360e08401526155928185619886565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156152a6576152a6619d17565b808201808211156152a6576152a6619d17565b608081526000619d7f60808301876194fb565b85602084015284604084015282810360608401526191538185619886565b60a081526000619db060a08301886194fb565b6001600160a01b03871660208401528281036040840152619dd181876194fb565b905084606084015282810360808401526199ba8185619886565b608081526000619dfe60808301876194fb565b8560208401526001600160a01b038516604084015282810360608401526191538185619886565b608081526000619e3860808301876194fb565b8281036020840152619e4a81876194fb565b905084604084015282810360608401526191538185619886565b61010081526000619e7961010083018a6194fb565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e085015250619ec46020820185619886565b9a9950505050505050505050565b6001600160a01b0383168152604060208201526000616c9c60408301846194fb565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619f2c81601a8501602088016194d7565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351619f6981601c8401602088016194d7565b01601c01949350505050565b60208152600061539f60208301846194fb565b6040516060810167ffffffffffffffff81118282101715619fab57619fab619b06565b60405290565b60008067ffffffffffffffff841115619fcc57619fcc619b06565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619ffb57619ffb619b06565b60405283815290508082840185101561a01357600080fd5b61706b8460208301856194d7565b600082601f83011261a03257600080fd5b61539f83835160208501619fb1565b60006020828403121561a05357600080fd5b815167ffffffffffffffff81111561a06a57600080fd5b6152a28482850161a021565b6000835161a0888184602088016194d7565b83519083019061a09c8183602088016194d7565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a0dd81601a8501602088016194d7565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a11a8160338401602088016194d7565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061539f60808301846194fb565b60006020828403121561a1a957600080fd5b815167ffffffffffffffff81111561a1c057600080fd5b8201601f8101841361a1d157600080fd5b6152a284825160208401619fb1565b6000855161a1f2818460208a016194d7565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a22c816001840160208a016194d7565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a26a8160028401602089016194d7565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a2ac8160028401602088016194d7565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a2f760408301846194fb565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a36e81601f8501602087016194d7565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a3db60408301846194fb565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a42d60408301846194fb565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a4a48160148501602087016194d7565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061a4eb60408301856194fb565b828103602084015261539b81856194fb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a5648160018501602087016194d7565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a5aa8184602087016194d7565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a65d81604b8501602087016194d7565b91909101604b0192915050565b600060ff821660ff810361a6805761a680619d17565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a6e78160298501602087016194d7565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061539f60808301846194fb565b60006020828403121561a74d57600080fd5b815167ffffffffffffffff81111561a76457600080fd5b82016060818503121561a77657600080fd5b61a77e619f88565b81518060030b811461a78f57600080fd5b8152602082015167ffffffffffffffff81111561a7ab57600080fd5b61a7b78682850161a021565b602083015250604082015167ffffffffffffffff81111561a7d757600080fd5b61a7e38682850161a021565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a84f8160218501602087016194d7565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161aa3b8160218501602088016194d7565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161aa7881602e8401602088016194d7565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a6e78160298501602087016194d7565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161ab408160228501602087016194d7565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161ab8581600e8501602087016194d7565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161ac638160188501602088016194d7565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161aca081601c8401602088016194d7565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ada68184602087016194d7565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161ae0d81601c8501602087016194d7565b91909101601c0192915050565b6000600019820361ae2d5761ae2d619d17565b5060010190565b80820281158282048414176152a6576152a6619d17565b6001815b600184111561ae865780850481111561ae6a5761ae6a619d17565b600184161561ae7857908102905b60019390931c92800261ae4f565b935093915050565b60008261ae9d575060016152a6565b8161aeaa575060006152a6565b816001811461aec0576002811461aeca5761aee6565b60019150506152a6565b60ff84111561aedb5761aedb619d17565b50506001821b6152a6565b5060208310610133831016604e8410600b841016171561af09575081810a6152a6565b61af16600019848461ae4b565b806000190482111561af2a5761af2a619d17565b029392505050565b600061539f838361ae8e565b60008161af4d5761af4d619d17565b506000190190565b6000835161af678184602088016194d7565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161afa18160018401602088016194d7565b01600101949350505050565b818103600083128015838313168383128216171561866357618663619d1756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b506106098061001f6000396000f3fe60806040526004361061002a5760003560e01c8063a9b0a73c14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7fecf5d82c48083c30b9ba8e8536ba84ae739724bdd8a42c47c1304f5437ade807816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c18284018461038d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610483565b6100ff60408a0160208b016104ef565b8960400135338660405161011896959493929190610511565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b166020820152600080602084013590508060408401525060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261031557600080fd5b830160208101903567ffffffffffffffff81111561033257600080fd5b80360382131561034157600080fd5b60608085015261035560808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561039f57600080fd5b813567ffffffffffffffff8111156103b657600080fd5b8201601f810184136103c757600080fd5b803567ffffffffffffffff8111156103e1576103e161035e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561044d5761044d61035e565b60405281815282820160200186101561046557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104b857600080fd5b83018035915067ffffffffffffffff8211156104d357600080fd5b6020019150368190038213156104e857600080fd5b9250929050565b60006020828403121561050157600080fd5b61050a8261017d565b9392505050565b60a08152600061052560a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b8181101561058f57602081870181015184830182015201610573565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122010486f94f449fc99b4a8d453c3a51c73eb1de12f7d8756d65324b00797fda02e64736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212203b8a61523cf0636d20451911ef652f516b2b6dc27f59d12ba2a96c4c5f1861dc64736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220168706bfe4a84c85ed4ebe20ac54a102d098a04a9e4de76ab325fc3e21f4048764736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfGasLimitIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfMessageSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfGasLimitIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfMessageSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfMessageSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIsAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f4968061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c806385226c811161012a578063ba9adeef116100bd578063dde7e9671161008c578063fa7626d411610071578063fa7626d41461037f578063fbc611c81461038c578063fdad0ad01461039457600080fd5b8063dde7e9671461036f578063e20c9f711461037757600080fd5b8063ba9adeef1461034f578063bed3e81314610357578063ceccfab31461035f578063d5a446891461036757600080fd5b8063b5508aa9116100f9578063b5508aa91461031f578063b7f0583614610327578063ba414fa61461032f578063ba800c911461034757600080fd5b806385226c81146102e5578063916a17c6146102fa578063ae9da0881461030f578063b0464fdc1461031757600080fd5b806339cbb457116101bd5780635006fd801161018c5780636221b509116101715780636221b509146102c057806366d9a9a0146102c857806383ababa9146102dd57600080fd5b80635006fd80146102b05780635d72228f146102b857600080fd5b806339cbb457146102905780633e5e3c23146102985780633f7286f4146102a05780634ffab9de146102a857600080fd5b806320dee15f116101f957806320dee15f14610263578063264b524c1461026b5780632ade38801461027357806336431b3f1461028857600080fd5b80630a9254e41461022b5780631238212c146102355780631e63d2b91461023d5780631ed7831c14610245575b600080fd5b61023361039c565b005b610233610eec565b6102336112c1565b61024d6116d4565b60405161025a9190619611565b60405180910390f35b610233611736565b610233611b13565b61027b611d4e565b60405161025a91906196ad565b610233611e90565b61023361204f565b61024d6121d9565b61024d612239565b610233612299565b610233612536565b6102336129f7565b610233612d49565b6102d0612f6e565b60405161025a9190619813565b6102336130f0565b6102ed6131ed565b60405161025a91906198b1565b6103026132bd565b60405161025a9190619928565b6102336133b8565b610302613560565b6102ed61365b565b61023361372b565b61033761390a565b604051901515815260200161025a565b6102336139de565b610233613b0d565b610233613cb6565b610233613e5f565b6102336141c4565b610233614461565b61024d6148a0565b601f546103379060ff1681565b610233614900565b610233614c7c565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680549091166112341790556040516103e290619524565b604051809103906000f0801580156103fe573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260255491516024810193909352921660448201526104e2919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614e0b565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa1580156105a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c891906199bf565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161060c90619531565b604051809103906000f080158015610628573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b1580156106c457600080fd5b505af11580156106d8573d6000803e3d6000fd5b5050505060008060006040516106ed9061953e565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610729573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560205460405160129360019384936000939192169061077f9061954b565b61078e969594939291906199e8565b604051809103906000f0801580156107aa573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b1580156108bf57600080fd5b505af11580156108d3573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561095357600080fd5b505af1158015610967573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156109bc57600080fd5b505af11580156109d0573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190619add565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afd9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610be657600080fd5b505af1158015610bfa573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190619add565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ce457600080fd5b505af1158015610cf8573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d909190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b50506040805160a0810182526103218082526000602080840182815284860193845285519182019095528181526060840181905260808401919091528251602880549551151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009096166001600160a01b0392831617959095178555915160298054919093167fffffffffffffffffffffffff00000000000000000000000000000000000000009190911617909155909350909150602a90610edc9082619bc2565b5060808201518160030155905050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f619190619c81565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110809190619add565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561115c57600080fd5b505af1158015611170573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261120a9288916001600160a01b0316908790600190602890600401619d89565b600060405180830381600087803b15801561122457600080fd5b505af1158015611238573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af9190619c81565b90506112bb8382614e2a565b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113369190619c81565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039092166084820152919250908190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561144157600080fd5b505af1158015611455573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216918b9189918491634d8943bb916004808201926020929091908290030181865afa158015611527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154b9190619c81565b8a896028604051611563989796959493929190619dea565b60405180910390a3602080546026546040516001600160a01b039283169363048ae42c936115ab9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611607928a916001600160a01b03169089908890602890600401619d89565b600060405180830381600087803b15801561162157600080fd5b505af1158015611635573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac9190619c81565b90506116cc836116bc8888619e7b565b6116c69190619e7b565b82614e2a565b505050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561172c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161170e575b5050505050905090565b601f54604080518082018252601a81527f476174657761795a45564d55706772616465546573742e736f6c00000000000060208083019190915282519081019092526000825260255461179b936001600160a01b036101009091048116939116614ea9565b601f546021546025546040516370a0823160e01b81526001600160a01b03918216600482015261010090930481169260019260009216906370a0823190602401602060405180830381865afa1580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190619c81565b6040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0385166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156118a957600080fd5b505af11580156118bd573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d355789060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b49190619c81565b600060286040516119cb9796959493929190619e8e565b60405180910390a360265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03841690637c0dcb5f9060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611a5f9287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015611a7957600080fd5b505af1158015611a8d573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b049190619c81565b90506112bb6116c68484619e7b565b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216926397d340f5926004808401938290030181865afa158015611b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b959190619c81565b611ba0906001619f36565b67ffffffffffffffff811115611bb857611bb8619aff565b6040519080825280601f01601f191660200182016040528015611be2576020820181803683370190505b50602a90611bf09082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611c7657600080fd5b505af1158015611c8a573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611d20926002916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015611d3a57600080fd5b505af11580156112bb573d6000803e3d6000fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611e8757600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611e70578382906000526020600020018054611de390619b2e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0f90619b2e565b8015611e5c5780601f10611e3157610100808354040283529160200191611e5c565b820191906000526020600020905b815481529060010190602001808311611e3f57829003601f168201915b505050505081526020019060010190611dc4565b505050508152505081526020019060010190611d72565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611f8a57600080fd5b505af1158015611f9e573d6000803e3d6000fd5b5050602080546040516001600160a01b03909116935063048ae42c9250015b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001916001600160a01b03169087908390602890600401619d89565b600060405180830381600087803b15801561203457600080fd5b505af1158015612048573d6000803e3d6000fd5b5050505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561214957600080fd5b505af115801561215d573d6000803e3d6000fd5b5050602080546040516001600160a01b039091169350631cb5ea759250015b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001600160a01b03909116908690600190602890600401619f49565b6060601880548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516000936002936001600160a01b0316926397d340f592600480830193928290030181865afa1580156122fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123209190619c81565b61232a9190619fa3565b67ffffffffffffffff81111561234257612342619aff565b6040519080825280601f01601f19166020018201604052801561236c576020820181803683370190505b5060208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b03909216926397d340f5926004808401938290030181865afa1580156123d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f59190619c81565b6123ff9190619fa3565b61240a906001619f36565b67ffffffffffffffff81111561242257612422619aff565b6040519080825280601f01601f19166020018201604052801561244c576020820181803683370190505b50602a9061245a9082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156124e057600080fd5b505af11580156124f4573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c9150603401611fbd565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ab9190619c81565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156125fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126219190619c81565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561271557600080fd5b505af1158015612729573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561279b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127bf9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561281e57600080fd5b505af1158015612832573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250633b283933915060340160405160208183030381529060405288848660286040518663ffffffff1660e01b81526004016128a3959493929190619fde565b600060405180830381600087803b1580156128bd57600080fd5b505af11580156128d1573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129489190619c81565b90506129548682614e2a565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190619c81565b90506129d58682614e2a565b6027546129ed9086906001600160a01b031631614e2a565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6c9190619c81565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ae157600080fd5b505af1158015612af5573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8b9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612bea57600080fd5b505af1158015612bfe573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352612c939287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015612cad57600080fd5b505af1158015612cc1573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d389190619c81565b9050612d448282614e2a565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbe9190619c81565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015612e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4f9190619add565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612eb457600080fd5b505af1158015612ec8573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052858460286040518563ffffffff1660e01b8152600401612f37949392919061a023565b600060405180830381600087803b158015612f5157600080fd5b505af1158015612f65573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611e875783829060005260206000209060020201604051806040016040529081600082018054612fc590619b2e565b80601f0160208091040260200160405190810160405280929190818152602001828054612ff190619b2e565b801561303e5780601f106130135761010080835404028352916020019161303e565b820191906000526020600020905b81548152906001019060200180831161302157829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156130d857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116130855790505b50505050508152505081526020019060010190612f92565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561317557600080fd5b505af1158015613189573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7c0dcb5f000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637c0dcb5f9350611d20929160019116602860248401619efc565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611e8757838290600052602060002001805461323090619b2e565b80601f016020809104026020016040519081016040528092919081815260200182805461325c90619b2e565b80156132a95780601f1061327e576101008083540402835291602001916132a9565b820191906000526020600020905b81548152906001019060200180831161328c57829003601f168201915b505050505081526020019060010190613211565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611e875760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156133a057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161334d5790505b505050505081525050815260200190600101906132e1565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f60ee1247000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134b257600080fd5b505af11580156134c6573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250631cb5ea75915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001600160a01b03909116908690600090602890600401619f49565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611e875760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561364357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135f05790505b50505050508152505081526020019060010190613584565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611e8757838290600052602060002001805461369e90619b2e565b80601f01602080910402602001604051908101604052809291908181526020018280546136ca90619b2e565b80156137175780601f106136ec57610100808354040283529160200191613717565b820191906000526020600020905b8154815290600101906020018083116136fa57829003601f168201915b50505050508152602001906001019061367f565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561382e57600080fd5b505af1158015613842573d6000803e3d6000fd5b505060215460255460265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf9060340160408051601f19818403018152908290526138c291869060019060289061a054565b60405180910390a3602080546026546040516001600160a01b0392831693631cb5ea759361217c9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60085460009060ff1615613922575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156139b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d79190619c81565b1415905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613a6357600080fd5b505af1158015613a77573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611d20926000916001600160a01b031690602890600401619efc565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613c0757600080fd5b505af1158015613c1b573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926000916001600160a01b0316908790600190602890600401619d89565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f60ee1247000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613db057600080fd5b505af1158015613dc4573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001916001600160a01b0316908790600090602890600401619d89565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed49190619c81565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190619add565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613fd857600080fd5b505af1158015613fec573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b15801561404f57600080fd5b505af1158015614063573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156140ed57600080fd5b505af1158015614101573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526141969287916001600160a01b031690602890600401619efc565b600060405180830381600087803b1580156141b057600080fd5b505af11580156116cc573d6000803e3d6000fd5b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516000936002936001600160a01b0316926397d340f592600480830193928290030181865afa158015614227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424b9190619c81565b6142559190619fa3565b67ffffffffffffffff81111561426d5761426d619aff565b6040519080825280601f01601f191660200182016040528015614297576020820181803683370190505b5060208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b03909216926397d340f5926004808401938290030181865afa1580156142fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143209190619c81565b61432a9190619fa3565b614335906001619f36565b67ffffffffffffffff81111561434d5761434d619aff565b6040519080825280601f01601f191660200182016040528015614377576020820181803683370190505b50602a906143859082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561440b57600080fd5b505af115801561441f573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250631cb5ea75915060340161217c565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156144b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d69190619c81565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454c9190619c81565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156145ca57600080fd5b505af11580156145de573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015614650573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146749190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156146d357600080fd5b505af11580156146e7573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052878460286040518563ffffffff1660e01b8152600401614756949392919061a023565b600060405180830381600087803b15801561477057600080fd5b505af1158015614784573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156147d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fb9190619c81565b90506148078582614e2a565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061487c9190619c81565b90506148888582614e2a565b602754612f659085906001600160a01b031631614e2a565b6060601580548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149759190619c81565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614a0657600080fd5b505af1158015614a1a573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015614aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b119190619c81565b60006028604051614b289796959493929190619e8e565b60405180910390a3602080546026546040516001600160a01b0392831693637c0dcb5f93614b709316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352614bc89287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015614be257600080fd5b505af1158015614bf6573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6d9190619c81565b9050612d446116c68484619e7b565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa158015614ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cf19190619c81565b6021549091506001600160a01b031663a9059cbb610123614d13600185619e7b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015614d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d9a9190619add565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024016140d3565b6000614e15619558565b614e20848483614ebe565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614e9557600080fd5b505afa1580156116cc573d6000803e3d6000fd5b614eb1619558565b6120488585858486614f39565b600080614ecb8584615039565b9050614f2e6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f1992919061a093565b60405160208183030381529060405285615045565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015614fab57600080fd5b505af1925050508015614fbc575060015b614fd157614fcc87878787615073565b612f65565b614fdd87878787615073565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561501857600080fd5b505af115801561502c573d6000803e3d6000fd5b5050505050505050505050565b6000614f32838361508c565b60c081015151600090156150695761506284848460c001516150a7565b9050614f32565b615062848461524d565b600061507f8483615338565b9050612048858285615344565b6000615098838361570e565b614f3283836020015184615045565b6000806150b261571e565b905060006150c086836157f1565b905060006150d78260600151836020015185615c97565b905060006150e783838989615ea9565b905060006150f482616d26565b602081015181519192509060030b156151675789826040015160405160200161511e92919061a0b5565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261515e9160040161a136565b60405180910390fd5b60006151aa6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616ef5565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906151fd90849060040161a136565b602060405180830381865afa15801561521a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061523e91906199bf565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906152a290879060040161a136565b600060405180830381865afa1580156152bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152e7919081019061a202565b90506000615315828560405160200161530192919061a237565b6040516020818303038152906040526170f5565b90506001600160a01b038116614e2057848460405160200161511e92919061a266565b60006150988383617108565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa1580156153e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906154049190619c81565b9050806155ab57600061541686617114565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506154a1905b6040805180820182526000808252602091820152815180830190925284518252808501908201529061720c565b806154ad575060008451115b15615530576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906154f9908890889060040161a093565b600060405180830381600087803b15801561551357600080fd5b505af1158015615527573d6000803e3d6000fd5b505050506155a5565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561558c57600080fd5b505af11580156155a0573d6000803e3d6000fd5b505050505b50612048565b8060006155b782617114565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061561990615474565b80615625575060008551115b156156aa576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90615673908a908a908a9060040161a311565b600060405180830381600087803b15801561568d57600080fd5b505af11580156156a1573d6000803e3d6000fd5b50505050612f65565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b15801561501857600080fd5b61571a82826000617220565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906157a590849060040161a342565b600060405180830381865afa1580156157c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157ea919081019061a389565b9250505090565b6158236040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061586e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61587785617323565b6020820152600061588786617708565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156158c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158f1919081019061a389565b8683856020015160405160200161590b949392919061a3d2565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061596390859060040161a136565b600060405180830381865afa158015615980573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526159a8919081019061a389565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906159f090849060040161a4d6565b602060405180830381865afa158015615a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615a319190619add565b615a46578160405160200161511e919061a528565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615a8b90849060040161a5ba565b600060405180830381865afa158015615aa8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ad0919081019061a389565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615b1790849060040161a60c565b602060405180830381865afa158015615b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615b589190619add565b15615bed576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615ba290849060040161a60c565b600060405180830381865afa158015615bbf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615be7919081019061a389565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615c12919061a65e565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615c3e92919061a6ca565b600060405180830381865afa158015615c5b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615c83919081019061a389565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615cb35790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615d1357615d1361a6ef565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615d6757615d6761a6ef565b602002602001018190525084604051602001615d83919061a71e565b60405160208183030381529060405281600281518110615da557615da561a6ef565b602002602001018190525082604051602001615dc1919061a78a565b60405160208183030381529060405281600381518110615de357615de361a6ef565b60200260200101819052506000615df982616d26565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615e8a906040805180820182526000808252602091820152815180830190925284518252808501908201529061798b565b615e9f578560405160200161511e919061a7cb565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615ef9565b511590565b61606d57826020015115615fb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161515e565b8260c001511561606d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161515e565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161608657905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806160e19061a85c565b935060ff16815181106160f6576160f661a6ef565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616147919061a87b565b6040516020818303038152906040528282806161629061a85c565b935060ff16815181106161775761617761a6ef565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806161c49061a85c565b935060ff16815181106161d9576161d961a6ef565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806162269061a85c565b935060ff168151811061623b5761623b61a6ef565b602002602001018190525087602001518282806162579061a85c565b935060ff168151811061626c5761626c61a6ef565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806162b99061a85c565b935060ff16815181106162ce576162ce61a6ef565b6020908102919091010152875182826162e68161a85c565b935060ff16815181106162fb576162fb61a6ef565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806163489061a85c565b935060ff168151811061635d5761635d61a6ef565b6020026020010181905250616371466179ec565b828261637c8161a85c565b935060ff16815181106163915761639161a6ef565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806163de9061a85c565b935060ff16815181106163f3576163f361a6ef565b60200260200101819052508682828061640b9061a85c565b935060ff16815181106164205761642061a6ef565b60209081029190910101528551156165475760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826164718161a85c565b935060ff16815181106164865761648661a6ef565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906164d690899060040161a136565b600060405180830381865afa1580156164f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261651b919081019061a389565b82826165268161a85c565b935060ff168151811061653b5761653b61a6ef565b60200260200101819052505b8460200151156166175760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826165908161a85c565b935060ff16815181106165a5576165a561a6ef565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806165f29061a85c565b935060ff16815181106166075761660761a6ef565b60200260200101819052506167de565b61664f615ef48660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6166e25760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826166928161a85c565b935060ff16815181106166a7576166a761a6ef565b60200260200101819052508460a001516040516020016166c7919061a71e565b6040516020818303038152906040528282806165f29061a85c565b8460c0015115801561672557506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261672390511590565b155b156167de5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826167698161a85c565b935060ff168151811061677e5761677e61a6ef565b602002602001018190525061679288617a8c565b6040516020016167a2919061a71e565b6040516020818303038152906040528282806167bd9061a85c565b935060ff16815181106167d2576167d261a6ef565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261681290511590565b6168a75760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826168558161a85c565b935060ff168151811061686a5761686a61a6ef565b602002602001018190525084604001518282806168869061a85c565b935060ff168151811061689b5761689b61a6ef565b60200260200101819052505b6060850151156169c85760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826168f08161a85c565b935060ff16815181106169055761690561a6ef565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616974573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261699c919081019061a389565b82826169a78161a85c565b935060ff16815181106169bc576169bc61a6ef565b60200260200101819052505b60e08501515115616a6f5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616a128161a85c565b935060ff1681518110616a2757616a2761a6ef565b6020026020010181905250616a438560e00151600001516179ec565b8282616a4e8161a85c565b935060ff1681518110616a6357616a6361a6ef565b60200260200101819052505b60e08501516020015115616b195760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616abc8161a85c565b935060ff1681518110616ad157616ad161a6ef565b6020026020010181905250616aed8560e00151602001516179ec565b8282616af88161a85c565b935060ff1681518110616b0d57616b0d61a6ef565b60200260200101819052505b60e08501516040015115616bc35760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282616b668161a85c565b935060ff1681518110616b7b57616b7b61a6ef565b6020026020010181905250616b978560e00151604001516179ec565b8282616ba28161a85c565b935060ff1681518110616bb757616bb761a6ef565b60200260200101819052505b60e08501516060015115616c6d5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616c108161a85c565b935060ff1681518110616c2557616c2561a6ef565b6020026020010181905250616c418560e00151606001516179ec565b8282616c4c8161a85c565b935060ff1681518110616c6157616c6161a6ef565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616c8b57616c8b619aff565b604051908082528060200260200182016040528015616cbe57816020015b6060815260200190600190039081616ca95790505b50905060005b8260ff168160ff161015616d1757838160ff1681518110616ce757616ce761a6ef565b6020026020010151828260ff1681518110616d0457616d0461a6ef565b6020908102919091010152600101616cc4565b5093505050505b949350505050565b616d4d6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91616dd39186910161a8e6565b600060405180830381865afa158015616df0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616e18919081019061a389565b90506000616e26868361857b565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401616e5691906198b1565b6000604051808303816000875af1158015616e75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616e9d919081019061a92d565b805190915060030b15801590616eb65750602081015151155b8015616ec55750604081015151155b15615e9f5781600081518110616edd57616edd61a6ef565b602002602001015160405160200161511e919061a9e3565b60606000616f2a8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616f619082905b906186d0565b156170be576000616fde82616fd884616fd2616fa48a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906186f7565b90618759565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506170429082906186d0565b156170ac57604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170a9905b82906187de565b90505b6170b581618804565b92505050614f32565b82156170d757848460405160200161511e92919061abcf565b5050604080516020810190915260008152614f32565b509392505050565b6000808251602084016000f09392505050565b61571a82826001617220565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691617189919061ac76565b600060405180830381855afa9150503d80600081146171c4576040519150601f19603f3d011682016040523d82523d6000602084013e6171c9565b606091505b50915091508180156171dc575060208151115b156171f55780806020019051810190616d1e919061a389565b505060408051602081019091526000815292915050565b6000617218838361886d565b159392505050565b8160a001511561722f57505050565b600061723c848484618948565b9050600061724982616d26565b602081015181519192509060030b1580156172e55750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172e590604080518082018252600080825260209182015281518083019092528451825280850190820152616f5b565b156172f257505050505050565b6040820151511561731257816040015160405160200161511e919061ac92565b8060405160200161511e919061acf0565b606060006173588360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506173bd905b829061798b565b1561742c57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f3290617427908390618ee3565b618804565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261748e905b8290618f6d565b60010361755b57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174f4906170a2565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f3290617427905b83906187de565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ba906173b6565b156176f157604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617622908390619007565b9050600081600183516176359190619e7b565b815181106176455761764561a6ef565b602002602001015190506176e86174276176bb6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618ee3565b95945050505050565b8260405160200161511e919061ad5b565b50919050565b6060600061773d8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061779f906173b6565b156177ad57614f3281618804565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261780c90617487565b60010361787657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f329061742790617554565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178d5906173b6565b156176f157604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061793d908390619007565b90506001815111156179795780600282516179589190619e7b565b815181106179685761796861a6ef565b602002602001015192505050919050565b508260405160200161511e919061ad5b565b8051825160009111156179a057506000614e24565b815183516020850151600092916179b691619f36565b6179c09190619e7b565b9050826020015181036179d7576001915050614e24565b82516020840151819020912014905092915050565b606060006179f9836190ac565b600101905060008167ffffffffffffffff811115617a1957617a19619aff565b6040519080825280601f01601f191660200182016040528015617a43576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617a4d57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617b18905b829061720c565b15617b5857505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bb790617b11565b15617bf757505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c5690617b11565b15617c9657505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cf590617b11565b80617d5a5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d5a90617b11565b15617d9a57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617df990617b11565b80617e5e5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5e90617b11565b15617e9e57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617efd90617b11565b80617f625750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f6290617b11565b15617fa257505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261800190617b11565b806180665750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261806690617b11565b156180a657505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261810590617b11565b1561814557505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526181a490617b11565b156181e457505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261824390617b11565b1561828357505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182e290617b11565b1561832257505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261838190617b11565b156183c157505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261842090617b11565b806184855750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261848590617b11565b156184c557505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261852490617b11565b1561856457505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161511e929060200161ae39565b60608060005b8451811015618606578185828151811061859d5761859d61a6ef565b60200260200101516040516020016185b692919061a237565b6040516020818303038152906040529150600185516185d59190619e7b565b81146185fe57816040516020016185ec919061afa2565b60405160208183030381529060405291505b600101618581565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161861f579050509050838160008151811061864a5761864a61a6ef565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061869e5761869e61a6ef565b602002602001018190525081816002815181106186bd576186bd61a6ef565b6020908102919091010152949350505050565b60208083015183518351928401516000936186ee929184919061918e565b14159392505050565b60408051808201909152600080825260208201526000618729846000015185602001518560000151866020015161929f565b905083602001518161873b9190619e7b565b8451859061874a908390619e7b565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561877e575081614e24565b60208083015190840151600191146187a55750815160208481015190840151829020919020145b80156187d6578251845185906187bc908390619e7b565b90525082516020850180516187d2908390619f36565b9052505b509192915050565b60408051808201909152600080825260208201526187fd8383836193bf565b5092915050565b60606000826000015167ffffffffffffffff81111561882557618825619aff565b6040519080825280601f01601f19166020018201604052801561884f576020820181803683370190505b50905060006020820190506187fd818560200151866000015161946a565b8151815160009190811115618880575081515b6020808501519084015160005b8381101561893957825182518082146189095760001960208710156188e8576001846188ba896020619e7b565b6188c49190619f36565b6188cf90600861afe3565b6188da90600261b0e1565b6188e49190619e7b565b1990505b8181168382168181039114618906579750614e249650505050505050565b50505b618914602086619f36565b9450618921602085619f36565b935050506020816189329190619f36565b905061888d565b5084518651615e9f919061b0ed565b6060600061895461571e565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161897157905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806189cc9061a85c565b935060ff16815181106189e1576189e161a6ef565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618a32919061b10d565b604051602081830303815290604052828280618a4d9061a85c565b935060ff1681518110618a6257618a6261a6ef565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618aaf9061a85c565b935060ff1681518110618ac457618ac461a6ef565b602002602001018190525082604051602001618ae0919061a78a565b604051602081830303815290604052828280618afb9061a85c565b935060ff1681518110618b1057618b1061a6ef565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618b5d9061a85c565b935060ff1681518110618b7257618b7261a6ef565b6020026020010181905250618b8787846194e4565b8282618b928161a85c565b935060ff1681518110618ba757618ba761a6ef565b602090810291909101015285515115618c535760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282618bf98161a85c565b935060ff1681518110618c0e57618c0e61a6ef565b6020026020010181905250618c278660000151846194e4565b8282618c328161a85c565b935060ff1681518110618c4757618c4761a6ef565b60200260200101819052505b856080015115618cc15760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282618c9c8161a85c565b935060ff1681518110618cb157618cb161a6ef565b6020026020010181905250618d27565b8415618d275760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282618d068161a85c565b935060ff1681518110618d1b57618d1b61a6ef565b60200260200101819052505b60408601515115618dc35760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618d718161a85c565b935060ff1681518110618d8657618d8661a6ef565b60200260200101819052508560400151828280618da29061a85c565b935060ff1681518110618db757618db761a6ef565b60200260200101819052505b856060015115618e2d5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618e0c8161a85c565b935060ff1681518110618e2157618e2161a6ef565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618e4b57618e4b619aff565b604051908082528060200260200182016040528015618e7e57816020015b6060815260200190600190039081618e695790505b50905060005b8260ff168160ff161015618ed757838160ff1681518110618ea757618ea761a6ef565b6020026020010151828260ff1681518110618ec457618ec461a6ef565b6020908102919091010152600101618e84565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618f08575081614e24565b81518351602085015160009291618f1e91619f36565b618f289190619e7b565b60208401519091506001908214618f49575082516020840151819020908220145b8015618f6457835185518690618f60908390619e7b565b9052505b50929392505050565b6000808260000151618f91856000015186602001518660000151876020015161929f565b618f9b9190619f36565b90505b83516020850151618faf9190619f36565b81116187fd5781618fbf8161b152565b9250508260000151618ff6856020015183618fda9190619e7b565b8651618fe69190619e7b565b838660000151876020015161929f565b6190009190619f36565b9050618f9e565b606060006190158484618f6d565b619020906001619f36565b67ffffffffffffffff81111561903857619038619aff565b60405190808252806020026020018201604052801561906b57816020015b60608152602001906001900390816190565790505b50905060005b81518110156170ed5761908761742786866187de565b8282815181106190995761909961a6ef565b6020908102919091010152600101619071565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106190f5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619121576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061913f57662386f26fc10000830492506010015b6305f5e1008310619157576305f5e100830492506008015b612710831061916b57612710830492506004015b6064831061917d576064830492506002015b600a8310614e245760010192915050565b600080858411619295576020841161924157600084156191d95760016191b5866020619e7b565b6191c090600861afe3565b6191cb90600261b0e1565b6191d59190619e7b565b1990505b83518116856191e88989619f36565b6191f29190619e7b565b805190935082165b81811461922c578784116192145787945050505050616d1e565b8361921e8161b16c565b9450508284511690506191fa565b6192368785619f36565b945050505050616d1e565b83832061924e8588619e7b565b6192589087619f36565b91505b85821061929357848220808203619280576192768684619f36565b9350505050616d1e565b61928b600184619e7b565b92505061925b565b505b5092949350505050565b600083818685116193aa576020851161935957600085156192eb5760016192c7876020619e7b565b6192d290600861afe3565b6192dd90600261b0e1565b6192e79190619e7b565b1990505b845181166000876192fc8b8b619f36565b6193069190619e7b565b855190915083165b82811461934b57818610619333576193268b8b619f36565b9650505050505050616d1e565b8561933d8161b152565b96505083865116905061930e565b859650505050505050616d1e565b508383206000905b61936b8689619e7b565b82116193a8578583208082036193875783945050505050616d1e565b619392600185619f36565b93505081806193a09061b152565b925050619361565b505b6193b48787619f36565b979650505050505050565b604080518082019091526000808252602082015260006193f1856000015186602001518660000151876020015161929f565b60208087018051918601919091525190915061940d9082619e7b565b8352845160208601516194209190619f36565b810361942f5760008552619461565b8351835161943d9190619f36565b8551869061944c908390619e7b565b905250835161945b9082619f36565b60208601525b50909392505050565b602081106194a25781518352619481602084619f36565b925061948e602083619f36565b915061949b602082619e7b565b905061946a565b60001981156194d15760016194b8836020619e7b565b6194c49061010061b0e1565b6194ce9190619e7b565b90505b9151835183169219169190911790915250565b606060006194f284846157f1565b805160208083015160405193945061950c9390910161b183565b60405160208183030381529060405291505092915050565b610b678061b1dc83390190565b61063d8061bd4383390190565b61106f8061c38083390190565b6120728061d3ef83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161959b6195a0565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161959b6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156196525783516001600160a01b031683526020938401939092019160010161962b565b509095945050505050565b60005b83811015619678578181015183820152602001619660565b50506000910152565b6000815180845261969981602086016020860161965d565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561978f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352619779848651619681565b602095860195909450929092019160010161973f565b5091975050506020948501949290920191506001016196d5565b50929695505050505050565b600081518084526020840193506020830160005b828110156198095781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016197c9565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261987f6040880182619681565b905060208201519150868103602088015261989a81836197b5565b96505050602093840193919091019060010161983b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619913858351619681565b945060209384019391909101906001016198d9565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526199a960408701826197b5565b9550506020938401939190910190600101619950565b6000602082840312156199d157600080fd5b81516001600160a01b0381168114614f3257600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619aa2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152619ac360c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215619aef57600080fd5b81518015158114614f3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c90821680619b4257607f821691505b602082108103617702577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115612d4457806000526020600020601f840160051c81016020851015619ba25750805b601f840160051c820191505b818110156120485760008155600101619bae565b815167ffffffffffffffff811115619bdc57619bdc619aff565b619bf081619bea8454619b2e565b84619b7b565b6020601f821160018114619c245760008315619c0c5750848201515b600019600385901b1c1916600184901b178455612048565b600084815260208120601f198516915b82811015619c545787850151825560209485019460019092019101619c34565b5084821015619c725786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215619c9357600080fd5b5051919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a0606085015260008154619ce481619b2e565b8060a08801526001821660008114619d035760018114619d3d57619d71565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b8901019350619d71565b84600052602060002060005b83811015619d685781548a820160c00152600190910190602001619d49565b890160c0019450505b50505060038401546080860152809250505092915050565b60c081526000619d9c60c0830189619681565b8760208401526001600160a01b03871660408401528281036060840152619dc38187619681565b905084608084015282810360a0840152619ddd8185619c9a565b9998505050505050505050565b61010081526000619dff61010083018b619681565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a0840152619e328187619681565b90508460c084015282810360e084015261523e8185619c9a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614e2457614e24619e4c565b61010081526000619ea361010083018a619681565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e085015250619eee6020820185619c9a565b9a9950505050505050505050565b608081526000619f0f6080830187619681565b8560208401526001600160a01b038516604084015282810360608401526193b48185619c9a565b80820180821115614e2457614e24619e4c565b60a081526000619f5c60a0830188619681565b6001600160a01b03871660208401528281036040840152619f7d8187619681565b90508460608401528281036080840152619f978185619c9a565b98975050505050505050565b600082619fd9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60a081526000619ff160a0830188619681565b866020840152856040840152828103606084015261a00f8186619681565b90508281036080840152619f978185619c9a565b60808152600061a0366080830187619681565b85602084015284604084015282810360608401526193b48185619c9a565b60808152600061a0676080830187619681565b828103602084015261a0798187619681565b905084604084015282810360608401526193b48185619c9a565b6001600160a01b0383168152604060208201526000616d1e6040830184619681565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a0ed81601a85016020880161965d565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a12a81601c84016020880161965d565b01601c01949350505050565b602081526000614f326020830184619681565b6040516060810167ffffffffffffffff8111828210171561a16c5761a16c619aff565b60405290565b60008067ffffffffffffffff84111561a18d5761a18d619aff565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a1bc5761a1bc619aff565b60405283815290508082840185101561a1d457600080fd5b6170ed84602083018561965d565b600082601f83011261a1f357600080fd5b614f328383516020850161a172565b60006020828403121561a21457600080fd5b815167ffffffffffffffff81111561a22b57600080fd5b614e208482850161a1e2565b6000835161a24981846020880161965d565b83519083019061a25d81836020880161965d565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a29e81601a85016020880161965d565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a2db81603384016020880161965d565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006176e86060830184619681565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f326080830184619681565b60006020828403121561a39b57600080fd5b815167ffffffffffffffff81111561a3b257600080fd5b8201601f8101841361a3c357600080fd5b614e208482516020840161a172565b6000855161a3e4818460208a0161965d565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a41e816001840160208a0161965d565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a45c81600284016020890161965d565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a49e81600284016020880161965d565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a4e96040830184619681565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a56081601f85016020870161965d565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a5cd6040830184619681565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a61f6040830184619681565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a69681601485016020870161965d565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061a6dd6040830185619681565b8281036020840152614f2e8185619681565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a75681600185016020870161965d565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a79c81846020870161965d565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a84f81604b85016020870161965d565b91909101604b0192915050565b600060ff821660ff810361a8725761a872619e4c565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a8d981602985016020870161965d565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f326080830184619681565b60006020828403121561a93f57600080fd5b815167ffffffffffffffff81111561a95657600080fd5b82016060818503121561a96857600080fd5b61a97061a149565b81518060030b811461a98157600080fd5b8152602082015167ffffffffffffffff81111561a99d57600080fd5b61a9a98682850161a1e2565b602083015250604082015167ffffffffffffffff81111561a9c957600080fd5b61a9d58682850161a1e2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161aa4181602185016020870161965d565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161ac2d81602185016020880161965d565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161ac6a81602e84016020880161965d565b01602e01949350505050565b6000825161ac8881846020870161965d565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a8d981602985016020870161965d565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161ad4e81602285016020870161965d565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161ad9381600e85016020870161965d565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161ae7181601885016020880161965d565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161aeae81601c84016020880161965d565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161afb481846020870161965d565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417614e2457614e24619e4c565b6001815b600184111561b0355780850481111561b0195761b019619e4c565b600184161561b02757908102905b60019390931c92800261affe565b935093915050565b60008261b04c57506001614e24565b8161b05957506000614e24565b816001811461b06f576002811461b0795761b095565b6001915050614e24565b60ff84111561b08a5761b08a619e4c565b50506001821b614e24565b5060208310610133831016604e8410600b841016171561b0b8575081810a614e24565b61b0c5600019848461affa565b806000190482111561b0d95761b0d9619e4c565b029392505050565b6000614f32838361b03d565b81810360008312801583831316838312821617156187fd576187fd619e4c565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b14581601c85016020870161965d565b91909101601c0192915050565b6000600019820361b1655761b165619e4c565b5060010190565b60008161b17b5761b17b619e4c565b506000190190565b6000835161b19581846020880161965d565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161b1cf81600184016020880161965d565b0160010194935050505056fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c8063660b9de014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c1828401846103a2565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610498565b6100ff60408a0160208b01610504565b8960400135338660405161011896959493929190610526565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b1660208201526000602083013567ffffffffffffffff81168082146102ed57600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261032a57600080fd5b830160208101903567ffffffffffffffff81111561034757600080fd5b80360382131561035657600080fd5b60608085015261036a60808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103b457600080fd5b813567ffffffffffffffff8111156103cb57600080fd5b8201601f810184136103dc57600080fd5b803567ffffffffffffffff8111156103f6576103f6610373565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561046257610462610373565b60405281815282820160200186101561047a57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104cd57600080fd5b83018035915067ffffffffffffffff8211156104e857600080fd5b6020019150368190038213156104fd57600080fd5b9250929050565b60006020828403121561051657600080fd5b61051f8261017d565b9392505050565b60a08152600061053a60a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105a457602081870181015184830182015201610588565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122002711b914cfa85869597d761ee7a81ae9c55589f2201dbf0c65836b421bff96564736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201bc2c2e5533a7390cd5c9f230b641bee17c3057fdf7a0f92b4302cd8cea1ce6764736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a26469706673582212204a2268975f088dea0c025591efb2b0ff98ddc080ba9d663d379e21327fd63def64736f6c634300081a0033", } // GatewayZEVMInboundTestABI is the input ABI used to generate the binding from. @@ -706,67 +706,25 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestCall return _GatewayZEVMInboundTest.Contract.TestCallFailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) } -// TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x04019fba. +// TestUpgradeAndWithdrawZRC20 is a paid mutator transaction binding the contract method 0x20dee15f. // -// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress") +// Solidity: function testUpgradeAndWithdrawZRC20() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestUpgradeAndWithdrawZRC20(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testUpgradeAndWithdrawZRC20") } -// TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x04019fba. +// TestUpgradeAndWithdrawZRC20 is a paid mutator transaction binding the contract method 0x20dee15f. // -// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) +// Solidity: function testUpgradeAndWithdrawZRC20() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestUpgradeAndWithdrawZRC20() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestUpgradeAndWithdrawZRC20(&_GatewayZEVMInboundTest.TransactOpts) } -// TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0x04019fba. +// TestUpgradeAndWithdrawZRC20 is a paid mutator transaction binding the contract method 0x20dee15f. // -// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) -} - -// TestWithdrawAndCallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x423a5874. -// -// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsZero() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawAndCallZETAFailsIfAmountIsZero(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawAndCallZETAFailsIfAmountIsZero") -} - -// TestWithdrawAndCallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x423a5874. -// -// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsZero() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawAndCallZETAFailsIfAmountIsZero() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) -} - -// TestWithdrawAndCallZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x423a5874. -// -// Solidity: function testWithdrawAndCallZETAFailsIfAmountIsZero() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawAndCallZETAFailsIfAmountIsZero() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) -} - -// TestWithdrawAndCallZETAFailsIfMessageSizeExceeded is a paid mutator transaction binding the contract method 0xa90f314b. -// -// Solidity: function testWithdrawAndCallZETAFailsIfMessageSizeExceeded() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawAndCallZETAFailsIfMessageSizeExceeded(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawAndCallZETAFailsIfMessageSizeExceeded") -} - -// TestWithdrawAndCallZETAFailsIfMessageSizeExceeded is a paid mutator transaction binding the contract method 0xa90f314b. -// -// Solidity: function testWithdrawAndCallZETAFailsIfMessageSizeExceeded() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawAndCallZETAFailsIfMessageSizeExceeded() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZETAFailsIfMessageSizeExceeded(&_GatewayZEVMInboundTest.TransactOpts) -} - -// TestWithdrawAndCallZETAFailsIfMessageSizeExceeded is a paid mutator transaction binding the contract method 0xa90f314b. -// -// Solidity: function testWithdrawAndCallZETAFailsIfMessageSizeExceeded() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawAndCallZETAFailsIfMessageSizeExceeded() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZETAFailsIfMessageSizeExceeded(&_GatewayZEVMInboundTest.TransactOpts) +// Solidity: function testUpgradeAndWithdrawZRC20() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestUpgradeAndWithdrawZRC20() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestUpgradeAndWithdrawZRC20(&_GatewayZEVMInboundTest.TransactOpts) } // TestWithdrawAndCallZRC20FailsIfAmountIsZero is a paid mutator transaction binding the contract method 0xba9adeef. @@ -853,48 +811,6 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWith return _GatewayZEVMInboundTest.Contract.TestWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) } -// TestWithdrawZETA is a paid mutator transaction binding the contract method 0xea37902f. -// -// Solidity: function testWithdrawZETA() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawZETA(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawZETA") -} - -// TestWithdrawZETA is a paid mutator transaction binding the contract method 0xea37902f. -// -// Solidity: function testWithdrawZETA() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawZETA() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawZETA(&_GatewayZEVMInboundTest.TransactOpts) -} - -// TestWithdrawZETA is a paid mutator transaction binding the contract method 0xea37902f. -// -// Solidity: function testWithdrawZETA() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawZETA() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawZETA(&_GatewayZEVMInboundTest.TransactOpts) -} - -// TestWithdrawZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x21aeb18c. -// -// Solidity: function testWithdrawZETAFailsIfAmountIsZero() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawZETAFailsIfAmountIsZero(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawZETAFailsIfAmountIsZero") -} - -// TestWithdrawZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x21aeb18c. -// -// Solidity: function testWithdrawZETAFailsIfAmountIsZero() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawZETAFailsIfAmountIsZero() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) -} - -// TestWithdrawZETAFailsIfAmountIsZero is a paid mutator transaction binding the contract method 0x21aeb18c. -// -// Solidity: function testWithdrawZETAFailsIfAmountIsZero() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawZETAFailsIfAmountIsZero() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAFailsIfAmountIsZero(&_GatewayZEVMInboundTest.TransactOpts) -} - // TestWithdrawZETAFailsIfNoAllowance is a paid mutator transaction binding the contract method 0xdde7e967. // // Solidity: function testWithdrawZETAFailsIfNoAllowance() returns() @@ -937,48 +853,6 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWith return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAFailsIfNoBalance(&_GatewayZEVMInboundTest.TransactOpts) } -// TestWithdrawZETAFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0xdc749dd7. -// -// Solidity: function testWithdrawZETAFailsIfReceiverIsZeroAddress() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawZETAFailsIfReceiverIsZeroAddress(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawZETAFailsIfReceiverIsZeroAddress") -} - -// TestWithdrawZETAFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0xdc749dd7. -// -// Solidity: function testWithdrawZETAFailsIfReceiverIsZeroAddress() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawZETAFailsIfReceiverIsZeroAddress() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAFailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) -} - -// TestWithdrawZETAFailsIfReceiverIsZeroAddress is a paid mutator transaction binding the contract method 0xdc749dd7. -// -// Solidity: function testWithdrawZETAFailsIfReceiverIsZeroAddress() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawZETAFailsIfReceiverIsZeroAddress() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAFailsIfReceiverIsZeroAddress(&_GatewayZEVMInboundTest.TransactOpts) -} - -// TestWithdrawZETAWithMessage is a paid mutator transaction binding the contract method 0x18a4cfdc. -// -// Solidity: function testWithdrawZETAWithMessage() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawZETAWithMessage(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawZETAWithMessage") -} - -// TestWithdrawZETAWithMessage is a paid mutator transaction binding the contract method 0x18a4cfdc. -// -// Solidity: function testWithdrawZETAWithMessage() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawZETAWithMessage() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAWithMessage(&_GatewayZEVMInboundTest.TransactOpts) -} - -// TestWithdrawZETAWithMessage is a paid mutator transaction binding the contract method 0x18a4cfdc. -// -// Solidity: function testWithdrawZETAWithMessage() returns() -func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawZETAWithMessage() (*types.Transaction, error) { - return _GatewayZEVMInboundTest.Contract.TestWithdrawZETAWithMessage(&_GatewayZEVMInboundTest.TransactOpts) -} - // TestWithdrawZETAWithMessageFailsIfNoAllowance is a paid mutator transaction binding the contract method 0x5006fd80. // // Solidity: function testWithdrawZETAWithMessageFailsIfNoAllowance() returns() @@ -1021,6 +895,27 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWith return _GatewayZEVMInboundTest.Contract.TestWithdrawZRC20(&_GatewayZEVMInboundTest.TransactOpts) } +// TestWithdrawZRC20FailsIfMessageSizeExceeded is a paid mutator transaction binding the contract method 0x264b524c. +// +// Solidity: function testWithdrawZRC20FailsIfMessageSizeExceeded() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactor) TestWithdrawZRC20FailsIfMessageSizeExceeded(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMInboundTest.contract.Transact(opts, "testWithdrawZRC20FailsIfMessageSizeExceeded") +} + +// TestWithdrawZRC20FailsIfMessageSizeExceeded is a paid mutator transaction binding the contract method 0x264b524c. +// +// Solidity: function testWithdrawZRC20FailsIfMessageSizeExceeded() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestSession) TestWithdrawZRC20FailsIfMessageSizeExceeded() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZRC20FailsIfMessageSizeExceeded(&_GatewayZEVMInboundTest.TransactOpts) +} + +// TestWithdrawZRC20FailsIfMessageSizeExceeded is a paid mutator transaction binding the contract method 0x264b524c. +// +// Solidity: function testWithdrawZRC20FailsIfMessageSizeExceeded() returns() +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestTransactorSession) TestWithdrawZRC20FailsIfMessageSizeExceeded() (*types.Transaction, error) { + return _GatewayZEVMInboundTest.Contract.TestWithdrawZRC20FailsIfMessageSizeExceeded(&_GatewayZEVMInboundTest.TransactOpts) +} + // TestWithdrawZRC20FailsIfNoAllowance is a paid mutator transaction binding the contract method 0x5d72228f. // // Solidity: function testWithdrawZRC20FailsIfNoAllowance() returns() @@ -1486,6 +1381,167 @@ func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestFilterer) ParseWithdrawn(lo return event, nil } +// GatewayZEVMInboundTestWithdrawnV2Iterator is returned from FilterWithdrawnV2 and is used to iterate over the raw logs and unpacked data for WithdrawnV2 events raised by the GatewayZEVMInboundTest contract. +type GatewayZEVMInboundTestWithdrawnV2Iterator struct { + Event *GatewayZEVMInboundTestWithdrawnV2 // 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 *GatewayZEVMInboundTestWithdrawnV2Iterator) 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(GatewayZEVMInboundTestWithdrawnV2) + 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(GatewayZEVMInboundTestWithdrawnV2) + 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 *GatewayZEVMInboundTestWithdrawnV2Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GatewayZEVMInboundTestWithdrawnV2Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GatewayZEVMInboundTestWithdrawnV2 represents a WithdrawnV2 event raised by the GatewayZEVMInboundTest contract. +type GatewayZEVMInboundTestWithdrawnV2 struct { + Sender common.Address + ChainId *big.Int + Receiver []byte + Zrc20 common.Address + Value *big.Int + Gasfee *big.Int + ProtocolFlatFee *big.Int + Message []byte + GasLimit *big.Int + RevertOptions RevertOptions + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnV2 is a free log retrieval operation binding the contract event 0x3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d35578. +// +// Solidity: event WithdrawnV2(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestFilterer) FilterWithdrawnV2(opts *bind.FilterOpts, sender []common.Address, chainId []*big.Int) (*GatewayZEVMInboundTestWithdrawnV2Iterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) + } + + logs, sub, err := _GatewayZEVMInboundTest.contract.FilterLogs(opts, "WithdrawnV2", senderRule, chainIdRule) + if err != nil { + return nil, err + } + return &GatewayZEVMInboundTestWithdrawnV2Iterator{contract: _GatewayZEVMInboundTest.contract, event: "WithdrawnV2", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnV2 is a free log subscription operation binding the contract event 0x3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d35578. +// +// Solidity: event WithdrawnV2(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestFilterer) WatchWithdrawnV2(opts *bind.WatchOpts, sink chan<- *GatewayZEVMInboundTestWithdrawnV2, sender []common.Address, chainId []*big.Int) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) + } + + logs, sub, err := _GatewayZEVMInboundTest.contract.WatchLogs(opts, "WithdrawnV2", senderRule, chainIdRule) + 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(GatewayZEVMInboundTestWithdrawnV2) + if err := _GatewayZEVMInboundTest.contract.UnpackLog(event, "WithdrawnV2", 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 +} + +// ParseWithdrawnV2 is a log parse operation binding the contract event 0x3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d35578. +// +// Solidity: event WithdrawnV2(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) +func (_GatewayZEVMInboundTest *GatewayZEVMInboundTestFilterer) ParseWithdrawnV2(log types.Log) (*GatewayZEVMInboundTestWithdrawnV2, error) { + event := new(GatewayZEVMInboundTestWithdrawnV2) + if err := _GatewayZEVMInboundTest.contract.UnpackLog(event, "WithdrawnV2", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // GatewayZEVMInboundTestLogIterator is returned from FilterLog and is used to iterate over the raw logs and unpacked data for Log events raised by the GatewayZEVMInboundTest contract. type GatewayZEVMInboundTestLogIterator struct { Event *GatewayZEVMInboundTestLog // Event containing the contract specifics and raw log diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go index 64e1e98e6..7c515c247 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -65,8 +65,8 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMOutboundTestMetaData contains all meta data concerning the GatewayZEVMOutboundTest contract. var GatewayZEVMOutboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversal\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ff038061003c6000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c806385226c81116101bd578063ba414fa6116100f9578063e20c9f71116100a2578063ec294d9f1161007c578063ec294d9f1461054a578063ef2b539414610552578063fa7626d41461055a578063fb339a1c1461056757600080fd5b8063e20c9f7114610505578063e63ab1e91461050d578063eab7674e1461054257600080fd5b8063d9978513116100d3578063d9978513146104ed578063d9a4fa16146104f5578063e09bc659146104fd57600080fd5b8063ba414fa6146104c5578063c7b388b1146104dd578063c8814d2e146104e557600080fd5b80639c9acd5d11610166578063b0464fdc11610140578063b0464fdc146104a5578063b5508aa9146104ad578063b8f2b821146104b5578063b936be8c146104bd57600080fd5b80639c9acd5d1461048d5780639ca37e9214610495578063a0b2c7b11461049d57600080fd5b806396d9d8761161019757806396d9d8761461047d57806397f7661f14610443578063996b76751461048557600080fd5b806385226c811461044b578063884660a314610460578063916a17c61461046857600080fd5b80633f7286f41161028c5780635cec7db5116102355780636efa04b51161020f5780636efa04b51461042b5780637cec29b0146104335780637f924c4e1461043b578063828d267c1461044357600080fd5b80635cec7db51461040657806366d9a9a01461040e578063671b91e21461042357600080fd5b806351336fb01161026657806351336fb0146103f657806358c9987f146103fe5780635b4c90e1146103a157600080fd5b80633f7286f4146103de57806344b2a40b146103e657806348f4fd07146103ee57600080fd5b80632468bc0f116102f95780632fa381f4116102d35780632fa381f4146103be578063339bd828146103c65780633ab5b199146103ce5780633e5e3c23146103d657600080fd5b80632468bc0f146103995780632948df41146103a15780632ade3880146103a957600080fd5b8063198d5ca41161032a578063198d5ca41461036b5780631c785a14146103735780631ed7831c1461037b57600080fd5b8063084fafab146103515780630a9254e41461035b57806314b7a6da14610363575b600080fd5b61035961056f565b005b610359610745565b61035961122d565b61035961137d565b610359611600565b610383611f17565b604051610390919061a1d1565b60405180910390f35b610359611f79565b610359612444565b6103b161262d565b604051610390919061a26d565b61035961276f565b610359612961565b610359612aad565b610383612c5e565b610383612cbe565b610359612d1e565b610359612ea6565b610359612ff1565b61035961313c565b6103596132f1565b6104166134a8565b604051610390919061a3d3565b61035961362a565b610359613778565b610359613b1c565b610359613d8f565b610359613dc8565b610453613f74565b604051610390919061a471565b610359614044565b610470614323565b604051610390919061a4e8565b61035961441e565b610359614571565b6103596146c5565b610359614815565b61035961494c565b610470614b07565b610453614c02565b610359614cd2565b610359614e20565b6104cd615103565b6040519015158152602001610390565b6103596151d7565b610359615395565b6103596154d7565b61035961559f565b61035961575d565b610383615916565b6105347f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b604051908152602001610390565b610359615976565b610359615ac4565b610359615c73565b601f546104cd9060ff1681565b610359615e24565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156105fe57600080fd5b505af1158015610612573d6000803e3d6000fd5b505050507fecf5d82c48083c30b9ba8e8536ba84ae739724bdd8a42c47c1304f5437ade807602c604051610646919061a696565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156106a857600080fd5b505af11580156106bc573d6000803e3d6000fd5b50506020546024546040517f34b1f5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506334b1f5dc93506107119290911690602c9060040161a6a9565b600060405180830381600087803b15801561072b57600080fd5b505af115801561073f573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161078b9061a0e4565b604051809103906000f0801580156107a7573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602554915160248101939093529216604482015261088b919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052615fd7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610971919061a6cb565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516109b59061a0f1565b604051809103906000f0801580156109d1573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610a6d57600080fd5b505af1158015610a81573d6000803e3d6000fd5b505050506000806000604051610a969061a0fe565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610ad2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610b289061a10b565b610b379695949392919061a6f4565b604051809103906000f080158015610b53573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610c6857600080fd5b505af1158015610c7c573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610cfc57600080fd5b505af1158015610d10573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e11919061a7e9565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea6919061a7e9565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b919061a7e9565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015611115573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611139919061a7e9565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505060408051606081018252600080825260016020808401918252845190810185529182529282018190528151602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169190911781559251602d55909350909150602e90611228908261a881565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561128657600080fd5b505af115801561129a573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561130a57600080fd5b505af115801561131e573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc9150606401610711565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156113ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f2919061a940565b90506113ff600082615ff6565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561145857600080fd5b505af115801561146c573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561156857600080fd5b505af115801561157c573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156115cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f3919061a940565b9050611228600082615ff6565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561165957600080fd5b505af115801561166d573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611758919060040161a959565b600060405180830381600087803b15801561177257600080fd5b505af1158015611786573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117da57600080fd5b505af11580156117ee573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561184b57600080fd5b505af115801561185f573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061194a919060040161a959565b600060405180830381600087803b15801561196457600080fd5b505af1158015611978573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119cc57600080fd5b505af11580156119e0573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611aa557600080fd5b505af1158015611ab9573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b158015611b2c57600080fd5b505af1158015611b40573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611b9d57600080fd5b505af1158015611bb1573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611c2957600080fd5b505af1158015611c3d573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611c9a57600080fd5b505af1158015611cae573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d0257600080fd5b505af1158015611d16573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8e919061a940565b9050611d9b600082615ff6565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611df457600080fd5b505af1158015611e08573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611e8057600080fd5b505af1158015611e94573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0b919061a940565b90506112288382615ff6565b60606016805480602002602001604051908101604052809291908181526020018280548015611f6f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f51575b5050505050905090565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611fca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fee919061a940565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612040573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612064919061a940565b6024546040519192506001600160a01b031631906000906120879060200161a96c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561217557600080fd5b505af1158015612189573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e94506121e493506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054612214936001600160a01b03928316928c92169061a9a9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561227557600080fd5b505af1158015612289573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506122e09286928c92911690889060040161aa5a565b600060405180830381600087803b1580156122fa57600080fd5b505af115801561230e573d6000803e3d6000fd5b50506022546027546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612361573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612385919061a940565b905061239a612394888861aac3565b82615ff6565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156123eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240f919061a940565b905061241b8682615ff6565b61243a612428898761aad6565b6024546001600160a01b031631615ff6565b5050505050505050565b60006040516020016124559061a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561250357600080fd5b505af1158015612517573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b93506125f792869260009260019290911690899060040161aae9565b600060405180830381600087803b15801561261157600080fd5b505af1158015612625573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561276657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561274f5783829060005260206000200180546126c29061a57f565b80601f01602080910402602001604051908101604052809291908181526020018280546126ee9061a57f565b801561273b5780601f106127105761010080835404028352916020019161273b565b820191906000526020600020905b81548152906001019060200180831161271e57829003601f168201915b5050505050815260200190600101906126a3565b505050508152505081526020019060010190612651565b50505050905090565b6040516001906000906127849060200161a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561284e57600080fd5b505af1158015612862573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156128bf57600080fd5b505af11580156128d3573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061292a9286928992911690889060040161aa5a565b600060405180830381600087803b15801561294457600080fd5b505af1158015612958573d6000803e3d6000fd5b50505050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156129ba57600080fd5b505af11580156129ce573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612a3e57600080fd5b505af1158015612a52573d6000803e3d6000fd5b50506020546021546040517f8fffac570000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450638fffac5793506107119290911690600190600090602c9060040161ab3e565b6000604051602001612abe9061a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612b6c57600080fd5b505af1158015612b80573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612bf057600080fd5b505af1158015612c04573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b93506125f79286921690600190600090899060040161aae9565b60606018805480602002602001604051908101604052809291908181526020018280548015611f6f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f51575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611f6f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f51575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d7a57600080fd5b505af1158015612d8e573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612dfe57600080fd5b505af1158015612e12573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015612e8b57600080fd5b505af1158015612e9f573d6000803e3d6000fd5b5050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612eff57600080fd5b505af1158015612f13573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612f8357600080fd5b505af1158015612f97573d6000803e3d6000fd5b50506020546024546040517f8fffac570000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450638fffac57935061071192600092600192911690602c9060040161ab3e565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561305d57600080fd5b505af1158015613071573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156130ce57600080fd5b505af11580156130e2573d6000803e3d6000fd5b50506020546021546040517f8fffac570000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450638fffac57935061071192909116906001908590602c9060040161ab3e565b600060405160200161314d9061a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156131fb57600080fd5b505af115801561320f573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561327f57600080fd5b505af1158015613293573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca3794506125f7938793811692600092911690899060040161aae9565b6040516001906000906133069060200161a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156133d057600080fd5b505af11580156133e4573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561344157600080fd5b505af1158015613455573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061292a90849087908590889060040161aa5a565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561276657838290600052602060002090600202016040518060400160405290816000820180546134ff9061a57f565b80601f016020809104026020016040519081016040528092919081815260200182805461352b9061a57f565b80156135785780601f1061354d57610100808354040283529160200191613578565b820191906000526020600020905b81548152906001019060200180831161355b57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561361257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135bf5790505b505050505081525050815260200190600101906134cc565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561369657600080fd5b505af11580156136aa573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561370757600080fd5b505af115801561371b573d6000803e3d6000fd5b50506020546021546024546040517f8fffac570000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638fffac57945061071193928316926001921690602c9060040161ab3e565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156137c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ec919061a940565b90506137f9600082615ff6565b600060405160200161380a9061a96c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156138f857600080fd5b505af115801561390c573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061396793506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613998936001600160a01b0392831692600192169061a9a9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156139f957600080fd5b505af1158015613a0d573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613a6b938793811692600192911690899060040161aae9565b600060405180830381600087803b158015613a8557600080fd5b505af1158015613a99573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613aeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b0f919061a940565b905061073f600182615ff6565b6000604051602001613b2d9061a96c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c1b57600080fd5b505af1158015613c2f573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613c8a93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613cbb936001600160a01b0392831692600192169061a9a9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015613d1d57600080fd5b505af1158015613d31573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b94506125f7938793811692600192911690899060040161aae9565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401611d4d565b6000604051602001613dd99061a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015613e8757600080fd5b505af1158015613e9b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613f0b57600080fd5b505af1158015613f1f573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a9591506125f7908490600190600090889060040161aa5a565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015612766578382906000526020600020018054613fb79061a57f565b80601f0160208091040260200160405190810160405280929190818152602001828054613fe39061a57f565b80156140305780601f1061400557610100808354040283529160200191614030565b820191906000526020600020905b81548152906001019060200180831161401357829003601f168201915b505050505081526020019060010190613f98565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b8919061a940565b90506140c5600082615ff6565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561415457600080fd5b505af1158015614168573d6000803e3d6000fd5b505050507fecf5d82c48083c30b9ba8e8536ba84ae739724bdd8a42c47c1304f5437ade807602c60405161419c919061a696565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156141fd57600080fd5b505af1158015614211573d6000803e3d6000fd5b50506020546021546024546040517f8fffac570000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638fffac57945061426e93928316926001921690602c9060040161ab3e565b600060405180830381600087803b15801561428857600080fd5b505af115801561429c573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa1580156142ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614312919061a940565b905061431f600182615ff6565b5050565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156127665760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561440657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116143b35790505b50505050508152505081526020019060010190614347565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561447a57600080fd5b505af115801561448e573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156144fe57600080fd5b505af1158015614512573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401612e71565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156145ca57600080fd5b505af11580156145de573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561464e57600080fd5b505af1158015614662573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc9150606401610711565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561471e57600080fd5b505af1158015614732573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156147a257600080fd5b505af11580156147b6573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc9150606401610711565b60006040516020016148269061a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156148f057600080fd5b505af1158015614904573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401613d03565b6040516001906000906149619060200161a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015614a2b57600080fd5b505af1158015614a3f573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614a9c57600080fd5b505af1158015614ab0573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061292a9286928992911690889060040161aa5a565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156127665760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015614bea57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411614b975790505b50505050508152505081526020019060010190614b2b565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015612766578382906000526020600020018054614c459061a57f565b80601f0160208091040260200160405190810160405280929190818152602001828054614c719061a57f565b8015614cbe5780601f10614c9357610100808354040283529160200191614cbe565b820191906000526020600020905b815481529060010190602001808311614ca157829003601f168201915b505050505081526020019060010190614c26565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614d3e57600080fd5b505af1158015614d52573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614daf57600080fd5b505af1158015614dc3573d6000803e3d6000fd5b50506020546021546027546040517f8fffac570000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638fffac57945061071193928316926001921690602c9060040161ab3e565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e95919061a940565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f0b919061a940565b6024546040519192506001600160a01b03163190600090614f2e9060200161a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614fdc57600080fd5b505af1158015614ff0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561506057600080fd5b505af1158015615074573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a9591506150c9908490600190600090889060040161aa5a565b600060405180830381600087803b1580156150e357600080fd5b505af11580156150f7573d6000803e3d6000fd5b50505050505050505050565b60085460009060ff161561511b575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156151ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151d0919061a940565b1415905090565b60006040516020016151e89061a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156152b257600080fd5b505af11580156152c6573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561532357600080fd5b505af1158015615337573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca3794506125f7938793811692600192911690899060040161aae9565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156153ee57600080fd5b505af1158015615402573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561547257600080fd5b505af1158015615486573d6000803e3d6000fd5b50506020546040517f34b1f5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506334b1f5dc915061071190600090602c9060040161a6a9565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561554357600080fd5b505af1158015615557573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa7915060240161068e565b60006040516020016155b09061a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561567a57600080fd5b505af115801561568e573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156156eb57600080fd5b505af11580156156ff573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca3794506125f7938793811692600192911690899060040161aae9565b600060405160200161576e9061a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561583857600080fd5b505af115801561584c573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156158a957600080fd5b505af11580156158bd573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca3793506125f792869216906001908690899060040161aae9565b60606015805480602002602001604051908101604052809291908181526020018280548015611f6f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f51575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156159cf57600080fd5b505af11580156159e3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615a5357600080fd5b505af1158015615a67573d6000803e3d6000fd5b50506020546021546024546040517f8fffac570000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638fffac57945061071193928316926000921690602c9060040161ab3e565b6000604051602001615ad59061a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615b8357600080fd5b505af1158015615b97573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615c0757600080fd5b505af1158015615c1b573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506125f7928692600092911690889060040161aa5a565b6000604051602001615c849061a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615d3257600080fd5b505af1158015615d46573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615db657600080fd5b505af1158015615dca573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca3793506125f79286921690600190600090899060040161aae9565b6000604051602001615e359061a96c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615ee357600080fd5b505af1158015615ef7573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615f6757600080fd5b505af1158015615f7b573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca3793506125f792869260009260019290911690899060040161aae9565b6000615fe161a118565b615fec848483616075565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561606157600080fd5b505afa158015612625573d6000803e3d6000fd5b60008061608285846160f0565b90506160e56040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016160d092919061ab75565b604051602081830303815290604052856160fc565b9150505b9392505050565b60006160e9838361612a565b60c081015151600090156161205761611984848460c00151616145565b90506160e9565b61611984846162eb565b600061613683836163d6565b6160e9838360200151846160fc565b6000806161506163e2565b9050600061615e86836164b5565b90506000616175826060015183602001518561695b565b9050600061618583838989616b6d565b90506000616192826179ea565b602081015181519192509060030b15616205578982604001516040516020016161bc92919061ab97565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526161fc9160040161a959565b60405180910390fd5b60006162486040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617bb9565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061629b90849060040161a959565b602060405180830381865afa1580156162b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906162dc919061a6cb565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061634090879060040161a959565b600060405180830381865afa15801561635d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616385919081019061acd1565b905060006163b3828560405160200161639f92919061ad06565b604051602081830303815290604052617db9565b90506001600160a01b038116615fec5784846040516020016161bc92919061ad35565b61431f82826000617dcc565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061646990849060040161ade0565b600060405180830381865afa158015616486573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164ae919081019061ae27565b9250505090565b6164e76040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506165326040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61653b85617ecf565b6020820152600061654b866182b4565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561658d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165b5919081019061ae27565b868385602001516040516020016165cf949392919061ae70565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061662790859060040161a959565b600060405180830381865afa158015616644573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261666c919081019061ae27565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906166b490849060040161af74565b602060405180830381865afa1580156166d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906166f5919061a7e9565b61670a57816040516020016161bc919061afc6565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061674f90849060040161b058565b600060405180830381865afa15801561676c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616794919081019061ae27565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906167db90849060040161b0aa565b602060405180830381865afa1580156167f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061681c919061a7e9565b156168b1576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061686690849060040161b0aa565b600060405180830381865afa158015616883573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168ab919081019061ae27565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016168d6919061b0fc565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161690292919061b168565b600060405180830381865afa15801561691f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616947919081019061ae27565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816169775790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106169d7576169d761b18d565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110616a2b57616a2b61b18d565b602002602001018190525084604051602001616a47919061b1bc565b60405160208183030381529060405281600281518110616a6957616a6961b18d565b602002602001018190525082604051602001616a85919061b228565b60405160208183030381529060405281600381518110616aa757616aa761b18d565b60200260200101819052506000616abd826179ea565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616b4e9060408051808201825260008082526020918201528151808301909252845182528085019082015290618537565b616b6357856040516020016161bc919061b269565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616bbd565b511590565b616d3157826020015115616c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016161fc565b8260c0015115616d31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016161fc565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616d4a57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616da59061b2fa565b935060ff1681518110616dba57616dba61b18d565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616e0b919061b319565b604051602081830303815290604052828280616e269061b2fa565b935060ff1681518110616e3b57616e3b61b18d565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616e889061b2fa565b935060ff1681518110616e9d57616e9d61b18d565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616eea9061b2fa565b935060ff1681518110616eff57616eff61b18d565b60200260200101819052508760200151828280616f1b9061b2fa565b935060ff1681518110616f3057616f3061b18d565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616f7d9061b2fa565b935060ff1681518110616f9257616f9261b18d565b602090810291909101015287518282616faa8161b2fa565b935060ff1681518110616fbf57616fbf61b18d565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061700c9061b2fa565b935060ff16815181106170215761702161b18d565b602002602001018190525061703546618598565b82826170408161b2fa565b935060ff16815181106170555761705561b18d565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806170a29061b2fa565b935060ff16815181106170b7576170b761b18d565b6020026020010181905250868282806170cf9061b2fa565b935060ff16815181106170e4576170e461b18d565b602090810291909101015285511561720b5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826171358161b2fa565b935060ff168151811061714a5761714a61b18d565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061719a90899060040161a959565b600060405180830381865afa1580156171b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526171df919081019061ae27565b82826171ea8161b2fa565b935060ff16815181106171ff576171ff61b18d565b60200260200101819052505b8460200151156172db5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826172548161b2fa565b935060ff16815181106172695761726961b18d565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806172b69061b2fa565b935060ff16815181106172cb576172cb61b18d565b60200260200101819052506174a2565b617313616bb88660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6173a65760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826173568161b2fa565b935060ff168151811061736b5761736b61b18d565b60200260200101819052508460a0015160405160200161738b919061b1bc565b6040516020818303038152906040528282806172b69061b2fa565b8460c001511580156173e95750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526173e790511590565b155b156174a25760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261742d8161b2fa565b935060ff16815181106174425761744261b18d565b602002602001018190525061745688618638565b604051602001617466919061b1bc565b6040516020818303038152906040528282806174819061b2fa565b935060ff16815181106174965761749661b18d565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526174d690511590565b61756b5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826175198161b2fa565b935060ff168151811061752e5761752e61b18d565b6020026020010181905250846040015182828061754a9061b2fa565b935060ff168151811061755f5761755f61b18d565b60200260200101819052505b60608501511561768c5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826175b48161b2fa565b935060ff16815181106175c9576175c961b18d565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617638573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617660919081019061ae27565b828261766b8161b2fa565b935060ff16815181106176805761768061b18d565b60200260200101819052505b60e085015151156177335760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826176d68161b2fa565b935060ff16815181106176eb576176eb61b18d565b60200260200101819052506177078560e0015160000151618598565b82826177128161b2fa565b935060ff16815181106177275761772761b18d565b60200260200101819052505b60e085015160200151156177dd5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826177808161b2fa565b935060ff16815181106177955761779561b18d565b60200260200101819052506177b18560e0015160200151618598565b82826177bc8161b2fa565b935060ff16815181106177d1576177d161b18d565b60200260200101819052505b60e085015160400151156178875760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261782a8161b2fa565b935060ff168151811061783f5761783f61b18d565b602002602001018190525061785b8560e0015160400151618598565b82826178668161b2fa565b935060ff168151811061787b5761787b61b18d565b60200260200101819052505b60e085015160600151156179315760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826178d48161b2fa565b935060ff16815181106178e9576178e961b18d565b60200260200101819052506179058560e0015160600151618598565b82826179108161b2fa565b935060ff16815181106179255761792561b18d565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561794f5761794f61a80b565b60405190808252806020026020018201604052801561798257816020015b606081526020019060019003908161796d5790505b50905060005b8260ff168160ff1610156179db57838160ff16815181106179ab576179ab61b18d565b6020026020010151828260ff16815181106179c8576179c861b18d565b6020908102919091010152600101617988565b5093505050505b949350505050565b617a116040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617a979186910161b384565b600060405180830381865afa158015617ab4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617adc919081019061ae27565b90506000617aea8683619127565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617b1a919061a471565b6000604051808303816000875af1158015617b39573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617b61919081019061b3cb565b805190915060030b15801590617b7a5750602081015151155b8015617b895750604081015151155b15616b635781600081518110617ba157617ba161b18d565b60200260200101516040516020016161bc919061b481565b60606000617bee8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617c259082905b9061927c565b15617d82576000617ca282617c9c84617c96617c688a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906192a3565b90619305565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617d0690829061927c565b15617d7057604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d6d905b829061938a565b90505b617d79816193b0565b925050506160e9565b8215617d9b5784846040516020016161bc92919061b66d565b50506040805160208101909152600081526160e9565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617ddb57505050565b6000617de8848484619419565b90506000617df5826179ea565b602081015181519192509060030b158015617e915750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e9190604080518082018252600080825260209182015281518083019092528451825280850190820152617c1f565b15617e9e57505050505050565b60408201515115617ebe5781604001516040516020016161bc919061b714565b806040516020016161bc919061b772565b60606000617f048360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617f69905b8290618537565b15617fd857604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160e990617fd39083906199b4565b6193b0565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261803a905b8290619a3e565b60010361810757604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180a090617d66565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160e990617fd3905b839061938a565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261816690617f62565b1561829d57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906181ce908390619ad8565b9050600081600183516181e1919061aac3565b815181106181f1576181f161b18d565b60200260200101519050618294617fd36182676040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906199b4565b95945050505050565b826040516020016161bc919061b7dd565b50919050565b606060006182e98360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061834b90617f62565b15618359576160e9816193b0565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526183b890618033565b60010361842257604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160e990617fd390618100565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261848190617f62565b1561829d57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906184e9908390619ad8565b9050600181511115618525578060028251618504919061aac3565b815181106185145761851461b18d565b602002602001015192505050919050565b50826040516020016161bc919061b7dd565b80518251600091111561854c57506000615ff0565b815183516020850151600092916185629161aad6565b61856c919061aac3565b905082602001518103618583576001915050615ff0565b82516020840151819020912014905092915050565b606060006185a583619b7d565b600101905060008167ffffffffffffffff8111156185c5576185c561a80b565b6040519080825280601f01601f1916602001820160405280156185ef576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846185f957509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916186c4905b8290619c5f565b1561870457505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618763906186bd565b156187a357505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618802906186bd565b1561884257505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188a1906186bd565b806189065750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618906906186bd565b1561894657505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189a5906186bd565b80618a0a5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a0a906186bd565b15618a4a57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618aa9906186bd565b80618b0e5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b0e906186bd565b15618b4e57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bad906186bd565b80618c125750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c12906186bd565b15618c5257505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cb1906186bd565b15618cf157505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d50906186bd565b15618d9057505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618def906186bd565b15618e2f57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e8e906186bd565b15618ece57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f2d906186bd565b15618f6d57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fcc906186bd565b806190315750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619031906186bd565b1561907157505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190d0906186bd565b1561911057505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516161bc929060200161b8bb565b60608060005b84518110156191b257818582815181106191495761914961b18d565b602002602001015160405160200161916292919061ad06565b604051602081830303815290604052915060018551619181919061aac3565b81146191aa5781604051602001619198919061ba24565b60405160208183030381529060405291505b60010161912d565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816191cb57905050905083816000815181106191f6576191f661b18d565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061924a5761924a61b18d565b602002602001018190525081816002815181106192695761926961b18d565b6020908102919091010152949350505050565b602080830151835183519284015160009361929a9291849190619c73565b14159392505050565b604080518082019091526000808252602082015260006192d58460000151856020015185600001518660200151619d84565b90508360200151816192e7919061aac3565b845185906192f690839061aac3565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561932a575081615ff0565b60208083015190840151600191146193515750815160208481015190840151829020919020145b80156193825782518451859061936890839061aac3565b905250825160208501805161937e90839061aad6565b9052505b509192915050565b60408051808201909152600080825260208201526193a9838383619ea4565b5092915050565b60606000826000015167ffffffffffffffff8111156193d1576193d161a80b565b6040519080825280601f01601f1916602001820160405280156193fb576020820181803683370190505b50905060006020820190506193a98185602001518660000151619f4f565b606060006194256163e2565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161944257905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061949d9061b2fa565b935060ff16815181106194b2576194b261b18d565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619503919061ba65565b60405160208183030381529060405282828061951e9061b2fa565b935060ff16815181106195335761953361b18d565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806195809061b2fa565b935060ff16815181106195955761959561b18d565b6020026020010181905250826040516020016195b1919061b228565b6040516020818303038152906040528282806195cc9061b2fa565b935060ff16815181106195e1576195e161b18d565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061962e9061b2fa565b935060ff16815181106196435761964361b18d565b60200260200101819052506196588784619fc9565b82826196638161b2fa565b935060ff16815181106196785761967861b18d565b6020908102919091010152855151156197245760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826196ca8161b2fa565b935060ff16815181106196df576196df61b18d565b60200260200101819052506196f8866000015184619fc9565b82826197038161b2fa565b935060ff16815181106197185761971861b18d565b60200260200101819052505b8560800151156197925760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261976d8161b2fa565b935060ff16815181106197825761978261b18d565b60200260200101819052506197f8565b84156197f85760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826197d78161b2fa565b935060ff16815181106197ec576197ec61b18d565b60200260200101819052505b604086015151156198945760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826198428161b2fa565b935060ff16815181106198575761985761b18d565b602002602001018190525085604001518282806198739061b2fa565b935060ff16815181106198885761988861b18d565b60200260200101819052505b8560600151156198fe5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826198dd8161b2fa565b935060ff16815181106198f2576198f261b18d565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561991c5761991c61a80b565b60405190808252806020026020018201604052801561994f57816020015b606081526020019060019003908161993a5790505b50905060005b8260ff168160ff1610156199a857838160ff16815181106199785761997861b18d565b6020026020010151828260ff16815181106199955761999561b18d565b6020908102919091010152600101619955565b50979650505050505050565b60408051808201909152600080825260208201528151835110156199d9575081615ff0565b815183516020850151600092916199ef9161aad6565b6199f9919061aac3565b60208401519091506001908214619a1a575082516020840151819020908220145b8015619a3557835185518690619a3190839061aac3565b9052505b50929392505050565b6000808260000151619a628560000151866020015186600001518760200151619d84565b619a6c919061aad6565b90505b83516020850151619a80919061aad6565b81116193a95781619a908161baaa565b9250508260000151619ac7856020015183619aab919061aac3565b8651619ab7919061aac3565b8386600001518760200151619d84565b619ad1919061aad6565b9050619a6f565b60606000619ae68484619a3e565b619af190600161aad6565b67ffffffffffffffff811115619b0957619b0961a80b565b604051908082528060200260200182016040528015619b3c57816020015b6060815260200190600190039081619b275790505b50905060005b8151811015617db157619b58617fd3868661938a565b828281518110619b6a57619b6a61b18d565b6020908102919091010152600101619b42565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619bc6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619bf2576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619c1057662386f26fc10000830492506010015b6305f5e1008310619c28576305f5e100830492506008015b6127108310619c3c57612710830492506004015b60648310619c4e576064830492506002015b600a8310615ff05760010192915050565b6000619c6b838361a009565b159392505050565b600080858411619d7a5760208411619d265760008415619cbe576001619c9a86602061aac3565b619ca590600861bac4565b619cb090600261bbc2565b619cba919061aac3565b1990505b8351811685619ccd898961aad6565b619cd7919061aac3565b805190935082165b818114619d1157878411619cf957879450505050506179e2565b83619d038161bbce565b945050828451169050619cdf565b619d1b878561aad6565b9450505050506179e2565b838320619d33858861aac3565b619d3d908761aad6565b91505b858210619d7857848220808203619d6557619d5b868461aad6565b93505050506179e2565b619d7060018461aac3565b925050619d40565b505b5092949350505050565b60008381868511619e8f5760208511619e3e5760008515619dd0576001619dac87602061aac3565b619db790600861bac4565b619dc290600261bbc2565b619dcc919061aac3565b1990505b84518116600087619de18b8b61aad6565b619deb919061aac3565b855190915083165b828114619e3057818610619e1857619e0b8b8b61aad6565b96505050505050506179e2565b85619e228161baaa565b965050838651169050619df3565b8596505050505050506179e2565b508383206000905b619e50868961aac3565b8211619e8d57858320808203619e6c57839450505050506179e2565b619e7760018561aad6565b9350508180619e859061baaa565b925050619e46565b505b619e99878761aad6565b979650505050505050565b60408051808201909152600080825260208201526000619ed68560000151866020015186600001518760200151619d84565b602080870180519186019190915251909150619ef2908261aac3565b835284516020860151619f05919061aad6565b8103619f145760008552619f46565b83518351619f22919061aad6565b85518690619f3190839061aac3565b9052508351619f40908261aad6565b60208601525b50909392505050565b60208110619f875781518352619f6660208461aad6565b9250619f7360208361aad6565b9150619f8060208261aac3565b9050619f4f565b6000198115619fb6576001619f9d83602061aac3565b619fa99061010061bbc2565b619fb3919061aac3565b90505b9151835183169219169190911790915250565b60606000619fd784846164b5565b8051602080830151604051939450619ff19390910161bbe5565b60405160208183030381529060405291505092915050565b815181516000919081111561a01c575081515b6020808501519084015160005b8381101561a0d5578251825180821461a0a557600019602087101561a0845760018461a05689602061aac3565b61a060919061aad6565b61a06b90600861bac4565b61a07690600261bbc2565b61a080919061aac3565b1990505b818116838216818103911461a0a2579750615ff09650505050505050565b50505b61a0b060208661aad6565b945061a0bd60208561aad6565b9350505060208161a0ce919061aad6565b905061a029565b5084518651616b63919061bc3d565b610b678061bc5e83390190565b6106288061c7c583390190565b61106f8061cded83390190565b6120728061de5c83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a15b61a160565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a15b6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a2125783516001600160a01b031683526020938401939092019160010161a1eb565b509095945050505050565b60005b8381101561a23857818101518382015260200161a220565b50506000910152565b6000815180845261a25981602086016020860161a21d565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a369577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a34f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a33984865161a241565b602095860195909450929092019160010161a2ff565b50919750505060209485019492909201915060010161a295565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a3c95781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a389565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a369577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a43f604088018261a241565b905060208201519150868103602088015261a45a818361a375565b96505050602093840193919091019060010161a3fb565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a369577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a4d385835161a241565b9450602093840193919091019060010161a499565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a369577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a569604087018261a375565b955050602093840193919091019060010161a510565b600181811c9082168061a59357607f821691505b6020821081036182ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b03815416825260018101546020830152600060028201606060408501526000815461a5fd8161a57f565b806060880152600182166000811461a61c576001811461a6565761a68a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b890101935061a68a565b84600052602060002060005b8381101561a6815781548a82016080015260019091019060200161a662565b89016080019450505b50919695505050505050565b6020815260006160e9602083018461a5cc565b6001600160a01b03831681526040602082015260006179e2604083018461a5cc565b60006020828403121561a6dd57600080fd5b81516001600160a01b03811681146160e957600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061a7ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261a7cf60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561a7fb57600080fd5b815180151581146160e957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561122857806000526020600020601f840160051c8101602085101561a8615750805b601f840160051c820191505b81811015612e9f576000815560010161a86d565b815167ffffffffffffffff81111561a89b5761a89b61a80b565b61a8af8161a8a9845461a57f565b8461a83a565b6020601f82116001811461a8e3576000831561a8cb5750848201515b600019600385901b1c1916600184901b178455612e9f565b600084815260208120601f198516915b8281101561a913578785015182556020948501946001909201910161a8f3565b508482101561a9315786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561a95257600080fd5b5051919050565b6020815260006160e9602083018461a241565b602081526000615ff060208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b60a08152600061a9bc60a083018761a241565b6001600160a01b03861660208401528460408401526001600160a01b03841660608401528281036080840152619e9981600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261aa31606085018261a241565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60808152600061aa6d608083018761aa1c565b8560208401526001600160a01b03851660408401528281036060840152619e99818561a241565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115615ff057615ff061aa94565b80820180821115615ff057615ff061aa94565b60a08152600061aafc60a083018861aa1c565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261ab32818561a241565b98975050505050505050565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000616b63608083018461a5cc565b6001600160a01b03831681526040602082015260006179e2604083018461a241565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161abcf81601a85016020880161a21d565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ac0c81601c84016020880161a21d565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561ac3b5761ac3b61a80b565b60405290565b60008067ffffffffffffffff84111561ac5c5761ac5c61a80b565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561ac8b5761ac8b61a80b565b60405283815290508082840185101561aca357600080fd5b617db184602083018561a21d565b600082601f83011261acc257600080fd5b6160e98383516020850161ac41565b60006020828403121561ace357600080fd5b815167ffffffffffffffff81111561acfa57600080fd5b615fec8482850161acb1565b6000835161ad1881846020880161a21d565b83519083019061ad2c81836020880161a21d565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ad6d81601a85016020880161a21d565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161adaa81603384016020880161a21d565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006160e9608083018461a241565b60006020828403121561ae3957600080fd5b815167ffffffffffffffff81111561ae5057600080fd5b8201601f8101841361ae6157600080fd5b615fec8482516020840161ac41565b6000855161ae82818460208a0161a21d565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161aebc816001840160208a0161a21d565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161aefa81600284016020890161a21d565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161af3c81600284016020880161a21d565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061af87604083018461a241565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161affe81601f85016020870161a21d565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b06b604083018461a241565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b0bd604083018461a241565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b13481601485016020870161a21d565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b17b604083018561a241565b82810360208401526160e5818561a241565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b1f481600185016020870161a21d565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b23a81846020870161a21d565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b2ed81604b85016020870161a21d565b91909101604b0192915050565b600060ff821660ff810361b3105761b31061aa94565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b37781602985016020870161a21d565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006160e9608083018461a241565b60006020828403121561b3dd57600080fd5b815167ffffffffffffffff81111561b3f457600080fd5b82016060818503121561b40657600080fd5b61b40e61ac18565b81518060030b811461b41f57600080fd5b8152602082015167ffffffffffffffff81111561b43b57600080fd5b61b4478682850161acb1565b602083015250604082015167ffffffffffffffff81111561b46757600080fd5b61b4738682850161acb1565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b4df81602185016020870161a21d565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b6cb81602185016020880161a21d565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b70881602e84016020880161a21d565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b37781602985016020870161a21d565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b7d081602285016020870161a21d565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b81581600e85016020870161a21d565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b8f381601885016020880161a21d565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b93081601c84016020880161a21d565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ba3681846020870161a21d565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161ba9d81601c85016020870161a21d565b91909101601c0192915050565b6000600019820361babd5761babd61aa94565b5060010190565b8082028115828204841417615ff057615ff061aa94565b6001815b600184111561bb165780850481111561bafa5761bafa61aa94565b600184161561bb0857908102905b60019390931c92800261badf565b935093915050565b60008261bb2d57506001615ff0565b8161bb3a57506000615ff0565b816001811461bb50576002811461bb5a5761bb76565b6001915050615ff0565b60ff84111561bb6b5761bb6b61aa94565b50506001821b615ff0565b5060208310610133831016604e8410600b841016171561bb99575081810a615ff0565b61bba6600019848461badb565b806000190482111561bbba5761bbba61aa94565b029392505050565b60006160e9838361bb1e565b60008161bbdd5761bbdd61aa94565b506000190190565b6000835161bbf781846020880161a21d565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bc3181600184016020880161a21d565b01600101949350505050565b81810360008312801583831316838312821617156193a9576193a961aa9456fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b506106098061001f6000396000f3fe60806040526004361061002a5760003560e01c8063a9b0a73c14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7fecf5d82c48083c30b9ba8e8536ba84ae739724bdd8a42c47c1304f5437ade807816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c18284018461038d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610483565b6100ff60408a0160208b016104ef565b8960400135338660405161011896959493929190610511565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b166020820152600080602084013590508060408401525060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261031557600080fd5b830160208101903567ffffffffffffffff81111561033257600080fd5b80360382131561034157600080fd5b60608085015261035560808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561039f57600080fd5b813567ffffffffffffffff8111156103b657600080fd5b8201601f810184136103c757600080fd5b803567ffffffffffffffff8111156103e1576103e161035e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561044d5761044d61035e565b60405281815282820160200186101561046557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104b857600080fd5b83018035915067ffffffffffffffff8211156104d357600080fd5b6020019150368190038213156104e857600080fd5b9250929050565b60006020828403121561050157600080fd5b61050a8261017d565b9392505050565b60a08152600061052560a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b8181101561058f57602081870181015184830182015201610573565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122010486f94f449fc99b4a8d453c3a51c73eb1de12f7d8756d65324b00797fda02e64736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212203b8a61523cf0636d20451911ef652f516b2b6dc27f59d12ba2a96c4c5f1861dc64736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220f0f9b74512e040f3db024246b493df8b472922cfa6a0957a628b02856c0bc3b864736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversal\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ff488061003c6000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c806385226c81116101bd578063ba414fa6116100f9578063e20c9f71116100a2578063ec294d9f1161007c578063ec294d9f1461054a578063ef2b539414610552578063fa7626d41461055a578063fb339a1c1461056757600080fd5b8063e20c9f7114610505578063e63ab1e91461050d578063eab7674e1461054257600080fd5b8063d9978513116100d3578063d9978513146104ed578063d9a4fa16146104f5578063e09bc659146104fd57600080fd5b8063ba414fa6146104c5578063c7b388b1146104dd578063c8814d2e146104e557600080fd5b80639c9acd5d11610166578063b0464fdc11610140578063b0464fdc146104a5578063b5508aa9146104ad578063b8f2b821146104b5578063b936be8c146104bd57600080fd5b80639c9acd5d1461048d5780639ca37e9214610495578063a0b2c7b11461049d57600080fd5b806396d9d8761161019757806396d9d8761461047d57806397f7661f14610443578063996b76751461048557600080fd5b806385226c811461044b578063884660a314610460578063916a17c61461046857600080fd5b80633f7286f41161028c5780635cec7db5116102355780636efa04b51161020f5780636efa04b51461042b5780637cec29b0146104335780637f924c4e1461043b578063828d267c1461044357600080fd5b80635cec7db51461040657806366d9a9a01461040e578063671b91e21461042357600080fd5b806351336fb01161026657806351336fb0146103f657806358c9987f146103fe5780635b4c90e1146103a157600080fd5b80633f7286f4146103de57806344b2a40b146103e657806348f4fd07146103ee57600080fd5b80632468bc0f116102f95780632fa381f4116102d35780632fa381f4146103be578063339bd828146103c65780633ab5b199146103ce5780633e5e3c23146103d657600080fd5b80632468bc0f146103995780632948df41146103a15780632ade3880146103a957600080fd5b8063198d5ca41161032a578063198d5ca41461036b5780631c785a14146103735780631ed7831c1461037b57600080fd5b8063084fafab146103515780630a9254e41461035b57806314b7a6da14610363575b600080fd5b61035961056f565b005b610359610745565b610359611252565b6103596113a2565b610359611625565b610383611f3c565b604051610390919061a1f6565b60405180910390f35b610359611f9e565b610359612469565b6103b1612652565b604051610390919061a292565b610359612794565b610359612986565b610359612ad2565b610383612c83565b610383612ce3565b610359612d43565b610359612ecb565b610359613016565b610359613161565b610359613316565b6104166134cd565b604051610390919061a3f8565b61035961364f565b61035961379d565b610359613b41565b610359613db4565b610359613ded565b610453613f99565b604051610390919061a496565b610359614069565b610470614348565b604051610390919061a50d565b610359614443565b610359614596565b6103596146ea565b61035961483a565b610359614971565b610470614b2c565b610453614c27565b610359614cf7565b610359614e45565b6104cd615128565b6040519015158152602001610390565b6103596151fc565b6103596153ba565b6103596154fc565b6103596155c4565b610359615782565b61038361593b565b6105347f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b604051908152602001610390565b61035961599b565b610359615ae9565b610359615c98565b601f546104cd9060ff1681565b610359615e49565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156105fe57600080fd5b505af1158015610612573d6000803e3d6000fd5b505050507f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76602c604051610646919061a6c6565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156106a857600080fd5b505af11580156106bc573d6000803e3d6000fd5b50506020546024546040517f717d335f0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063717d335f93506107119290911690602c9060040161a6d9565b600060405180830381600087803b15801561072b57600080fd5b505af115801561073f573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161078b9061a109565b604051809103906000f0801580156107a7573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602554915160248101939093529216604482015261088b919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052615ffc565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610971919061a6fb565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516109b59061a116565b604051809103906000f0801580156109d1573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610a6d57600080fd5b505af1158015610a81573d6000803e3d6000fd5b505050506000806000604051610a969061a123565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610ad2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610b289061a130565b610b379695949392919061a724565b604051809103906000f080158015610b53573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610c6857600080fd5b505af1158015610c7c573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610cfc57600080fd5b505af1158015610d10573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e11919061a819565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea6919061a819565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b919061a819565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015611115573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611139919061a819565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505060408051606081018252600080825260016020808401918252845190810185529182529282018190528151602c8054945167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009095166001600160a01b039290921691909117939093178355909350909150602d9061124d908261a8b1565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156112ab57600080fd5b505af11580156112bf573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561132f57600080fd5b505af1158015611343573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc9150606401610711565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156113f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611417919061a970565b905061142460008261601b565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561147d57600080fd5b505af1158015611491573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561150157600080fd5b505af1158015611515573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561158d57600080fd5b505af11580156115a1573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611618919061a970565b905061124d60008261601b565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561167e57600080fd5b505af1158015611692573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061177d919060040161a989565b600060405180830381600087803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117ff57600080fd5b505af1158015611813573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561187057600080fd5b505af1158015611884573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061196f919060040161a989565b600060405180830381600087803b15801561198957600080fd5b505af115801561199d573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119f157600080fd5b505af1158015611a05573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a6257600080fd5b505af1158015611a76573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611aca57600080fd5b505af1158015611ade573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b158015611b5157600080fd5b505af1158015611b65573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611bc257600080fd5b505af1158015611bd6573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611c4e57600080fd5b505af1158015611c62573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611cbf57600080fd5b505af1158015611cd3573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d2757600080fd5b505af1158015611d3b573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db3919061a970565b9050611dc060008261601b565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611e1957600080fd5b505af1158015611e2d573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611ea557600080fd5b505af1158015611eb9573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f30919061a970565b905061124d838261601b565b60606016805480602002602001604051908101604052809291908181526020018280548015611f9457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f76575b5050505050905090565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611fef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612013919061a970565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061a970565b6024546040519192506001600160a01b031631906000906120ac9060200161a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061220993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054612239936001600160a01b03928316928c92169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561229a57600080fd5b505af11580156122ae573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506123059286928c92911690889060040161aa8a565b600060405180830381600087803b15801561231f57600080fd5b505af1158015612333573d6000803e3d6000fd5b50506022546027546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612386573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123aa919061a970565b90506123bf6123b9888861aaf3565b8261601b565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612410573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612434919061a970565b9050612440868261601b565b61245f61244d898761ab06565b6024546001600160a01b03163161601b565b5050505050505050565b600060405160200161247a9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561252857600080fd5b505af115801561253c573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156125ac57600080fd5b505af11580156125c0573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061261c92869260009260019290911690899060040161ab19565b600060405180830381600087803b15801561263657600080fd5b505af115801561264a573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561278b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156127745783829060005260206000200180546126e79061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546127139061a5a4565b80156127605780601f1061273557610100808354040283529160200191612760565b820191906000526020600020905b81548152906001019060200180831161274357829003601f168201915b5050505050815260200190600101906126c8565b505050508152505081526020019060010190612676565b50505050905090565b6040516001906000906127a99060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561287357600080fd5b505af1158015612887573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156128e457600080fd5b505af11580156128f8573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061294f9286928992911690889060040161aa8a565b600060405180830381600087803b15801561296957600080fd5b505af115801561297d573d6000803e3d6000fd5b50505050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156129df57600080fd5b505af11580156129f3573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612a6357600080fd5b505af1158015612a77573d6000803e3d6000fd5b50506020546021546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb7693506107119290911690600190600090602c9060040161ab6e565b6000604051602001612ae39061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612b9157600080fd5b505af1158015612ba5573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612c1557600080fd5b505af1158015612c29573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061261c9286921690600190600090899060040161ab19565b60606018805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d9f57600080fd5b505af1158015612db3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612e2357600080fd5b505af1158015612e37573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015612eb057600080fd5b505af1158015612ec4573d6000803e3d6000fd5b5050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f2457600080fd5b505af1158015612f38573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612fa857600080fd5b505af1158015612fbc573d6000803e3d6000fd5b50506020546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb76935061071192600092600192911690602c9060040161ab6e565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561308257600080fd5b505af1158015613096573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156130f357600080fd5b505af1158015613107573d6000803e3d6000fd5b50506020546021546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb76935061071192909116906001908590602c9060040161ab6e565b60006040516020016131729061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561322057600080fd5b505af1158015613234573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156132a457600080fd5b505af11580156132b8573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600092911690899060040161ab19565b60405160019060009061332b9060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156133f557600080fd5b505af1158015613409573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561346657600080fd5b505af115801561347a573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061294f90849087908590889060040161aa8a565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561278b57838290600052602060002090600202016040518060400160405290816000820180546135249061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546135509061a5a4565b801561359d5780601f106135725761010080835404028352916020019161359d565b820191906000526020600020905b81548152906001019060200180831161358057829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561363757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135e45790505b505050505081525050815260200190600101906134f1565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156136bb57600080fd5b505af11580156136cf573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561372c57600080fd5b505af1158015613740573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926001921690602c9060040161ab6e565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156137ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613811919061a970565b905061381e60008261601b565b600060405160200161382f9061a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561391d57600080fd5b505af1158015613931573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061398c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526027546020546139bd936001600160a01b0392831692600192169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a1e57600080fd5b505af1158015613a32573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613a90938793811692600192911690899060040161ab19565b600060405180830381600087803b158015613aaa57600080fd5b505af1158015613abe573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b34919061a970565b905061073f60018261601b565b6000604051602001613b529061a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c4057600080fd5b505af1158015613c54573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613caf93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613ce0936001600160a01b0392831692600192169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015613d4257600080fd5b505af1158015613d56573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061261c938793811692600192911690899060040161ab19565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401611d72565b6000604051602001613dfe9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015613eac57600080fd5b505af1158015613ec0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613f3057600080fd5b505af1158015613f44573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061261c908490600190600090889060040161aa8a565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561278b578382906000526020600020018054613fdc9061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546140089061a5a4565b80156140555780601f1061402a57610100808354040283529160200191614055565b820191906000526020600020905b81548152906001019060200180831161403857829003601f168201915b505050505081526020019060010190613fbd565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156140b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140dd919061a970565b90506140ea60008261601b565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561417957600080fd5b505af115801561418d573d6000803e3d6000fd5b505050507f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76602c6040516141c1919061a6c6565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561422257600080fd5b505af1158015614236573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061429393928316926001921690602c9060040161ab6e565b600060405180830381600087803b1580156142ad57600080fd5b505af11580156142c1573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015614313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614337919061a970565b905061434460018261601b565b5050565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561278b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561442b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116143d85790505b5050505050815250508152602001906001019061436c565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561449f57600080fd5b505af11580156144b3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561452357600080fd5b505af1158015614537573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401612e96565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156145ef57600080fd5b505af1158015614603573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561467357600080fd5b505af1158015614687573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc9150606401610711565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561474357600080fd5b505af1158015614757573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156147c757600080fd5b505af11580156147db573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc9150606401610711565b600060405160200161484b9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561491557600080fd5b505af1158015614929573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401613d28565b6040516001906000906149869060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015614a5057600080fd5b505af1158015614a64573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614ac157600080fd5b505af1158015614ad5573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061294f9286928992911690889060040161aa8a565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561278b5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015614c0f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411614bbc5790505b50505050508152505081526020019060010190614b50565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561278b578382906000526020600020018054614c6a9061a5a4565b80601f0160208091040260200160405190810160405280929190818152602001828054614c969061a5a4565b8015614ce35780601f10614cb857610100808354040283529160200191614ce3565b820191906000526020600020905b815481529060010190602001808311614cc657829003601f168201915b505050505081526020019060010190614c4b565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614d6357600080fd5b505af1158015614d77573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614dd457600080fd5b505af1158015614de8573d6000803e3d6000fd5b50506020546021546027546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926001921690602c9060040161ab6e565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614eba919061a970565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f30919061a970565b6024546040519192506001600160a01b03163190600090614f539060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561500157600080fd5b505af1158015615015573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561508557600080fd5b505af1158015615099573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a9591506150ee908490600190600090889060040161aa8a565b600060405180830381600087803b15801561510857600080fd5b505af115801561511c573d6000803e3d6000fd5b50505050505050505050565b60085460009060ff1615615140575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156151d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151f5919061a970565b1415905090565b600060405160200161520d9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156152d757600080fd5b505af11580156152eb573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561534857600080fd5b505af115801561535c573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600192911690899060040161ab19565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561541357600080fd5b505af1158015615427573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561549757600080fd5b505af11580156154ab573d6000803e3d6000fd5b50506020546040517f717d335f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063717d335f915061071190600090602c9060040161a6d9565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561556857600080fd5b505af115801561557c573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa7915060240161068e565b60006040516020016155d59061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561569f57600080fd5b505af11580156156b3573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561571057600080fd5b505af1158015615724573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600192911690899060040161ab19565b60006040516020016157939061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561585d57600080fd5b505af1158015615871573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156158ce57600080fd5b505af11580156158e2573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c92869216906001908690899060040161ab19565b60606015805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156159f457600080fd5b505af1158015615a08573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615a7857600080fd5b505af1158015615a8c573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926000921690602c9060040161ab6e565b6000604051602001615afa9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615ba857600080fd5b505af1158015615bbc573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615c2c57600080fd5b505af1158015615c40573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061261c928692600092911690889060040161aa8a565b6000604051602001615ca99061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615d5757600080fd5b505af1158015615d6b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615ddb57600080fd5b505af1158015615def573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c9286921690600190600090899060040161ab19565b6000604051602001615e5a9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615f0857600080fd5b505af1158015615f1c573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615f8c57600080fd5b505af1158015615fa0573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c92869260009260019290911690899060040161ab19565b600061600661a13d565b61601184848361609a565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561608657600080fd5b505afa15801561264a573d6000803e3d6000fd5b6000806160a78584616115565b905061610a6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016160f592919061aba5565b60405160208183030381529060405285616121565b9150505b9392505050565b600061610e838361614f565b60c081015151600090156161455761613e84848460c0015161616a565b905061610e565b61613e8484616310565b600061615b83836163fb565b61610e83836020015184616121565b600080616175616407565b9050600061618386836164da565b9050600061619a8260600151836020015185616980565b905060006161aa83838989616b92565b905060006161b782617a0f565b602081015181519192509060030b1561622a578982604001516040516020016161e192919061abc7565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526162219160040161a989565b60405180910390fd5b600061626d6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617bde565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906162c090849060040161a989565b602060405180830381865afa1580156162dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616301919061a6fb565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061636590879060040161a989565b600060405180830381865afa158015616382573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163aa919081019061ad01565b905060006163d882856040516020016163c492919061ad36565b604051602081830303815290604052617dde565b90506001600160a01b0381166160115784846040516020016161e192919061ad65565b61434482826000617df1565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061648e90849060040161ae10565b600060405180830381865afa1580156164ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164d3919081019061ae57565b9250505090565b61650c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506165576040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61656085617ef4565b60208201526000616570866182d9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156165b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165da919081019061ae57565b868385602001516040516020016165f4949392919061aea0565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061664c90859060040161a989565b600060405180830381865afa158015616669573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616691919081019061ae57565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906166d990849060040161afa4565b602060405180830381865afa1580156166f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061671a919061a819565b61672f57816040516020016161e1919061aff6565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061677490849060040161b088565b600060405180830381865afa158015616791573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167b9919081019061ae57565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061680090849060040161b0da565b602060405180830381865afa15801561681d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616841919061a819565b156168d6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061688b90849060040161b0da565b600060405180830381865afa1580156168a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168d0919081019061ae57565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016168fb919061b12c565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161692792919061b198565b600060405180830381865afa158015616944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261696c919081019061ae57565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161699c5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106169fc576169fc61b1bd565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110616a5057616a5061b1bd565b602002602001018190525084604051602001616a6c919061b1ec565b60405160208183030381529060405281600281518110616a8e57616a8e61b1bd565b602002602001018190525082604051602001616aaa919061b258565b60405160208183030381529060405281600381518110616acc57616acc61b1bd565b60200260200101819052506000616ae282617a0f565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616b73906040805180820182526000808252602091820152815180830190925284518252808501908201529061855c565b616b8857856040516020016161e1919061b299565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616be2565b511590565b616d5657826020015115616c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616221565b8260c0015115616d56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616221565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616d6f57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616dca9061b32a565b935060ff1681518110616ddf57616ddf61b1bd565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616e30919061b349565b604051602081830303815290604052828280616e4b9061b32a565b935060ff1681518110616e6057616e6061b1bd565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616ead9061b32a565b935060ff1681518110616ec257616ec261b1bd565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616f0f9061b32a565b935060ff1681518110616f2457616f2461b1bd565b60200260200101819052508760200151828280616f409061b32a565b935060ff1681518110616f5557616f5561b1bd565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616fa29061b32a565b935060ff1681518110616fb757616fb761b1bd565b602090810291909101015287518282616fcf8161b32a565b935060ff1681518110616fe457616fe461b1bd565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806170319061b32a565b935060ff16815181106170465761704661b1bd565b602002602001018190525061705a466185bd565b82826170658161b32a565b935060ff168151811061707a5761707a61b1bd565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806170c79061b32a565b935060ff16815181106170dc576170dc61b1bd565b6020026020010181905250868282806170f49061b32a565b935060ff16815181106171095761710961b1bd565b60209081029190910101528551156172305760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261715a8161b32a565b935060ff168151811061716f5761716f61b1bd565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906171bf90899060040161a989565b600060405180830381865afa1580156171dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617204919081019061ae57565b828261720f8161b32a565b935060ff16815181106172245761722461b1bd565b60200260200101819052505b8460200151156173005760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826172798161b32a565b935060ff168151811061728e5761728e61b1bd565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806172db9061b32a565b935060ff16815181106172f0576172f061b1bd565b60200260200101819052506174c7565b617338616bdd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6173cb5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261737b8161b32a565b935060ff16815181106173905761739061b1bd565b60200260200101819052508460a001516040516020016173b0919061b1ec565b6040516020818303038152906040528282806172db9061b32a565b8460c0015115801561740e57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261740c90511590565b155b156174c75760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826174528161b32a565b935060ff16815181106174675761746761b1bd565b602002602001018190525061747b8861865d565b60405160200161748b919061b1ec565b6040516020818303038152906040528282806174a69061b32a565b935060ff16815181106174bb576174bb61b1bd565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526174fb90511590565b6175905760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261753e8161b32a565b935060ff16815181106175535761755361b1bd565b6020026020010181905250846040015182828061756f9061b32a565b935060ff16815181106175845761758461b1bd565b60200260200101819052505b6060850151156176b15760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826175d98161b32a565b935060ff16815181106175ee576175ee61b1bd565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561765d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617685919081019061ae57565b82826176908161b32a565b935060ff16815181106176a5576176a561b1bd565b60200260200101819052505b60e085015151156177585760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826176fb8161b32a565b935060ff16815181106177105761771061b1bd565b602002602001018190525061772c8560e00151600001516185bd565b82826177378161b32a565b935060ff168151811061774c5761774c61b1bd565b60200260200101819052505b60e085015160200151156178025760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826177a58161b32a565b935060ff16815181106177ba576177ba61b1bd565b60200260200101819052506177d68560e00151602001516185bd565b82826177e18161b32a565b935060ff16815181106177f6576177f661b1bd565b60200260200101819052505b60e085015160400151156178ac5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261784f8161b32a565b935060ff16815181106178645761786461b1bd565b60200260200101819052506178808560e00151604001516185bd565b828261788b8161b32a565b935060ff16815181106178a0576178a061b1bd565b60200260200101819052505b60e085015160600151156179565760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826178f98161b32a565b935060ff168151811061790e5761790e61b1bd565b602002602001018190525061792a8560e00151606001516185bd565b82826179358161b32a565b935060ff168151811061794a5761794a61b1bd565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156179745761797461a83b565b6040519080825280602002602001820160405280156179a757816020015b60608152602001906001900390816179925790505b50905060005b8260ff168160ff161015617a0057838160ff16815181106179d0576179d061b1bd565b6020026020010151828260ff16815181106179ed576179ed61b1bd565b60209081029190910101526001016179ad565b5093505050505b949350505050565b617a366040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617abc9186910161b3b4565b600060405180830381865afa158015617ad9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617b01919081019061ae57565b90506000617b0f868361914c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617b3f919061a496565b6000604051808303816000875af1158015617b5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617b86919081019061b3fb565b805190915060030b15801590617b9f5750602081015151155b8015617bae5750604081015151155b15616b885781600081518110617bc657617bc661b1bd565b60200260200101516040516020016161e1919061b4b1565b60606000617c138560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617c4a9082905b906192a1565b15617da7576000617cc782617cc184617cbb617c8d8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906192c8565b9061932a565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617d2b9082906192a1565b15617d9557604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d92905b82906193af565b90505b617d9e816193d5565b9250505061610e565b8215617dc05784846040516020016161e192919061b69d565b505060408051602081019091526000815261610e565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617e0057505050565b6000617e0d84848461943e565b90506000617e1a82617a0f565b602081015181519192509060030b158015617eb65750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617eb690604080518082018252600080825260209182015281518083019092528451825280850190820152617c44565b15617ec357505050505050565b60408201515115617ee35781604001516040516020016161e1919061b744565b806040516020016161e1919061b7a2565b60606000617f298360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617f8e905b829061855c565b15617ffd57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff89083906199d9565b6193d5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261805f905b8290619a63565b60010361812c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180c590617d8b565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff8905b83906193af565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261818b90617f87565b156182c257604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906181f3908390619afd565b905060008160018351618206919061aaf3565b815181106182165761821661b1bd565b602002602001015190506182b9617ff861828c6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906199d9565b95945050505050565b826040516020016161e1919061b80d565b50919050565b6060600061830e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061837090617f87565b1561837e5761610e816193d5565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526183dd90618058565b60010361844757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff890618125565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184a690617f87565b156182c257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061850e908390619afd565b905060018151111561854a578060028251618529919061aaf3565b815181106185395761853961b1bd565b602002602001015192505050919050565b50826040516020016161e1919061b80d565b80518251600091111561857157506000616015565b815183516020850151600092916185879161ab06565b618591919061aaf3565b9050826020015181036185a8576001915050616015565b82516020840151819020912014905092915050565b606060006185ca83619ba2565b600101905060008167ffffffffffffffff8111156185ea576185ea61a83b565b6040519080825280601f01601f191660200182016040528015618614576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461861e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916186e9905b8290619c84565b1561872957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618788906186e2565b156187c857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618827906186e2565b1561886757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188c6906186e2565b8061892b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261892b906186e2565b1561896b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189ca906186e2565b80618a2f5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a2f906186e2565b15618a6f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ace906186e2565b80618b335750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b33906186e2565b15618b7357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bd2906186e2565b80618c375750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c37906186e2565b15618c7757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cd6906186e2565b15618d1657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d75906186e2565b15618db557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e14906186e2565b15618e5457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618eb3906186e2565b15618ef357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f52906186e2565b15618f9257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ff1906186e2565b806190565750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619056906186e2565b1561909657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190f5906186e2565b1561913557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516161e1929060200161b8eb565b60608060005b84518110156191d7578185828151811061916e5761916e61b1bd565b602002602001015160405160200161918792919061ad36565b6040516020818303038152906040529150600185516191a6919061aaf3565b81146191cf57816040516020016191bd919061ba54565b60405160208183030381529060405291505b600101619152565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816191f0579050509050838160008151811061921b5761921b61b1bd565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061926f5761926f61b1bd565b6020026020010181905250818160028151811061928e5761928e61b1bd565b6020908102919091010152949350505050565b60208083015183518351928401516000936192bf9291849190619c98565b14159392505050565b604080518082019091526000808252602082015260006192fa8460000151856020015185600001518660200151619da9565b905083602001518161930c919061aaf3565b8451859061931b90839061aaf3565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561934f575081616015565b60208083015190840151600191146193765750815160208481015190840151829020919020145b80156193a75782518451859061938d90839061aaf3565b90525082516020850180516193a390839061ab06565b9052505b509192915050565b60408051808201909152600080825260208201526193ce838383619ec9565b5092915050565b60606000826000015167ffffffffffffffff8111156193f6576193f661a83b565b6040519080825280601f01601f191660200182016040528015619420576020820181803683370190505b50905060006020820190506193ce8185602001518660000151619f74565b6060600061944a616407565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161946757905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806194c29061b32a565b935060ff16815181106194d7576194d761b1bd565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619528919061ba95565b6040516020818303038152906040528282806195439061b32a565b935060ff16815181106195585761955861b1bd565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806195a59061b32a565b935060ff16815181106195ba576195ba61b1bd565b6020026020010181905250826040516020016195d6919061b258565b6040516020818303038152906040528282806195f19061b32a565b935060ff16815181106196065761960661b1bd565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806196539061b32a565b935060ff16815181106196685761966861b1bd565b602002602001018190525061967d8784619fee565b82826196888161b32a565b935060ff168151811061969d5761969d61b1bd565b6020908102919091010152855151156197495760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826196ef8161b32a565b935060ff16815181106197045761970461b1bd565b602002602001018190525061971d866000015184619fee565b82826197288161b32a565b935060ff168151811061973d5761973d61b1bd565b60200260200101819052505b8560800151156197b75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826197928161b32a565b935060ff16815181106197a7576197a761b1bd565b602002602001018190525061981d565b841561981d5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826197fc8161b32a565b935060ff16815181106198115761981161b1bd565b60200260200101819052505b604086015151156198b95760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826198678161b32a565b935060ff168151811061987c5761987c61b1bd565b602002602001018190525085604001518282806198989061b32a565b935060ff16815181106198ad576198ad61b1bd565b60200260200101819052505b8560600151156199235760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826199028161b32a565b935060ff16815181106199175761991761b1bd565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156199415761994161a83b565b60405190808252806020026020018201604052801561997457816020015b606081526020019060019003908161995f5790505b50905060005b8260ff168160ff1610156199cd57838160ff168151811061999d5761999d61b1bd565b6020026020010151828260ff16815181106199ba576199ba61b1bd565b602090810291909101015260010161997a565b50979650505050505050565b60408051808201909152600080825260208201528151835110156199fe575081616015565b81518351602085015160009291619a149161ab06565b619a1e919061aaf3565b60208401519091506001908214619a3f575082516020840151819020908220145b8015619a5a57835185518690619a5690839061aaf3565b9052505b50929392505050565b6000808260000151619a878560000151866020015186600001518760200151619da9565b619a91919061ab06565b90505b83516020850151619aa5919061ab06565b81116193ce5781619ab58161bada565b9250508260000151619aec856020015183619ad0919061aaf3565b8651619adc919061aaf3565b8386600001518760200151619da9565b619af6919061ab06565b9050619a94565b60606000619b0b8484619a63565b619b1690600161ab06565b67ffffffffffffffff811115619b2e57619b2e61a83b565b604051908082528060200260200182016040528015619b6157816020015b6060815260200190600190039081619b4c5790505b50905060005b8151811015617dd657619b7d617ff886866193af565b828281518110619b8f57619b8f61b1bd565b6020908102919091010152600101619b67565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619beb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619c17576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619c3557662386f26fc10000830492506010015b6305f5e1008310619c4d576305f5e100830492506008015b6127108310619c6157612710830492506004015b60648310619c73576064830492506002015b600a83106160155760010192915050565b6000619c90838361a02e565b159392505050565b600080858411619d9f5760208411619d4b5760008415619ce3576001619cbf86602061aaf3565b619cca90600861baf4565b619cd590600261bbf2565b619cdf919061aaf3565b1990505b8351811685619cf2898961ab06565b619cfc919061aaf3565b805190935082165b818114619d3657878411619d1e5787945050505050617a07565b83619d288161bbfe565b945050828451169050619d04565b619d40878561ab06565b945050505050617a07565b838320619d58858861aaf3565b619d62908761ab06565b91505b858210619d9d57848220808203619d8a57619d80868461ab06565b9350505050617a07565b619d9560018461aaf3565b925050619d65565b505b5092949350505050565b60008381868511619eb45760208511619e635760008515619df5576001619dd187602061aaf3565b619ddc90600861baf4565b619de790600261bbf2565b619df1919061aaf3565b1990505b84518116600087619e068b8b61ab06565b619e10919061aaf3565b855190915083165b828114619e5557818610619e3d57619e308b8b61ab06565b9650505050505050617a07565b85619e478161bada565b965050838651169050619e18565b859650505050505050617a07565b508383206000905b619e75868961aaf3565b8211619eb257858320808203619e915783945050505050617a07565b619e9c60018561ab06565b9350508180619eaa9061bada565b925050619e6b565b505b619ebe878761ab06565b979650505050505050565b60408051808201909152600080825260208201526000619efb8560000151866020015186600001518760200151619da9565b602080870180519186019190915251909150619f17908261aaf3565b835284516020860151619f2a919061ab06565b8103619f395760008552619f6b565b83518351619f47919061ab06565b85518690619f5690839061aaf3565b9052508351619f65908261ab06565b60208601525b50909392505050565b60208110619fac5781518352619f8b60208461ab06565b9250619f9860208361ab06565b9150619fa560208261aaf3565b9050619f74565b6000198115619fdb576001619fc283602061aaf3565b619fce9061010061bbf2565b619fd8919061aaf3565b90505b9151835183169219169190911790915250565b60606000619ffc84846164da565b805160208083015160405193945061a0169390910161bc15565b60405160208183030381529060405291505092915050565b815181516000919081111561a041575081515b6020808501519084015160005b8381101561a0fa578251825180821461a0ca57600019602087101561a0a95760018461a07b89602061aaf3565b61a085919061ab06565b61a09090600861baf4565b61a09b90600261bbf2565b61a0a5919061aaf3565b1990505b818116838216818103911461a0c75797506160159650505050505050565b50505b61a0d560208661ab06565b945061a0e260208561ab06565b9350505060208161a0f3919061ab06565b905061a04e565b5084518651616b88919061bc6d565b610b678061bc8e83390190565b61063d8061c7f583390190565b61106f8061ce3283390190565b6120728061dea183390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a18061a185565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a1806040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a2375783516001600160a01b031683526020938401939092019160010161a210565b509095945050505050565b60005b8381101561a25d57818101518382015260200161a245565b50506000910152565b6000815180845261a27e81602086016020860161a242565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a374577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a35e84865161a266565b602095860195909450929092019160010161a324565b50919750505060209485019492909201915060010161a2ba565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a3ee5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a3ae565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a464604088018261a266565b905060208201519150868103602088015261a47f818361a39a565b96505050602093840193919091019060010161a420565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a4f885835161a266565b9450602093840193919091019060010161a4be565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a58e604087018261a39a565b955050602093840193919091019060010161a535565b600181811c9082168061a5b857607f821691505b6020821081036182d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845267ffffffffffffffff8160a01c1660208501525060018201606060408501526000815461a62d8161a5a4565b806060880152600182166000811461a64c576001811461a6865761a6ba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b890101935061a6ba565b84600052602060002060005b8381101561a6b15781548a82016080015260019091019060200161a692565b89016080019450505b50919695505050505050565b60208152600061610e602083018461a5f1565b6001600160a01b0383168152604060208201526000617a07604083018461a5f1565b60006020828403121561a70d57600080fd5b81516001600160a01b038116811461610e57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061a7de577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261a7ff60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561a82b57600080fd5b8151801515811461610e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561124d57806000526020600020601f840160051c8101602085101561a8915750805b601f840160051c820191505b81811015612ec4576000815560010161a89d565b815167ffffffffffffffff81111561a8cb5761a8cb61a83b565b61a8df8161a8d9845461a5a4565b8461a86a565b6020601f82116001811461a913576000831561a8fb5750848201515b600019600385901b1c1916600184901b178455612ec4565b600084815260208120601f198516915b8281101561a943578785015182556020948501946001909201910161a923565b508482101561a9615786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561a98257600080fd5b5051919050565b60208152600061610e602083018461a266565b60208152600061601560208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b60a08152600061a9ec60a083018761a266565b6001600160a01b03861660208401528460408401526001600160a01b03841660608401528281036080840152619ebe81600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261aa61606085018261a266565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60808152600061aa9d608083018761aa4c565b8560208401526001600160a01b03851660408401528281036060840152619ebe818561a266565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156160155761601561aac4565b808201808211156160155761601561aac4565b60a08152600061ab2c60a083018861aa4c565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261ab62818561a266565b98975050505050505050565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000616b88608083018461a5f1565b6001600160a01b0383168152604060208201526000617a07604083018461a266565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161abff81601a85016020880161a242565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ac3c81601c84016020880161a242565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561ac6b5761ac6b61a83b565b60405290565b60008067ffffffffffffffff84111561ac8c5761ac8c61a83b565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561acbb5761acbb61a83b565b60405283815290508082840185101561acd357600080fd5b617dd684602083018561a242565b600082601f83011261acf257600080fd5b61610e8383516020850161ac71565b60006020828403121561ad1357600080fd5b815167ffffffffffffffff81111561ad2a57600080fd5b6160118482850161ace1565b6000835161ad4881846020880161a242565b83519083019061ad5c81836020880161a242565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ad9d81601a85016020880161a242565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161adda81603384016020880161a242565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061610e608083018461a266565b60006020828403121561ae6957600080fd5b815167ffffffffffffffff81111561ae8057600080fd5b8201601f8101841361ae9157600080fd5b6160118482516020840161ac71565b6000855161aeb2818460208a0161a242565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161aeec816001840160208a0161a242565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161af2a81600284016020890161a242565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161af6c81600284016020880161a242565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061afb7604083018461a266565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b02e81601f85016020870161a242565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b09b604083018461a266565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b0ed604083018461a266565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b16481601485016020870161a242565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b1ab604083018561a266565b828103602084015261610a818561a266565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b22481600185016020870161a242565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b26a81846020870161a242565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b31d81604b85016020870161a242565b91909101604b0192915050565b600060ff821660ff810361b3405761b34061aac4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b3a781602985016020870161a242565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061610e608083018461a266565b60006020828403121561b40d57600080fd5b815167ffffffffffffffff81111561b42457600080fd5b82016060818503121561b43657600080fd5b61b43e61ac48565b81518060030b811461b44f57600080fd5b8152602082015167ffffffffffffffff81111561b46b57600080fd5b61b4778682850161ace1565b602083015250604082015167ffffffffffffffff81111561b49757600080fd5b61b4a38682850161ace1565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b50f81602185016020870161a242565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b6fb81602185016020880161a242565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b73881602e84016020880161a242565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b3a781602985016020870161a242565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b80081602285016020870161a242565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b84581600e85016020870161a242565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b92381601885016020880161a242565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b96081601c84016020880161a242565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ba6681846020870161a242565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161bacd81601c85016020870161a242565b91909101601c0192915050565b6000600019820361baed5761baed61aac4565b5060010190565b80820281158282048414176160155761601561aac4565b6001815b600184111561bb465780850481111561bb2a5761bb2a61aac4565b600184161561bb3857908102905b60019390931c92800261bb0f565b935093915050565b60008261bb5d57506001616015565b8161bb6a57506000616015565b816001811461bb80576002811461bb8a5761bba6565b6001915050616015565b60ff84111561bb9b5761bb9b61aac4565b50506001821b616015565b5060208310610133831016604e8410600b841016171561bbc9575081810a616015565b61bbd6600019848461bb0b565b806000190482111561bbea5761bbea61aac4565b029392505050565b600061610e838361bb4e565b60008161bc0d5761bc0d61aac4565b506000190190565b6000835161bc2781846020880161a242565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bc6181600184016020880161a242565b01600101949350505050565b81810360008312801583831316838312821617156193ce576193ce61aac456fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c8063660b9de014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c1828401846103a2565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610498565b6100ff60408a0160208b01610504565b8960400135338660405161011896959493929190610526565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b1660208201526000602083013567ffffffffffffffff81168082146102ed57600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261032a57600080fd5b830160208101903567ffffffffffffffff81111561034757600080fd5b80360382131561035657600080fd5b60608085015261036a60808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103b457600080fd5b813567ffffffffffffffff8111156103cb57600080fd5b8201601f810184136103dc57600080fd5b803567ffffffffffffffff8111156103f6576103f6610373565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561046257610462610373565b60405281815282820160200186101561047a57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104cd57600080fd5b83018035915067ffffffffffffffff8211156104e857600080fd5b6020019150368190038213156104fd57600080fd5b9250929050565b60006020828403121561051657600080fd5b61051f8261017d565b9392505050565b60a08152600061053a60a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105a457602081870181015184830182015201610588565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122002711b914cfa85869597d761ee7a81ae9c55589f2201dbf0c65836b421bff96564736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201bc2c2e5533a7390cd5c9f230b641bee17c3057fdf7a0f92b4302cd8cea1ce6764736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a26469706673582212201ce28d5a9b13f29cab2c5f8e730c81dfbf159f3cf9ddd9aeb27bca498461a6d664736f6c634300081a0033", } // GatewayZEVMOutboundTestABI is the input ABI used to generate the binding from. @@ -1826,9 +1826,9 @@ type GatewayZEVMOutboundTestContextDataRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterContextDataRevert is a free log retrieval operation binding the contract event 0xecf5d82c48083c30b9ba8e8536ba84ae739724bdd8a42c47c1304f5437ade807. +// FilterContextDataRevert is a free log retrieval operation binding the contract event 0x35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76. // -// Solidity: event ContextDataRevert((address,uint256,bytes) revertContext) +// Solidity: event ContextDataRevert((address,uint64,bytes) revertContext) func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestFilterer) FilterContextDataRevert(opts *bind.FilterOpts) (*GatewayZEVMOutboundTestContextDataRevertIterator, error) { logs, sub, err := _GatewayZEVMOutboundTest.contract.FilterLogs(opts, "ContextDataRevert") @@ -1838,9 +1838,9 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestFilterer) FilterContextDa return &GatewayZEVMOutboundTestContextDataRevertIterator{contract: _GatewayZEVMOutboundTest.contract, event: "ContextDataRevert", logs: logs, sub: sub}, nil } -// WatchContextDataRevert is a free log subscription operation binding the contract event 0xecf5d82c48083c30b9ba8e8536ba84ae739724bdd8a42c47c1304f5437ade807. +// WatchContextDataRevert is a free log subscription operation binding the contract event 0x35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76. // -// Solidity: event ContextDataRevert((address,uint256,bytes) revertContext) +// Solidity: event ContextDataRevert((address,uint64,bytes) revertContext) func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestFilterer) WatchContextDataRevert(opts *bind.WatchOpts, sink chan<- *GatewayZEVMOutboundTestContextDataRevert) (event.Subscription, error) { logs, sub, err := _GatewayZEVMOutboundTest.contract.WatchLogs(opts, "ContextDataRevert") @@ -1875,9 +1875,9 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestFilterer) WatchContextDat }), nil } -// ParseContextDataRevert is a log parse operation binding the contract event 0xecf5d82c48083c30b9ba8e8536ba84ae739724bdd8a42c47c1304f5437ade807. +// ParseContextDataRevert is a log parse operation binding the contract event 0x35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76. // -// Solidity: event ContextDataRevert((address,uint256,bytes) revertContext) +// Solidity: event ContextDataRevert((address,uint64,bytes) revertContext) func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestFilterer) ParseContextDataRevert(log types.Log) (*GatewayZEVMOutboundTestContextDataRevert, error) { event := new(GatewayZEVMOutboundTestContextDataRevert) if err := _GatewayZEVMOutboundTest.contract.UnpackLog(event, "ContextDataRevert", log); err != nil { diff --git a/v2/pkg/gatewayzevmupgradetest.sol/gatewayzevmupgradetest.go b/v2/pkg/gatewayzevmupgradetest.sol/gatewayzevmupgradetest.go new file mode 100644 index 000000000..b1612c9d1 --- /dev/null +++ b/v2/pkg/gatewayzevmupgradetest.sol/gatewayzevmupgradetest.go @@ -0,0 +1,2477 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package gatewayzevmupgradetest + +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 + _ = abi.ConvertType +) + +// RevertContext is an auto generated low-level Go binding around an user-defined struct. +type RevertContext struct { + Asset common.Address + Amount uint64 + RevertMessage []byte +} + +// RevertOptions is an auto generated low-level Go binding around an user-defined struct. +type RevertOptions struct { + RevertAddress common.Address + CallOnRevert bool + AbortAddress common.Address + RevertMessage []byte + OnRevertGasLimit *big.Int +} + +// ZContext is an auto generated low-level Go binding around an user-defined struct. +type ZContext struct { + Origin []byte + Sender common.Address + ChainID *big.Int +} + +// GatewayZEVMUpgradeTestMetaData contains all meta data concerning the GatewayZEVMUpgradeTest contract. +var GatewayZEVMUpgradeTestMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_MESSAGE_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613b2c6100fd6000396000818161273f01528181612768015261293e0152613b2c6000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca3714610621578063d547741f14610641578063e63ab1e914610661578063f45346dc1461069557600080fd5b806397d340f514610580578063a217fddf14610596578063ad3cb1cc146105ab578063bcf7f32b1461060157600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b5565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612e87565b610713565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612ef6565b6107ac565b3480156102a157600080fd5b506102396102b03660046130b8565b610a38565b3480156102c157600080fd5b506102396102d0366004613178565b610c3f565b3480156102e157600080fd5b506102396102f036600461322d565b610f01565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c6103483660046132b9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a53660046132d2565b6110ce565b3480156103b657600080fd5b506102396103c53660046132d2565b611118565b3480156103d657600080fd5b506102396103e5366004613302565b611169565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b506102396112de565b34801561043357600080fd5b50610239610442366004613395565b611313565b6102396104553660046133c3565b611568565b34801561046657600080fd5b5061037c611587565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c1366004613413565b6115b6565b3480156104d257600080fd5b506102396104e1366004613459565b6116be565b3480156104f257600080fd5b5061023961188c565b34801561050757600080fd5b506102606105163660046132d2565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b5061023961057b3660046134d2565b6118be565b34801561058c57600080fd5b5061037c61040081565b3480156105a257600080fd5b5061037c600081565b3480156105b757600080fd5b506105f46040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c91906135a4565b34801561060d57600080fd5b5061023961061c3660046135b7565b6119dd565b34801561062d57600080fd5b5061023961063c3660046135b7565b611b0d565b34801561064d57600080fd5b5061023961065c3660046132d2565b611d1c565b34801561066d57600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156106a157600080fd5b506102396106b0366004613655565b611d60565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610711576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108016106b5565b6001600160a01b038416158061081e57506001600160a01b038216155b15610855576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088f576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108c257506001600160a01b03821630145b156108f9576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af1158015610961573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098591906136a5565b6109bb576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de090610a0090849060040161376f565b600060405180830381600087803b158015610a1a57600080fd5b505af1158015610a2e573d6000803e3d6000fd5b5050505050505050565b610a40611f6f565b610a486106b5565b8651600003610a83576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610abd576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610af7576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b0760608301836137d5565b610b1291508561383a565b10610b49576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b56878785611ff0565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190613874565b8c8c8c8c604051610c049998979695949392919061390e565b60405180910390a350610c3660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c47611f6f565b610c4f6106b5565b8551600003610c8a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610cc4576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610cd460608301836137d5565b610cdf91508561383a565b10610d16576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9c9190613981565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4591906136a5565b610e7b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610ec69594939291906139af565b60405180910390a35050610ef960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610f4e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f566106b5565b6001600160a01b038316610f96576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610fd0576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061100357506001600160a01b03831630145b1561103a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61104484846122f3565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92611095928a9216908990889088906004016139fb565b600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611108816124c1565b61111283836124cb565b50505050565b6001600160a01b038116331461115a576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116482826125b8565b505050565b611171611f6f565b6111796106b5565b85516000036111b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846000036111ee576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006111fe60608301836137d5565b61120991508461383a565b10611240576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61125e8573735b14bb79463307aacbed86daf3322b1e6226ab6122f3565b60008054604051869233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d926112ad928c926001600160a01b0316918c919081908c908c9083908d9061390e565b60405180910390a3610ef960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611308816124c1565b61131061267c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561135e5750825b905060008267ffffffffffffffff16600114801561137b5750303b155b905081158015611389575080155b156113c0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156114215784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061143e57506001600160a01b038616155b15611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61147d61270c565b61148561270c565b61148d612714565b611495612724565b6114a06000876124cb565b506114cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876124cb565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c365784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b611570612734565b61157982612804565b611583828261280f565b5050565b6000611591612933565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611603576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61160b6106b5565b6001600160a01b03821661164b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de09061169090849060040161376f565b600060405180830381600087803b1580156116aa57600080fd5b505af1158015610ef9573d6000803e3d6000fd5b6116c6611f6f565b6116ce6106b5565b8351600003611709576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611743576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061174f8484612995565b90506000336001600160a01b03167f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d3557887868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190613874565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118469190613874565b8a60405161185a9796959493929190613a6c565b60405180910390a35061111260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6118b6816124c1565b611310612a03565b6118c6611f6f565b6118ce6106b5565b8351600003611909576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611943576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119618373735b14bb79463307aacbed86daf3322b1e6226ab6122f3565b60008054604051849233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d926119ac928a926001600160a01b0316918a9190819081908b90613a6c565b60405180910390a361111260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a2a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a326106b5565b6001600160a01b0385161580611a4f57506001600160a01b038316155b15611a86576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90611ad390899089908990889088906004016139fb565b600060405180830381600087803b158015611aed57600080fd5b505af1158015611b01573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611b5a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b626106b5565b6001600160a01b0385161580611b7f57506001600160a01b038316155b15611bb6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611bf0576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611c2357506001600160a01b03831630145b15611c5a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce691906136a5565b611a86576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611d56816124c1565b61111283836125b8565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611dad576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db56106b5565b6001600160a01b0383161580611dd257506001600160a01b038116155b15611e09576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611e43576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611e7657506001600160a01b03811630145b15611ead576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3991906136a5565b611164576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611fea576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b815260040161202391815260200190565b6040805180830381865afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120639190613981565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af11580156120e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210c91906136a5565b612142576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af11580156121ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d291906136a5565b612208576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228c91906136a5565b6122c2576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238791906136a5565b6123bd576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561241c57600080fd5b505af1158015612430573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114612481576040519150601f19603f3d011682016040523d82523d6000602084013e612486565b606091505b5050905080611164576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113108133612a7c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166125ae576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556125643390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a6565b60009150506107a6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156125ae576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a6565b612684612b09565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b610711612b64565b61271c612b64565b610711612bcb565b61272c612b64565b610711612c1c565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806127cd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610711576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611583816124c1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612887575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261288491810190613874565b60015b6128cd576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612929576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016128c4565b6111648383612c24565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610711576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006122c68383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fe9190613874565b611ff0565b612a0b6106b5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336126ee565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611583576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016128c4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610711576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610711576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bd3612b64565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6122cd612b64565b612c2d82612c7a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612c72576111648282612d22565b611583612d98565b806001600160a01b03163b600003612cc9576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016128c4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d3f9190613ada565b600060405180830381855af49150503d8060008114612d7a576040519150601f19603f3d011682016040523d82523d6000602084013e612d7f565b606091505b5091509150612d8f858383612dd0565b95945050505050565b3415610711576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612de557612de082612e45565b6122c6565b8151158015612dfc57506001600160a01b0384163b155b15612e3e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016128c4565b50806122c6565b805115612e555780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612e9957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146122c657600080fd5b6001600160a01b038116811461131057600080fd5b600060608284031215612ef057600080fd5b50919050565b60008060008060808587031215612f0c57600080fd5b8435612f1781612ec9565b9350602085013592506040850135612f2e81612ec9565b9150606085013567ffffffffffffffff811115612f4a57600080fd5b612f5687828801612ede565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612fa257600080fd5b813567ffffffffffffffff811115612fbc57612fbc612f62565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561302857613028612f62565b60405281815283820160200185101561304057600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f84011261306f57600080fd5b50813567ffffffffffffffff81111561308757600080fd5b60208301915083602082850101111561309f57600080fd5b9250929050565b600060a08284031215612ef057600080fd5b600080600080600080600060c0888a0312156130d357600080fd5b873567ffffffffffffffff8111156130ea57600080fd5b6130f68a828b01612f91565b97505060208801359550604088013561310e81612ec9565b9450606088013567ffffffffffffffff81111561312a57600080fd5b6131368a828b0161305d565b9095509350506080880135915060a088013567ffffffffffffffff81111561315d57600080fd5b6131698a828b016130a6565b91505092959891949750929550565b60008060008060008060a0878903121561319157600080fd5b863567ffffffffffffffff8111156131a857600080fd5b6131b489828a01612f91565b96505060208701356131c581612ec9565b9450604087013567ffffffffffffffff8111156131e157600080fd5b6131ed89828a0161305d565b90955093505060608701359150608087013567ffffffffffffffff81111561321457600080fd5b61322089828a016130a6565b9150509295509295509295565b60008060008060006080868803121561324557600080fd5b853567ffffffffffffffff81111561325c57600080fd5b61326888828901612ede565b95505060208601359350604086013561328081612ec9565b9250606086013567ffffffffffffffff81111561329c57600080fd5b6132a88882890161305d565b969995985093965092949392505050565b6000602082840312156132cb57600080fd5b5035919050565b600080604083850312156132e557600080fd5b8235915060208301356132f781612ec9565b809150509250929050565b60008060008060008060a0878903121561331b57600080fd5b863567ffffffffffffffff81111561333257600080fd5b61333e89828a01612f91565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561336957600080fd5b61337589828a0161305d565b909450925050608087013567ffffffffffffffff81111561321457600080fd5b600080604083850312156133a857600080fd5b82356133b381612ec9565b915060208301356132f781612ec9565b600080604083850312156133d657600080fd5b82356133e181612ec9565b9150602083013567ffffffffffffffff8111156133fd57600080fd5b61340985828601612f91565b9150509250929050565b6000806040838503121561342657600080fd5b823561343181612ec9565b9150602083013567ffffffffffffffff81111561344d57600080fd5b61340985828601612ede565b6000806000806080858703121561346f57600080fd5b843567ffffffffffffffff81111561348657600080fd5b61349287828801612f91565b9450506020850135925060408501356134aa81612ec9565b9150606085013567ffffffffffffffff8111156134c657600080fd5b612f56878288016130a6565b600080600080608085870312156134e857600080fd5b843567ffffffffffffffff8111156134ff57600080fd5b61350b87828801612f91565b9450506020850135925060408501359150606085013567ffffffffffffffff8111156134c657600080fd5b60005b83811015613551578181015183820152602001613539565b50506000910152565b60008151808452613572816020860160208601613536565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122c6602083018461355a565b60008060008060008060a087890312156135d057600080fd5b863567ffffffffffffffff8111156135e757600080fd5b6135f389828a01612ede565b965050602087013561360481612ec9565b945060408701359350606087013561361b81612ec9565b9250608087013567ffffffffffffffff81111561363757600080fd5b61364389828a0161305d565b979a9699509497509295939492505050565b60008060006060848603121561366a57600080fd5b833561367581612ec9565b925060208401359150604084013561368c81612ec9565b809150509250925092565b801515811461131057600080fd5b6000602082840312156136b757600080fd5b81516122c681613697565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f757600080fd5b830160208101925035905067ffffffffffffffff81111561371757600080fd5b80360382131561309f57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561378081612ec9565b6001600160a01b038116602084015250602083013567ffffffffffffffff81168082146137ac57600080fd5b80604085015250506137c160408401846136c2565b606080850152612d8f608085018284613726565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261380a57600080fd5b83018035915067ffffffffffffffff82111561382557600080fd5b60200191503681900382131561309f57600080fd5b808201808211156107a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561388657600080fd5b5051919050565b6000813561389a81612ec9565b6001600160a01b0316835260208201356138b381613697565b1515602084015260408201356138c881612ec9565b6001600160a01b031660408401526138e360608301836136c2565b60a060608601526138f860a086018284613726565b6080948501359590940194909452509092915050565b6101008152600061392361010083018c61355a565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a0840152613957818789613726565b90508460c084015282810360e0840152613971818561388d565b9c9b505050505050505050505050565b6000806040838503121561399457600080fd5b825161399f81612ec9565b6020939093015192949293505050565b6080815260006139c2608083018861355a565b82810360208401526139d5818789613726565b905084604084015282810360608401526139ef818561388d565b98975050505050505050565b608081526000613a0b87886136c2565b60606080850152613a2060e085018284613726565b9150506020880135613a3181612ec9565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526139ef818587613726565b61010081526000613a8161010083018a61355a565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e085015250613acc602082018561388d565b9a9950505050505050505050565b60008251613aec818460208701613536565b919091019291505056fea2646970667358221220f71bd58ca9f5b156fdd36da2e6242c5e39c6ce1c972a51f93d45335cd01aa5a664736f6c634300081a0033", +} + +// GatewayZEVMUpgradeTestABI is the input ABI used to generate the binding from. +// Deprecated: Use GatewayZEVMUpgradeTestMetaData.ABI instead. +var GatewayZEVMUpgradeTestABI = GatewayZEVMUpgradeTestMetaData.ABI + +// GatewayZEVMUpgradeTestBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use GatewayZEVMUpgradeTestMetaData.Bin instead. +var GatewayZEVMUpgradeTestBin = GatewayZEVMUpgradeTestMetaData.Bin + +// DeployGatewayZEVMUpgradeTest deploys a new Ethereum contract, binding an instance of GatewayZEVMUpgradeTest to it. +func DeployGatewayZEVMUpgradeTest(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *GatewayZEVMUpgradeTest, error) { + parsed, err := GatewayZEVMUpgradeTestMetaData.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(GatewayZEVMUpgradeTestBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &GatewayZEVMUpgradeTest{GatewayZEVMUpgradeTestCaller: GatewayZEVMUpgradeTestCaller{contract: contract}, GatewayZEVMUpgradeTestTransactor: GatewayZEVMUpgradeTestTransactor{contract: contract}, GatewayZEVMUpgradeTestFilterer: GatewayZEVMUpgradeTestFilterer{contract: contract}}, nil +} + +// GatewayZEVMUpgradeTest is an auto generated Go binding around an Ethereum contract. +type GatewayZEVMUpgradeTest struct { + GatewayZEVMUpgradeTestCaller // Read-only binding to the contract + GatewayZEVMUpgradeTestTransactor // Write-only binding to the contract + GatewayZEVMUpgradeTestFilterer // Log filterer for contract events +} + +// GatewayZEVMUpgradeTestCaller is an auto generated read-only Go binding around an Ethereum contract. +type GatewayZEVMUpgradeTestCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GatewayZEVMUpgradeTestTransactor is an auto generated write-only Go binding around an Ethereum contract. +type GatewayZEVMUpgradeTestTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GatewayZEVMUpgradeTestFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type GatewayZEVMUpgradeTestFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GatewayZEVMUpgradeTestSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type GatewayZEVMUpgradeTestSession struct { + Contract *GatewayZEVMUpgradeTest // 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 +} + +// GatewayZEVMUpgradeTestCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type GatewayZEVMUpgradeTestCallerSession struct { + Contract *GatewayZEVMUpgradeTestCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// GatewayZEVMUpgradeTestTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type GatewayZEVMUpgradeTestTransactorSession struct { + Contract *GatewayZEVMUpgradeTestTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// GatewayZEVMUpgradeTestRaw is an auto generated low-level Go binding around an Ethereum contract. +type GatewayZEVMUpgradeTestRaw struct { + Contract *GatewayZEVMUpgradeTest // Generic contract binding to access the raw methods on +} + +// GatewayZEVMUpgradeTestCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type GatewayZEVMUpgradeTestCallerRaw struct { + Contract *GatewayZEVMUpgradeTestCaller // Generic read-only contract binding to access the raw methods on +} + +// GatewayZEVMUpgradeTestTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type GatewayZEVMUpgradeTestTransactorRaw struct { + Contract *GatewayZEVMUpgradeTestTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewGatewayZEVMUpgradeTest creates a new instance of GatewayZEVMUpgradeTest, bound to a specific deployed contract. +func NewGatewayZEVMUpgradeTest(address common.Address, backend bind.ContractBackend) (*GatewayZEVMUpgradeTest, error) { + contract, err := bindGatewayZEVMUpgradeTest(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &GatewayZEVMUpgradeTest{GatewayZEVMUpgradeTestCaller: GatewayZEVMUpgradeTestCaller{contract: contract}, GatewayZEVMUpgradeTestTransactor: GatewayZEVMUpgradeTestTransactor{contract: contract}, GatewayZEVMUpgradeTestFilterer: GatewayZEVMUpgradeTestFilterer{contract: contract}}, nil +} + +// NewGatewayZEVMUpgradeTestCaller creates a new read-only instance of GatewayZEVMUpgradeTest, bound to a specific deployed contract. +func NewGatewayZEVMUpgradeTestCaller(address common.Address, caller bind.ContractCaller) (*GatewayZEVMUpgradeTestCaller, error) { + contract, err := bindGatewayZEVMUpgradeTest(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &GatewayZEVMUpgradeTestCaller{contract: contract}, nil +} + +// NewGatewayZEVMUpgradeTestTransactor creates a new write-only instance of GatewayZEVMUpgradeTest, bound to a specific deployed contract. +func NewGatewayZEVMUpgradeTestTransactor(address common.Address, transactor bind.ContractTransactor) (*GatewayZEVMUpgradeTestTransactor, error) { + contract, err := bindGatewayZEVMUpgradeTest(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &GatewayZEVMUpgradeTestTransactor{contract: contract}, nil +} + +// NewGatewayZEVMUpgradeTestFilterer creates a new log filterer instance of GatewayZEVMUpgradeTest, bound to a specific deployed contract. +func NewGatewayZEVMUpgradeTestFilterer(address common.Address, filterer bind.ContractFilterer) (*GatewayZEVMUpgradeTestFilterer, error) { + contract, err := bindGatewayZEVMUpgradeTest(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &GatewayZEVMUpgradeTestFilterer{contract: contract}, nil +} + +// bindGatewayZEVMUpgradeTest binds a generic wrapper to an already deployed contract. +func bindGatewayZEVMUpgradeTest(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := GatewayZEVMUpgradeTestMetaData.GetAbi() + 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 (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _GatewayZEVMUpgradeTest.Contract.GatewayZEVMUpgradeTestCaller.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 (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.GatewayZEVMUpgradeTestTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.GatewayZEVMUpgradeTestTransactor.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 (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _GatewayZEVMUpgradeTest.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 (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.contract.Transact(opts, method, params...) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _GatewayZEVMUpgradeTest.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) DEFAULTADMINROLE() ([32]byte, error) { + return _GatewayZEVMUpgradeTest.Contract.DEFAULTADMINROLE(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _GatewayZEVMUpgradeTest.Contract.DEFAULTADMINROLE(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// FUNGIBLEMODULEADDRESS is a free data retrieval call binding the contract method 0x3ce4a5bc. +// +// Solidity: function FUNGIBLE_MODULE_ADDRESS() view returns(address) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCaller) FUNGIBLEMODULEADDRESS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _GatewayZEVMUpgradeTest.contract.Call(opts, &out, "FUNGIBLE_MODULE_ADDRESS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// FUNGIBLEMODULEADDRESS is a free data retrieval call binding the contract method 0x3ce4a5bc. +// +// Solidity: function FUNGIBLE_MODULE_ADDRESS() view returns(address) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) FUNGIBLEMODULEADDRESS() (common.Address, error) { + return _GatewayZEVMUpgradeTest.Contract.FUNGIBLEMODULEADDRESS(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// FUNGIBLEMODULEADDRESS is a free data retrieval call binding the contract method 0x3ce4a5bc. +// +// Solidity: function FUNGIBLE_MODULE_ADDRESS() view returns(address) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCallerSession) FUNGIBLEMODULEADDRESS() (common.Address, error) { + return _GatewayZEVMUpgradeTest.Contract.FUNGIBLEMODULEADDRESS(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// MAXMESSAGESIZE is a free data retrieval call binding the contract method 0x97d340f5. +// +// Solidity: function MAX_MESSAGE_SIZE() view returns(uint256) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCaller) MAXMESSAGESIZE(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GatewayZEVMUpgradeTest.contract.Call(opts, &out, "MAX_MESSAGE_SIZE") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXMESSAGESIZE is a free data retrieval call binding the contract method 0x97d340f5. +// +// Solidity: function MAX_MESSAGE_SIZE() view returns(uint256) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) MAXMESSAGESIZE() (*big.Int, error) { + return _GatewayZEVMUpgradeTest.Contract.MAXMESSAGESIZE(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// MAXMESSAGESIZE is a free data retrieval call binding the contract method 0x97d340f5. +// +// Solidity: function MAX_MESSAGE_SIZE() view returns(uint256) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCallerSession) MAXMESSAGESIZE() (*big.Int, error) { + return _GatewayZEVMUpgradeTest.Contract.MAXMESSAGESIZE(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _GatewayZEVMUpgradeTest.contract.Call(opts, &out, "PAUSER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) PAUSERROLE() ([32]byte, error) { + return _GatewayZEVMUpgradeTest.Contract.PAUSERROLE(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCallerSession) PAUSERROLE() ([32]byte, error) { + return _GatewayZEVMUpgradeTest.Contract.PAUSERROLE(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _GatewayZEVMUpgradeTest.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) UPGRADEINTERFACEVERSION() (string, error) { + return _GatewayZEVMUpgradeTest.Contract.UPGRADEINTERFACEVERSION(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCallerSession) UPGRADEINTERFACEVERSION() (string, error) { + return _GatewayZEVMUpgradeTest.Contract.UPGRADEINTERFACEVERSION(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _GatewayZEVMUpgradeTest.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _GatewayZEVMUpgradeTest.Contract.GetRoleAdmin(&_GatewayZEVMUpgradeTest.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _GatewayZEVMUpgradeTest.Contract.GetRoleAdmin(&_GatewayZEVMUpgradeTest.CallOpts, role) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _GatewayZEVMUpgradeTest.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _GatewayZEVMUpgradeTest.Contract.HasRole(&_GatewayZEVMUpgradeTest.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _GatewayZEVMUpgradeTest.Contract.HasRole(&_GatewayZEVMUpgradeTest.CallOpts, role, account) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _GatewayZEVMUpgradeTest.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 (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) Paused() (bool, error) { + return _GatewayZEVMUpgradeTest.Contract.Paused(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCallerSession) Paused() (bool, error) { + return _GatewayZEVMUpgradeTest.Contract.Paused(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _GatewayZEVMUpgradeTest.contract.Call(opts, &out, "proxiableUUID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) ProxiableUUID() ([32]byte, error) { + return _GatewayZEVMUpgradeTest.Contract.ProxiableUUID(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCallerSession) ProxiableUUID() ([32]byte, error) { + return _GatewayZEVMUpgradeTest.Contract.ProxiableUUID(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _GatewayZEVMUpgradeTest.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _GatewayZEVMUpgradeTest.Contract.SupportsInterface(&_GatewayZEVMUpgradeTest.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _GatewayZEVMUpgradeTest.Contract.SupportsInterface(&_GatewayZEVMUpgradeTest.CallOpts, interfaceId) +} + +// ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. +// +// Solidity: function zetaToken() view returns(address) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCaller) ZetaToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _GatewayZEVMUpgradeTest.contract.Call(opts, &out, "zetaToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. +// +// Solidity: function zetaToken() view returns(address) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) ZetaToken() (common.Address, error) { + return _GatewayZEVMUpgradeTest.Contract.ZetaToken(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. +// +// Solidity: function zetaToken() view returns(address) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestCallerSession) ZetaToken() (common.Address, error) { + return _GatewayZEVMUpgradeTest.Contract.ZetaToken(&_GatewayZEVMUpgradeTest.CallOpts) +} + +// Call is a paid mutator transaction binding the contract method 0x1cb5ea75. +// +// Solidity: function call(bytes receiver, address zrc20, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) Call(opts *bind.TransactOpts, receiver []byte, zrc20 common.Address, message []byte, gasLimit *big.Int, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "call", receiver, zrc20, message, gasLimit, revertOptions) +} + +// Call is a paid mutator transaction binding the contract method 0x1cb5ea75. +// +// Solidity: function call(bytes receiver, address zrc20, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) Call(receiver []byte, zrc20 common.Address, message []byte, gasLimit *big.Int, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Call(&_GatewayZEVMUpgradeTest.TransactOpts, receiver, zrc20, message, gasLimit, revertOptions) +} + +// Call is a paid mutator transaction binding the contract method 0x1cb5ea75. +// +// Solidity: function call(bytes receiver, address zrc20, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) Call(receiver []byte, zrc20 common.Address, message []byte, gasLimit *big.Int, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Call(&_GatewayZEVMUpgradeTest.TransactOpts, receiver, zrc20, message, gasLimit, revertOptions) +} + +// Deposit is a paid mutator transaction binding the contract method 0xf45346dc. +// +// Solidity: function deposit(address zrc20, uint256 amount, address target) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) Deposit(opts *bind.TransactOpts, zrc20 common.Address, amount *big.Int, target common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "deposit", zrc20, amount, target) +} + +// Deposit is a paid mutator transaction binding the contract method 0xf45346dc. +// +// Solidity: function deposit(address zrc20, uint256 amount, address target) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) Deposit(zrc20 common.Address, amount *big.Int, target common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Deposit(&_GatewayZEVMUpgradeTest.TransactOpts, zrc20, amount, target) +} + +// Deposit is a paid mutator transaction binding the contract method 0xf45346dc. +// +// Solidity: function deposit(address zrc20, uint256 amount, address target) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) Deposit(zrc20 common.Address, amount *big.Int, target common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Deposit(&_GatewayZEVMUpgradeTest.TransactOpts, zrc20, amount, target) +} + +// DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. +// +// Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) DepositAndCall(opts *bind.TransactOpts, context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "depositAndCall", context, amount, target, message) +} + +// DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. +// +// Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) DepositAndCall(context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.DepositAndCall(&_GatewayZEVMUpgradeTest.TransactOpts, context, amount, target, message) +} + +// DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. +// +// Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) DepositAndCall(context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.DepositAndCall(&_GatewayZEVMUpgradeTest.TransactOpts, context, amount, target, message) +} + +// DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. +// +// Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) DepositAndCall0(opts *bind.TransactOpts, context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "depositAndCall0", context, zrc20, amount, target, message) +} + +// DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. +// +// Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) DepositAndCall0(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.DepositAndCall0(&_GatewayZEVMUpgradeTest.TransactOpts, context, zrc20, amount, target, message) +} + +// DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. +// +// Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) DepositAndCall0(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.DepositAndCall0(&_GatewayZEVMUpgradeTest.TransactOpts, context, zrc20, amount, target, message) +} + +// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. +// +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) DepositAndRevert(opts *bind.TransactOpts, zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "depositAndRevert", zrc20, amount, target, revertContext) +} + +// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. +// +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) DepositAndRevert(zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.DepositAndRevert(&_GatewayZEVMUpgradeTest.TransactOpts, zrc20, amount, target, revertContext) +} + +// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. +// +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) DepositAndRevert(zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.DepositAndRevert(&_GatewayZEVMUpgradeTest.TransactOpts, zrc20, amount, target, revertContext) +} + +// Execute is a paid mutator transaction binding the contract method 0xbcf7f32b. +// +// Solidity: function execute((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) Execute(opts *bind.TransactOpts, context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "execute", context, zrc20, amount, target, message) +} + +// Execute is a paid mutator transaction binding the contract method 0xbcf7f32b. +// +// Solidity: function execute((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) Execute(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Execute(&_GatewayZEVMUpgradeTest.TransactOpts, context, zrc20, amount, target, message) +} + +// Execute is a paid mutator transaction binding the contract method 0xbcf7f32b. +// +// Solidity: function execute((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) Execute(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Execute(&_GatewayZEVMUpgradeTest.TransactOpts, context, zrc20, amount, target, message) +} + +// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. +// +// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) ExecuteRevert(opts *bind.TransactOpts, target common.Address, revertContext RevertContext) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "executeRevert", target, revertContext) +} + +// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. +// +// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) ExecuteRevert(target common.Address, revertContext RevertContext) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.ExecuteRevert(&_GatewayZEVMUpgradeTest.TransactOpts, target, revertContext) +} + +// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. +// +// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) ExecuteRevert(target common.Address, revertContext RevertContext) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.ExecuteRevert(&_GatewayZEVMUpgradeTest.TransactOpts, target, revertContext) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.GrantRole(&_GatewayZEVMUpgradeTest.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.GrantRole(&_GatewayZEVMUpgradeTest.TransactOpts, role, account) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address zetaToken_, address admin_) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) Initialize(opts *bind.TransactOpts, zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "initialize", zetaToken_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address zetaToken_, address admin_) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) Initialize(zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Initialize(&_GatewayZEVMUpgradeTest.TransactOpts, zetaToken_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address zetaToken_, address admin_) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) Initialize(zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Initialize(&_GatewayZEVMUpgradeTest.TransactOpts, zetaToken_, admin_) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) Pause() (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Pause(&_GatewayZEVMUpgradeTest.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) Pause() (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Pause(&_GatewayZEVMUpgradeTest.TransactOpts) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "renounceRole", role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.RenounceRole(&_GatewayZEVMUpgradeTest.TransactOpts, role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.RenounceRole(&_GatewayZEVMUpgradeTest.TransactOpts, role, callerConfirmation) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.RevokeRole(&_GatewayZEVMUpgradeTest.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.RevokeRole(&_GatewayZEVMUpgradeTest.TransactOpts, role, account) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) Unpause() (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Unpause(&_GatewayZEVMUpgradeTest.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) Unpause() (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Unpause(&_GatewayZEVMUpgradeTest.TransactOpts) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.UpgradeToAndCall(&_GatewayZEVMUpgradeTest.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.UpgradeToAndCall(&_GatewayZEVMUpgradeTest.TransactOpts, newImplementation, data) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x7c0dcb5f. +// +// Solidity: function withdraw(bytes receiver, uint256 amount, address zrc20, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) Withdraw(opts *bind.TransactOpts, receiver []byte, amount *big.Int, zrc20 common.Address, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "withdraw", receiver, amount, zrc20, revertOptions) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x7c0dcb5f. +// +// Solidity: function withdraw(bytes receiver, uint256 amount, address zrc20, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) Withdraw(receiver []byte, amount *big.Int, zrc20 common.Address, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Withdraw(&_GatewayZEVMUpgradeTest.TransactOpts, receiver, amount, zrc20, revertOptions) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x7c0dcb5f. +// +// Solidity: function withdraw(bytes receiver, uint256 amount, address zrc20, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) Withdraw(receiver []byte, amount *big.Int, zrc20 common.Address, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Withdraw(&_GatewayZEVMUpgradeTest.TransactOpts, receiver, amount, zrc20, revertOptions) +} + +// Withdraw0 is a paid mutator transaction binding the contract method 0x97a1cef1. +// +// Solidity: function withdraw(bytes receiver, uint256 amount, uint256 chainId, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) Withdraw0(opts *bind.TransactOpts, receiver []byte, amount *big.Int, chainId *big.Int, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "withdraw0", receiver, amount, chainId, revertOptions) +} + +// Withdraw0 is a paid mutator transaction binding the contract method 0x97a1cef1. +// +// Solidity: function withdraw(bytes receiver, uint256 amount, uint256 chainId, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) Withdraw0(receiver []byte, amount *big.Int, chainId *big.Int, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Withdraw0(&_GatewayZEVMUpgradeTest.TransactOpts, receiver, amount, chainId, revertOptions) +} + +// Withdraw0 is a paid mutator transaction binding the contract method 0x97a1cef1. +// +// Solidity: function withdraw(bytes receiver, uint256 amount, uint256 chainId, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) Withdraw0(receiver []byte, amount *big.Int, chainId *big.Int, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Withdraw0(&_GatewayZEVMUpgradeTest.TransactOpts, receiver, amount, chainId, revertOptions) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x048ae42c. +// +// Solidity: function withdrawAndCall(bytes receiver, uint256 amount, address zrc20, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) WithdrawAndCall(opts *bind.TransactOpts, receiver []byte, amount *big.Int, zrc20 common.Address, message []byte, gasLimit *big.Int, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "withdrawAndCall", receiver, amount, zrc20, message, gasLimit, revertOptions) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x048ae42c. +// +// Solidity: function withdrawAndCall(bytes receiver, uint256 amount, address zrc20, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) WithdrawAndCall(receiver []byte, amount *big.Int, zrc20 common.Address, message []byte, gasLimit *big.Int, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.WithdrawAndCall(&_GatewayZEVMUpgradeTest.TransactOpts, receiver, amount, zrc20, message, gasLimit, revertOptions) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x048ae42c. +// +// Solidity: function withdrawAndCall(bytes receiver, uint256 amount, address zrc20, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) WithdrawAndCall(receiver []byte, amount *big.Int, zrc20 common.Address, message []byte, gasLimit *big.Int, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.WithdrawAndCall(&_GatewayZEVMUpgradeTest.TransactOpts, receiver, amount, zrc20, message, gasLimit, revertOptions) +} + +// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0x3b283933. +// +// Solidity: function withdrawAndCall(bytes receiver, uint256 amount, uint256 chainId, bytes message, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) WithdrawAndCall0(opts *bind.TransactOpts, receiver []byte, amount *big.Int, chainId *big.Int, message []byte, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.contract.Transact(opts, "withdrawAndCall0", receiver, amount, chainId, message, revertOptions) +} + +// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0x3b283933. +// +// Solidity: function withdrawAndCall(bytes receiver, uint256 amount, uint256 chainId, bytes message, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) WithdrawAndCall0(receiver []byte, amount *big.Int, chainId *big.Int, message []byte, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.WithdrawAndCall0(&_GatewayZEVMUpgradeTest.TransactOpts, receiver, amount, chainId, message, revertOptions) +} + +// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0x3b283933. +// +// Solidity: function withdrawAndCall(bytes receiver, uint256 amount, uint256 chainId, bytes message, (address,bool,address,bytes,uint256) revertOptions) returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) WithdrawAndCall0(receiver []byte, amount *big.Int, chainId *big.Int, message []byte, revertOptions RevertOptions) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.WithdrawAndCall0(&_GatewayZEVMUpgradeTest.TransactOpts, receiver, amount, chainId, message, revertOptions) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.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 (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) Receive() (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Receive(&_GatewayZEVMUpgradeTest.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) Receive() (*types.Transaction, error) { + return _GatewayZEVMUpgradeTest.Contract.Receive(&_GatewayZEVMUpgradeTest.TransactOpts) +} + +// GatewayZEVMUpgradeTestCalledIterator is returned from FilterCalled and is used to iterate over the raw logs and unpacked data for Called events raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestCalledIterator struct { + Event *GatewayZEVMUpgradeTestCalled // 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 *GatewayZEVMUpgradeTestCalledIterator) 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(GatewayZEVMUpgradeTestCalled) + 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(GatewayZEVMUpgradeTestCalled) + 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 *GatewayZEVMUpgradeTestCalledIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GatewayZEVMUpgradeTestCalledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GatewayZEVMUpgradeTestCalled represents a Called event raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestCalled struct { + Sender common.Address + Zrc20 common.Address + Receiver []byte + Message []byte + GasLimit *big.Int + RevertOptions RevertOptions + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCalled is a free log retrieval operation binding the contract event 0x6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf. +// +// Solidity: event Called(address indexed sender, address indexed zrc20, bytes receiver, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) FilterCalled(opts *bind.FilterOpts, sender []common.Address, zrc20 []common.Address) (*GatewayZEVMUpgradeTestCalledIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var zrc20Rule []interface{} + for _, zrc20Item := range zrc20 { + zrc20Rule = append(zrc20Rule, zrc20Item) + } + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.FilterLogs(opts, "Called", senderRule, zrc20Rule) + if err != nil { + return nil, err + } + return &GatewayZEVMUpgradeTestCalledIterator{contract: _GatewayZEVMUpgradeTest.contract, event: "Called", logs: logs, sub: sub}, nil +} + +// WatchCalled is a free log subscription operation binding the contract event 0x6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf. +// +// Solidity: event Called(address indexed sender, address indexed zrc20, bytes receiver, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) WatchCalled(opts *bind.WatchOpts, sink chan<- *GatewayZEVMUpgradeTestCalled, sender []common.Address, zrc20 []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var zrc20Rule []interface{} + for _, zrc20Item := range zrc20 { + zrc20Rule = append(zrc20Rule, zrc20Item) + } + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.WatchLogs(opts, "Called", senderRule, zrc20Rule) + 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(GatewayZEVMUpgradeTestCalled) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "Called", 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 +} + +// ParseCalled is a log parse operation binding the contract event 0x6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf. +// +// Solidity: event Called(address indexed sender, address indexed zrc20, bytes receiver, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) ParseCalled(log types.Log) (*GatewayZEVMUpgradeTestCalled, error) { + event := new(GatewayZEVMUpgradeTestCalled) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "Called", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GatewayZEVMUpgradeTestInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestInitializedIterator struct { + Event *GatewayZEVMUpgradeTestInitialized // 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 *GatewayZEVMUpgradeTestInitializedIterator) 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(GatewayZEVMUpgradeTestInitialized) + 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(GatewayZEVMUpgradeTestInitialized) + 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 *GatewayZEVMUpgradeTestInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GatewayZEVMUpgradeTestInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GatewayZEVMUpgradeTestInitialized represents a Initialized event raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) FilterInitialized(opts *bind.FilterOpts) (*GatewayZEVMUpgradeTestInitializedIterator, error) { + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &GatewayZEVMUpgradeTestInitializedIterator{contract: _GatewayZEVMUpgradeTest.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *GatewayZEVMUpgradeTestInitialized) (event.Subscription, error) { + + logs, sub, err := _GatewayZEVMUpgradeTest.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(GatewayZEVMUpgradeTestInitialized) + if err := _GatewayZEVMUpgradeTest.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 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) ParseInitialized(log types.Log) (*GatewayZEVMUpgradeTestInitialized, error) { + event := new(GatewayZEVMUpgradeTestInitialized) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GatewayZEVMUpgradeTestPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestPausedIterator struct { + Event *GatewayZEVMUpgradeTestPaused // 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 *GatewayZEVMUpgradeTestPausedIterator) 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(GatewayZEVMUpgradeTestPaused) + 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(GatewayZEVMUpgradeTestPaused) + 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 *GatewayZEVMUpgradeTestPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GatewayZEVMUpgradeTestPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GatewayZEVMUpgradeTestPaused represents a Paused event raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestPaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) FilterPaused(opts *bind.FilterOpts) (*GatewayZEVMUpgradeTestPausedIterator, error) { + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &GatewayZEVMUpgradeTestPausedIterator{contract: _GatewayZEVMUpgradeTest.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *GatewayZEVMUpgradeTestPaused) (event.Subscription, error) { + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.WatchLogs(opts, "Paused") + 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(GatewayZEVMUpgradeTestPaused) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "Paused", 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 +} + +// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) ParsePaused(log types.Log) (*GatewayZEVMUpgradeTestPaused, error) { + event := new(GatewayZEVMUpgradeTestPaused) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GatewayZEVMUpgradeTestRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestRoleAdminChangedIterator struct { + Event *GatewayZEVMUpgradeTestRoleAdminChanged // 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 *GatewayZEVMUpgradeTestRoleAdminChangedIterator) 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(GatewayZEVMUpgradeTestRoleAdminChanged) + 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(GatewayZEVMUpgradeTestRoleAdminChanged) + 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 *GatewayZEVMUpgradeTestRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GatewayZEVMUpgradeTestRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GatewayZEVMUpgradeTestRoleAdminChanged represents a RoleAdminChanged event raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*GatewayZEVMUpgradeTestRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &GatewayZEVMUpgradeTestRoleAdminChangedIterator{contract: _GatewayZEVMUpgradeTest.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *GatewayZEVMUpgradeTestRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(GatewayZEVMUpgradeTestRoleAdminChanged) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "RoleAdminChanged", 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 +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) ParseRoleAdminChanged(log types.Log) (*GatewayZEVMUpgradeTestRoleAdminChanged, error) { + event := new(GatewayZEVMUpgradeTestRoleAdminChanged) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GatewayZEVMUpgradeTestRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestRoleGrantedIterator struct { + Event *GatewayZEVMUpgradeTestRoleGranted // 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 *GatewayZEVMUpgradeTestRoleGrantedIterator) 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(GatewayZEVMUpgradeTestRoleGranted) + 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(GatewayZEVMUpgradeTestRoleGranted) + 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 *GatewayZEVMUpgradeTestRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GatewayZEVMUpgradeTestRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GatewayZEVMUpgradeTestRoleGranted represents a RoleGranted event raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*GatewayZEVMUpgradeTestRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &GatewayZEVMUpgradeTestRoleGrantedIterator{contract: _GatewayZEVMUpgradeTest.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *GatewayZEVMUpgradeTestRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + 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(GatewayZEVMUpgradeTestRoleGranted) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "RoleGranted", 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 +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) ParseRoleGranted(log types.Log) (*GatewayZEVMUpgradeTestRoleGranted, error) { + event := new(GatewayZEVMUpgradeTestRoleGranted) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GatewayZEVMUpgradeTestRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestRoleRevokedIterator struct { + Event *GatewayZEVMUpgradeTestRoleRevoked // 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 *GatewayZEVMUpgradeTestRoleRevokedIterator) 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(GatewayZEVMUpgradeTestRoleRevoked) + 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(GatewayZEVMUpgradeTestRoleRevoked) + 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 *GatewayZEVMUpgradeTestRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GatewayZEVMUpgradeTestRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GatewayZEVMUpgradeTestRoleRevoked represents a RoleRevoked event raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*GatewayZEVMUpgradeTestRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &GatewayZEVMUpgradeTestRoleRevokedIterator{contract: _GatewayZEVMUpgradeTest.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *GatewayZEVMUpgradeTestRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + 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(GatewayZEVMUpgradeTestRoleRevoked) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "RoleRevoked", 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 +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) ParseRoleRevoked(log types.Log) (*GatewayZEVMUpgradeTestRoleRevoked, error) { + event := new(GatewayZEVMUpgradeTestRoleRevoked) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GatewayZEVMUpgradeTestUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestUnpausedIterator struct { + Event *GatewayZEVMUpgradeTestUnpaused // 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 *GatewayZEVMUpgradeTestUnpausedIterator) 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(GatewayZEVMUpgradeTestUnpaused) + 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(GatewayZEVMUpgradeTestUnpaused) + 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 *GatewayZEVMUpgradeTestUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GatewayZEVMUpgradeTestUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GatewayZEVMUpgradeTestUnpaused represents a Unpaused event raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestUnpaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) FilterUnpaused(opts *bind.FilterOpts) (*GatewayZEVMUpgradeTestUnpausedIterator, error) { + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return &GatewayZEVMUpgradeTestUnpausedIterator{contract: _GatewayZEVMUpgradeTest.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *GatewayZEVMUpgradeTestUnpaused) (event.Subscription, error) { + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.WatchLogs(opts, "Unpaused") + 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(GatewayZEVMUpgradeTestUnpaused) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "Unpaused", 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 +} + +// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) ParseUnpaused(log types.Log) (*GatewayZEVMUpgradeTestUnpaused, error) { + event := new(GatewayZEVMUpgradeTestUnpaused) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GatewayZEVMUpgradeTestUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestUpgradedIterator struct { + Event *GatewayZEVMUpgradeTestUpgraded // 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 *GatewayZEVMUpgradeTestUpgradedIterator) 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(GatewayZEVMUpgradeTestUpgraded) + 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(GatewayZEVMUpgradeTestUpgraded) + 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 *GatewayZEVMUpgradeTestUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GatewayZEVMUpgradeTestUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GatewayZEVMUpgradeTestUpgraded represents a Upgraded event raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*GatewayZEVMUpgradeTestUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &GatewayZEVMUpgradeTestUpgradedIterator{contract: _GatewayZEVMUpgradeTest.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *GatewayZEVMUpgradeTestUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.WatchLogs(opts, "Upgraded", implementationRule) + 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(GatewayZEVMUpgradeTestUpgraded) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "Upgraded", 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 +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) ParseUpgraded(log types.Log) (*GatewayZEVMUpgradeTestUpgraded, error) { + event := new(GatewayZEVMUpgradeTestUpgraded) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GatewayZEVMUpgradeTestWithdrawnIterator is returned from FilterWithdrawn and is used to iterate over the raw logs and unpacked data for Withdrawn events raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestWithdrawnIterator struct { + Event *GatewayZEVMUpgradeTestWithdrawn // 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 *GatewayZEVMUpgradeTestWithdrawnIterator) 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(GatewayZEVMUpgradeTestWithdrawn) + 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(GatewayZEVMUpgradeTestWithdrawn) + 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 *GatewayZEVMUpgradeTestWithdrawnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GatewayZEVMUpgradeTestWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GatewayZEVMUpgradeTestWithdrawn represents a Withdrawn event raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestWithdrawn struct { + Sender common.Address + ChainId *big.Int + Receiver []byte + Zrc20 common.Address + Value *big.Int + Gasfee *big.Int + ProtocolFlatFee *big.Int + Message []byte + GasLimit *big.Int + RevertOptions RevertOptions + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawn is a free log retrieval operation binding the contract event 0xda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d. +// +// Solidity: event Withdrawn(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) FilterWithdrawn(opts *bind.FilterOpts, sender []common.Address, chainId []*big.Int) (*GatewayZEVMUpgradeTestWithdrawnIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) + } + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.FilterLogs(opts, "Withdrawn", senderRule, chainIdRule) + if err != nil { + return nil, err + } + return &GatewayZEVMUpgradeTestWithdrawnIterator{contract: _GatewayZEVMUpgradeTest.contract, event: "Withdrawn", logs: logs, sub: sub}, nil +} + +// WatchWithdrawn is a free log subscription operation binding the contract event 0xda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d. +// +// Solidity: event Withdrawn(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) WatchWithdrawn(opts *bind.WatchOpts, sink chan<- *GatewayZEVMUpgradeTestWithdrawn, sender []common.Address, chainId []*big.Int) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) + } + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.WatchLogs(opts, "Withdrawn", senderRule, chainIdRule) + 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(GatewayZEVMUpgradeTestWithdrawn) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "Withdrawn", 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 +} + +// ParseWithdrawn is a log parse operation binding the contract event 0xda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d. +// +// Solidity: event Withdrawn(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) ParseWithdrawn(log types.Log) (*GatewayZEVMUpgradeTestWithdrawn, error) { + event := new(GatewayZEVMUpgradeTestWithdrawn) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "Withdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GatewayZEVMUpgradeTestWithdrawnV2Iterator is returned from FilterWithdrawnV2 and is used to iterate over the raw logs and unpacked data for WithdrawnV2 events raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestWithdrawnV2Iterator struct { + Event *GatewayZEVMUpgradeTestWithdrawnV2 // 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 *GatewayZEVMUpgradeTestWithdrawnV2Iterator) 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(GatewayZEVMUpgradeTestWithdrawnV2) + 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(GatewayZEVMUpgradeTestWithdrawnV2) + 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 *GatewayZEVMUpgradeTestWithdrawnV2Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GatewayZEVMUpgradeTestWithdrawnV2Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GatewayZEVMUpgradeTestWithdrawnV2 represents a WithdrawnV2 event raised by the GatewayZEVMUpgradeTest contract. +type GatewayZEVMUpgradeTestWithdrawnV2 struct { + Sender common.Address + ChainId *big.Int + Receiver []byte + Zrc20 common.Address + Value *big.Int + Gasfee *big.Int + ProtocolFlatFee *big.Int + Message []byte + GasLimit *big.Int + RevertOptions RevertOptions + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnV2 is a free log retrieval operation binding the contract event 0x3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d35578. +// +// Solidity: event WithdrawnV2(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) FilterWithdrawnV2(opts *bind.FilterOpts, sender []common.Address, chainId []*big.Int) (*GatewayZEVMUpgradeTestWithdrawnV2Iterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) + } + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.FilterLogs(opts, "WithdrawnV2", senderRule, chainIdRule) + if err != nil { + return nil, err + } + return &GatewayZEVMUpgradeTestWithdrawnV2Iterator{contract: _GatewayZEVMUpgradeTest.contract, event: "WithdrawnV2", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnV2 is a free log subscription operation binding the contract event 0x3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d35578. +// +// Solidity: event WithdrawnV2(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) WatchWithdrawnV2(opts *bind.WatchOpts, sink chan<- *GatewayZEVMUpgradeTestWithdrawnV2, sender []common.Address, chainId []*big.Int) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) + } + + logs, sub, err := _GatewayZEVMUpgradeTest.contract.WatchLogs(opts, "WithdrawnV2", senderRule, chainIdRule) + 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(GatewayZEVMUpgradeTestWithdrawnV2) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "WithdrawnV2", 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 +} + +// ParseWithdrawnV2 is a log parse operation binding the contract event 0x3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d35578. +// +// Solidity: event WithdrawnV2(address indexed sender, uint256 indexed chainId, bytes receiver, address zrc20, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message, uint256 gasLimit, (address,bool,address,bytes,uint256) revertOptions) +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestFilterer) ParseWithdrawnV2(log types.Log) (*GatewayZEVMUpgradeTestWithdrawnV2, error) { + event := new(GatewayZEVMUpgradeTestWithdrawnV2) + if err := _GatewayZEVMUpgradeTest.contract.UnpackLog(event, "WithdrawnV2", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/v2/pkg/ierc20custody.sol/ierc20custody.go b/v2/pkg/ierc20custody.sol/ierc20custody.go index 52ad350fc..35306f86a 100644 --- a/v2/pkg/ierc20custody.sol/ierc20custody.go +++ b/v2/pkg/ierc20custody.sol/ierc20custody.go @@ -32,13 +32,13 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } // IERC20CustodyMetaData contains all meta data concerning the IERC20Custody contract. var IERC20CustodyMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", } // IERC20CustodyABI is the input ABI used to generate the binding from. @@ -260,23 +260,23 @@ func (_IERC20Custody *IERC20CustodyTransactorSession) WithdrawAndCall(token comm return _IERC20Custody.Contract.WithdrawAndCall(&_IERC20Custody.TransactOpts, token, to, amount, data) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x7ab697e7. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. // -// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_IERC20Custody *IERC20CustodyTransactor) WithdrawAndRevert(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IERC20Custody.contract.Transact(opts, "withdrawAndRevert", token, to, amount, data, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x7ab697e7. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. // -// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_IERC20Custody *IERC20CustodySession) WithdrawAndRevert(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IERC20Custody.Contract.WithdrawAndRevert(&_IERC20Custody.TransactOpts, token, to, amount, data, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x7ab697e7. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. // -// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_IERC20Custody *IERC20CustodyTransactorSession) WithdrawAndRevert(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IERC20Custody.Contract.WithdrawAndRevert(&_IERC20Custody.TransactOpts, token, to, amount, data, revertContext) } @@ -641,13 +641,14 @@ func (it *IERC20CustodyUpdatedCustodyTSSAddressIterator) Close() error { // IERC20CustodyUpdatedCustodyTSSAddress represents a UpdatedCustodyTSSAddress event raised by the IERC20Custody contract. type IERC20CustodyUpdatedCustodyTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedCustodyTSSAddress is a free log retrieval operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// FilterUpdatedCustodyTSSAddress is a free log retrieval operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IERC20Custody *IERC20CustodyFilterer) FilterUpdatedCustodyTSSAddress(opts *bind.FilterOpts) (*IERC20CustodyUpdatedCustodyTSSAddressIterator, error) { logs, sub, err := _IERC20Custody.contract.FilterLogs(opts, "UpdatedCustodyTSSAddress") @@ -657,9 +658,9 @@ func (_IERC20Custody *IERC20CustodyFilterer) FilterUpdatedCustodyTSSAddress(opts return &IERC20CustodyUpdatedCustodyTSSAddressIterator{contract: _IERC20Custody.contract, event: "UpdatedCustodyTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedCustodyTSSAddress is a free log subscription operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// WatchUpdatedCustodyTSSAddress is a free log subscription operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IERC20Custody *IERC20CustodyFilterer) WatchUpdatedCustodyTSSAddress(opts *bind.WatchOpts, sink chan<- *IERC20CustodyUpdatedCustodyTSSAddress) (event.Subscription, error) { logs, sub, err := _IERC20Custody.contract.WatchLogs(opts, "UpdatedCustodyTSSAddress") @@ -694,9 +695,9 @@ func (_IERC20Custody *IERC20CustodyFilterer) WatchUpdatedCustodyTSSAddress(opts }), nil } -// ParseUpdatedCustodyTSSAddress is a log parse operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// ParseUpdatedCustodyTSSAddress is a log parse operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IERC20Custody *IERC20CustodyFilterer) ParseUpdatedCustodyTSSAddress(log types.Log) (*IERC20CustodyUpdatedCustodyTSSAddress, error) { event := new(IERC20CustodyUpdatedCustodyTSSAddress) if err := _IERC20Custody.contract.UnpackLog(event, "UpdatedCustodyTSSAddress", log); err != nil { @@ -1236,9 +1237,9 @@ type IERC20CustodyWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IERC20Custody *IERC20CustodyFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*IERC20CustodyWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -1257,9 +1258,9 @@ func (_IERC20Custody *IERC20CustodyFilterer) FilterWithdrawnAndReverted(opts *bi return &IERC20CustodyWithdrawnAndRevertedIterator{contract: _IERC20Custody.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IERC20Custody *IERC20CustodyFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *IERC20CustodyWithdrawnAndReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -1303,9 +1304,9 @@ func (_IERC20Custody *IERC20CustodyFilterer) WatchWithdrawnAndReverted(opts *bin }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IERC20Custody *IERC20CustodyFilterer) ParseWithdrawnAndReverted(log types.Log) (*IERC20CustodyWithdrawnAndReverted, error) { event := new(IERC20CustodyWithdrawnAndReverted) if err := _IERC20Custody.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/ierc20custody.sol/ierc20custodyevents.go b/v2/pkg/ierc20custody.sol/ierc20custodyevents.go index 6ccd51799..245c59d6b 100644 --- a/v2/pkg/ierc20custody.sol/ierc20custodyevents.go +++ b/v2/pkg/ierc20custody.sol/ierc20custodyevents.go @@ -32,13 +32,13 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } // IERC20CustodyEventsMetaData contains all meta data concerning the IERC20CustodyEvents contract. var IERC20CustodyEventsMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", + ABI: "[{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", } // IERC20CustodyEventsABI is the input ABI used to generate the binding from. @@ -547,13 +547,14 @@ func (it *IERC20CustodyEventsUpdatedCustodyTSSAddressIterator) Close() error { // IERC20CustodyEventsUpdatedCustodyTSSAddress represents a UpdatedCustodyTSSAddress event raised by the IERC20CustodyEvents contract. type IERC20CustodyEventsUpdatedCustodyTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedCustodyTSSAddress is a free log retrieval operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// FilterUpdatedCustodyTSSAddress is a free log retrieval operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) FilterUpdatedCustodyTSSAddress(opts *bind.FilterOpts) (*IERC20CustodyEventsUpdatedCustodyTSSAddressIterator, error) { logs, sub, err := _IERC20CustodyEvents.contract.FilterLogs(opts, "UpdatedCustodyTSSAddress") @@ -563,9 +564,9 @@ func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) FilterUpdatedCustodyTSS return &IERC20CustodyEventsUpdatedCustodyTSSAddressIterator{contract: _IERC20CustodyEvents.contract, event: "UpdatedCustodyTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedCustodyTSSAddress is a free log subscription operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// WatchUpdatedCustodyTSSAddress is a free log subscription operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) WatchUpdatedCustodyTSSAddress(opts *bind.WatchOpts, sink chan<- *IERC20CustodyEventsUpdatedCustodyTSSAddress) (event.Subscription, error) { logs, sub, err := _IERC20CustodyEvents.contract.WatchLogs(opts, "UpdatedCustodyTSSAddress") @@ -600,9 +601,9 @@ func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) WatchUpdatedCustodyTSSA }), nil } -// ParseUpdatedCustodyTSSAddress is a log parse operation binding the contract event 0x086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba. +// ParseUpdatedCustodyTSSAddress is a log parse operation binding the contract event 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6. // -// Solidity: event UpdatedCustodyTSSAddress(address newTSSAddress) +// Solidity: event UpdatedCustodyTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) ParseUpdatedCustodyTSSAddress(log types.Log) (*IERC20CustodyEventsUpdatedCustodyTSSAddress, error) { event := new(IERC20CustodyEventsUpdatedCustodyTSSAddress) if err := _IERC20CustodyEvents.contract.UnpackLog(event, "UpdatedCustodyTSSAddress", log); err != nil { @@ -1142,9 +1143,9 @@ type IERC20CustodyEventsWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*IERC20CustodyEventsWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -1163,9 +1164,9 @@ func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) FilterWithdrawnAndRever return &IERC20CustodyEventsWithdrawnAndRevertedIterator{contract: _IERC20CustodyEvents.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *IERC20CustodyEventsWithdrawnAndReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -1209,9 +1210,9 @@ func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) WatchWithdrawnAndRevert }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) ParseWithdrawnAndReverted(log types.Log) (*IERC20CustodyEventsWithdrawnAndReverted, error) { event := new(IERC20CustodyEventsWithdrawnAndReverted) if err := _IERC20CustodyEvents.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/igatewayevm.sol/igatewayevm.go b/v2/pkg/igatewayevm.sol/igatewayevm.go index 5daaf7d67..9401f292a 100644 --- a/v2/pkg/igatewayevm.sol/igatewayevm.go +++ b/v2/pkg/igatewayevm.sol/igatewayevm.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -47,7 +47,7 @@ type RevertOptions struct { // IGatewayEVMMetaData contains all meta data concerning the IGatewayEVM contract. var IGatewayEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", } // IGatewayEVMABI is the input ABI used to generate the binding from. @@ -322,23 +322,23 @@ func (_IGatewayEVM *IGatewayEVMTransactorSession) Execute(destination common.Add return _IGatewayEVM.Contract.Execute(&_IGatewayEVM.TransactOpts, destination, data) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x14fd2d48. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint256,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() func (_IGatewayEVM *IGatewayEVMTransactor) ExecuteRevert(opts *bind.TransactOpts, destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayEVM.contract.Transact(opts, "executeRevert", destination, data, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x14fd2d48. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint256,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() func (_IGatewayEVM *IGatewayEVMSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayEVM.Contract.ExecuteRevert(&_IGatewayEVM.TransactOpts, destination, data, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x14fd2d48. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint256,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() func (_IGatewayEVM *IGatewayEVMTransactorSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayEVM.Contract.ExecuteRevert(&_IGatewayEVM.TransactOpts, destination, data, revertContext) } @@ -364,23 +364,23 @@ func (_IGatewayEVM *IGatewayEVMTransactorSession) ExecuteWithERC20(token common. return _IGatewayEVM.Contract.ExecuteWithERC20(&_IGatewayEVM.TransactOpts, token, to, amount, data) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xece697b3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_IGatewayEVM *IGatewayEVMTransactor) RevertWithERC20(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayEVM.contract.Transact(opts, "revertWithERC20", token, to, amount, data, revertContext) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xece697b3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_IGatewayEVM *IGatewayEVMSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayEVM.Contract.RevertWithERC20(&_IGatewayEVM.TransactOpts, token, to, amount, data, revertContext) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xece697b3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() func (_IGatewayEVM *IGatewayEVMTransactorSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayEVM.Contract.RevertWithERC20(&_IGatewayEVM.TransactOpts, token, to, amount, data, revertContext) } @@ -1075,9 +1075,9 @@ type IGatewayEVMReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IGatewayEVM *IGatewayEVMFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*IGatewayEVMRevertedIterator, error) { var toRule []interface{} @@ -1096,9 +1096,9 @@ func (_IGatewayEVM *IGatewayEVMFilterer) FilterReverted(opts *bind.FilterOpts, t return &IGatewayEVMRevertedIterator{contract: _IGatewayEVM.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IGatewayEVM *IGatewayEVMFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *IGatewayEVMReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -1142,9 +1142,9 @@ func (_IGatewayEVM *IGatewayEVMFilterer) WatchReverted(opts *bind.WatchOpts, sin }), nil } -// ParseReverted is a log parse operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IGatewayEVM *IGatewayEVMFilterer) ParseReverted(log types.Log) (*IGatewayEVMReverted, error) { event := new(IGatewayEVMReverted) if err := _IGatewayEVM.contract.UnpackLog(event, "Reverted", log); err != nil { @@ -1223,13 +1223,14 @@ func (it *IGatewayEVMUpdatedGatewayTSSAddressIterator) Close() error { // IGatewayEVMUpdatedGatewayTSSAddress represents a UpdatedGatewayTSSAddress event raised by the IGatewayEVM contract. type IGatewayEVMUpdatedGatewayTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IGatewayEVM *IGatewayEVMFilterer) FilterUpdatedGatewayTSSAddress(opts *bind.FilterOpts) (*IGatewayEVMUpdatedGatewayTSSAddressIterator, error) { logs, sub, err := _IGatewayEVM.contract.FilterLogs(opts, "UpdatedGatewayTSSAddress") @@ -1239,9 +1240,9 @@ func (_IGatewayEVM *IGatewayEVMFilterer) FilterUpdatedGatewayTSSAddress(opts *bi return &IGatewayEVMUpdatedGatewayTSSAddressIterator{contract: _IGatewayEVM.contract, event: "UpdatedGatewayTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IGatewayEVM *IGatewayEVMFilterer) WatchUpdatedGatewayTSSAddress(opts *bind.WatchOpts, sink chan<- *IGatewayEVMUpdatedGatewayTSSAddress) (event.Subscription, error) { logs, sub, err := _IGatewayEVM.contract.WatchLogs(opts, "UpdatedGatewayTSSAddress") @@ -1276,9 +1277,9 @@ func (_IGatewayEVM *IGatewayEVMFilterer) WatchUpdatedGatewayTSSAddress(opts *bin }), nil } -// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IGatewayEVM *IGatewayEVMFilterer) ParseUpdatedGatewayTSSAddress(log types.Log) (*IGatewayEVMUpdatedGatewayTSSAddress, error) { event := new(IGatewayEVMUpdatedGatewayTSSAddress) if err := _IGatewayEVM.contract.UnpackLog(event, "UpdatedGatewayTSSAddress", log); err != nil { diff --git a/v2/pkg/igatewayevm.sol/igatewayevmevents.go b/v2/pkg/igatewayevm.sol/igatewayevmevents.go index 1bf174da3..656cb8489 100644 --- a/v2/pkg/igatewayevm.sol/igatewayevmevents.go +++ b/v2/pkg/igatewayevm.sol/igatewayevmevents.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -47,7 +47,7 @@ type RevertOptions struct { // IGatewayEVMEventsMetaData contains all meta data concerning the IGatewayEVMEvents contract. var IGatewayEVMEventsMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false}]", } // IGatewayEVMEventsABI is the input ABI used to generate the binding from. @@ -886,9 +886,9 @@ type IGatewayEVMEventsReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*IGatewayEVMEventsRevertedIterator, error) { var toRule []interface{} @@ -907,9 +907,9 @@ func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) FilterReverted(opts *bind.F return &IGatewayEVMEventsRevertedIterator{contract: _IGatewayEVMEvents.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *IGatewayEVMEventsReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -953,9 +953,9 @@ func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) WatchReverted(opts *bind.Wa }), nil } -// ParseReverted is a log parse operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) ParseReverted(log types.Log) (*IGatewayEVMEventsReverted, error) { event := new(IGatewayEVMEventsReverted) if err := _IGatewayEVMEvents.contract.UnpackLog(event, "Reverted", log); err != nil { @@ -1034,13 +1034,14 @@ func (it *IGatewayEVMEventsUpdatedGatewayTSSAddressIterator) Close() error { // IGatewayEVMEventsUpdatedGatewayTSSAddress represents a UpdatedGatewayTSSAddress event raised by the IGatewayEVMEvents contract. type IGatewayEVMEventsUpdatedGatewayTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) FilterUpdatedGatewayTSSAddress(opts *bind.FilterOpts) (*IGatewayEVMEventsUpdatedGatewayTSSAddressIterator, error) { logs, sub, err := _IGatewayEVMEvents.contract.FilterLogs(opts, "UpdatedGatewayTSSAddress") @@ -1050,9 +1051,9 @@ func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) FilterUpdatedGatewayTSSAddr return &IGatewayEVMEventsUpdatedGatewayTSSAddressIterator{contract: _IGatewayEVMEvents.contract, event: "UpdatedGatewayTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) WatchUpdatedGatewayTSSAddress(opts *bind.WatchOpts, sink chan<- *IGatewayEVMEventsUpdatedGatewayTSSAddress) (event.Subscription, error) { logs, sub, err := _IGatewayEVMEvents.contract.WatchLogs(opts, "UpdatedGatewayTSSAddress") @@ -1087,9 +1088,9 @@ func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) WatchUpdatedGatewayTSSAddre }), nil } -// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) ParseUpdatedGatewayTSSAddress(log types.Log) (*IGatewayEVMEventsUpdatedGatewayTSSAddress, error) { event := new(IGatewayEVMEventsUpdatedGatewayTSSAddress) if err := _IGatewayEVMEvents.contract.UnpackLog(event, "UpdatedGatewayTSSAddress", log); err != nil { diff --git a/v2/pkg/igatewayzevm.sol/igatewayzevm.go b/v2/pkg/igatewayzevm.sol/igatewayzevm.go index 63a40bb0d..01d4174b9 100644 --- a/v2/pkg/igatewayzevm.sol/igatewayzevm.go +++ b/v2/pkg/igatewayzevm.sol/igatewayzevm.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -54,7 +54,7 @@ type ZContext struct { // IGatewayZEVMMetaData contains all meta data concerning the IGatewayZEVM contract. var IGatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", } // IGatewayZEVMABI is the input ABI used to generate the binding from. @@ -287,23 +287,23 @@ func (_IGatewayZEVM *IGatewayZEVMTransactorSession) DepositAndCall0(context ZCon return _IGatewayZEVM.Contract.DepositAndCall0(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } -// DepositAndRevert is a paid mutator transaction binding the contract method 0x8fffac57. +// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. // -// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint256,bytes) revertContext) returns() +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() func (_IGatewayZEVM *IGatewayZEVMTransactor) DepositAndRevert(opts *bind.TransactOpts, zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayZEVM.contract.Transact(opts, "depositAndRevert", zrc20, amount, target, revertContext) } -// DepositAndRevert is a paid mutator transaction binding the contract method 0x8fffac57. +// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. // -// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint256,bytes) revertContext) returns() +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() func (_IGatewayZEVM *IGatewayZEVMSession) DepositAndRevert(zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayZEVM.Contract.DepositAndRevert(&_IGatewayZEVM.TransactOpts, zrc20, amount, target, revertContext) } -// DepositAndRevert is a paid mutator transaction binding the contract method 0x8fffac57. +// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. // -// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint256,bytes) revertContext) returns() +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() func (_IGatewayZEVM *IGatewayZEVMTransactorSession) DepositAndRevert(zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayZEVM.Contract.DepositAndRevert(&_IGatewayZEVM.TransactOpts, zrc20, amount, target, revertContext) } @@ -329,23 +329,23 @@ func (_IGatewayZEVM *IGatewayZEVMTransactorSession) Execute(context ZContext, zr return _IGatewayZEVM.Contract.Execute(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x34b1f5dc. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. // -// Solidity: function executeRevert(address target, (address,uint256,bytes) revertContext) returns() +// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() func (_IGatewayZEVM *IGatewayZEVMTransactor) ExecuteRevert(opts *bind.TransactOpts, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayZEVM.contract.Transact(opts, "executeRevert", target, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x34b1f5dc. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. // -// Solidity: function executeRevert(address target, (address,uint256,bytes) revertContext) returns() +// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() func (_IGatewayZEVM *IGatewayZEVMSession) ExecuteRevert(target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayZEVM.Contract.ExecuteRevert(&_IGatewayZEVM.TransactOpts, target, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x34b1f5dc. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. // -// Solidity: function executeRevert(address target, (address,uint256,bytes) revertContext) returns() +// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() func (_IGatewayZEVM *IGatewayZEVMTransactorSession) ExecuteRevert(target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayZEVM.Contract.ExecuteRevert(&_IGatewayZEVM.TransactOpts, target, revertContext) } diff --git a/v2/pkg/ireceiverevm.sol/ireceiverevmevents.go b/v2/pkg/ireceiverevm.sol/ireceiverevmevents.go index abfb1e6a5..f8c3d360d 100644 --- a/v2/pkg/ireceiverevm.sol/ireceiverevmevents.go +++ b/v2/pkg/ireceiverevm.sol/ireceiverevmevents.go @@ -32,13 +32,13 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } // IReceiverEVMEventsMetaData contains all meta data concerning the IReceiverEVMEvents contract. var IReceiverEVMEventsMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", + ABI: "[{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", } // IReceiverEVMEventsABI is the input ABI used to generate the binding from. @@ -807,9 +807,9 @@ type IReceiverEVMEventsReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*IReceiverEVMEventsReceivedRevertIterator, error) { logs, sub, err := _IReceiverEVMEvents.contract.FilterLogs(opts, "ReceivedRevert") @@ -819,9 +819,9 @@ func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) FilterReceivedRevert(opts return &IReceiverEVMEventsReceivedRevertIterator{contract: _IReceiverEVMEvents.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *IReceiverEVMEventsReceivedRevert) (event.Subscription, error) { logs, sub, err := _IReceiverEVMEvents.contract.WatchLogs(opts, "ReceivedRevert") @@ -856,9 +856,9 @@ func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) WatchReceivedRevert(opts }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) ParseReceivedRevert(log types.Log) (*IReceiverEVMEventsReceivedRevert, error) { event := new(IReceiverEVMEventsReceivedRevert) if err := _IReceiverEVMEvents.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { diff --git a/v2/pkg/izetaconnector.sol/izetaconnectorevents.go b/v2/pkg/izetaconnector.sol/izetaconnectorevents.go index 39c187e68..27dbcce91 100644 --- a/v2/pkg/izetaconnector.sol/izetaconnectorevents.go +++ b/v2/pkg/izetaconnector.sol/izetaconnectorevents.go @@ -32,13 +32,13 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } // IZetaConnectorEventsMetaData contains all meta data concerning the IZetaConnectorEvents contract. var IZetaConnectorEventsMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", + ABI: "[{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", } // IZetaConnectorEventsABI is the input ABI used to generate the binding from. @@ -256,13 +256,14 @@ func (it *IZetaConnectorEventsUpdatedZetaConnectorTSSAddressIterator) Close() er // IZetaConnectorEventsUpdatedZetaConnectorTSSAddress represents a UpdatedZetaConnectorTSSAddress event raised by the IZetaConnectorEvents contract. type IZetaConnectorEventsUpdatedZetaConnectorTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedZetaConnectorTSSAddress is a free log retrieval operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// FilterUpdatedZetaConnectorTSSAddress is a free log retrieval operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) FilterUpdatedZetaConnectorTSSAddress(opts *bind.FilterOpts) (*IZetaConnectorEventsUpdatedZetaConnectorTSSAddressIterator, error) { logs, sub, err := _IZetaConnectorEvents.contract.FilterLogs(opts, "UpdatedZetaConnectorTSSAddress") @@ -272,9 +273,9 @@ func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) FilterUpdatedZetaConn return &IZetaConnectorEventsUpdatedZetaConnectorTSSAddressIterator{contract: _IZetaConnectorEvents.contract, event: "UpdatedZetaConnectorTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedZetaConnectorTSSAddress is a free log subscription operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// WatchUpdatedZetaConnectorTSSAddress is a free log subscription operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) WatchUpdatedZetaConnectorTSSAddress(opts *bind.WatchOpts, sink chan<- *IZetaConnectorEventsUpdatedZetaConnectorTSSAddress) (event.Subscription, error) { logs, sub, err := _IZetaConnectorEvents.contract.WatchLogs(opts, "UpdatedZetaConnectorTSSAddress") @@ -309,9 +310,9 @@ func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) WatchUpdatedZetaConne }), nil } -// ParseUpdatedZetaConnectorTSSAddress is a log parse operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// ParseUpdatedZetaConnectorTSSAddress is a log parse operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) ParseUpdatedZetaConnectorTSSAddress(log types.Log) (*IZetaConnectorEventsUpdatedZetaConnectorTSSAddress, error) { event := new(IZetaConnectorEventsUpdatedZetaConnectorTSSAddress) if err := _IZetaConnectorEvents.contract.UnpackLog(event, "UpdatedZetaConnectorTSSAddress", log); err != nil { @@ -688,9 +689,9 @@ type IZetaConnectorEventsWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address) (*IZetaConnectorEventsWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -705,9 +706,9 @@ func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) FilterWithdrawnAndRev return &IZetaConnectorEventsWithdrawnAndRevertedIterator{contract: _IZetaConnectorEvents.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *IZetaConnectorEventsWithdrawnAndReverted, to []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -747,9 +748,9 @@ func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) WatchWithdrawnAndReve }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) ParseWithdrawnAndReverted(log types.Log) (*IZetaConnectorEventsWithdrawnAndReverted, error) { event := new(IZetaConnectorEventsWithdrawnAndReverted) if err := _IZetaConnectorEvents.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/pausable.sol/pausable.go b/v2/pkg/pausable.sol/pausable.go deleted file mode 100644 index f1a32b350..000000000 --- a/v2/pkg/pausable.sol/pausable.go +++ /dev/null @@ -1,480 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package pausable - -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 - _ = abi.ConvertType -) - -// PausableMetaData contains all meta data concerning the Pausable contract. -var PausableMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]}]", -} - -// PausableABI is the input ABI used to generate the binding from. -// Deprecated: Use PausableMetaData.ABI instead. -var PausableABI = PausableMetaData.ABI - -// Pausable is an auto generated Go binding around an Ethereum contract. -type Pausable struct { - PausableCaller // Read-only binding to the contract - PausableTransactor // Write-only binding to the contract - PausableFilterer // Log filterer for contract events -} - -// PausableCaller is an auto generated read-only Go binding around an Ethereum contract. -type PausableCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// PausableTransactor is an auto generated write-only Go binding around an Ethereum contract. -type PausableTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// PausableFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type PausableFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// PausableSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type PausableSession struct { - Contract *Pausable // 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 -} - -// PausableCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type PausableCallerSession struct { - Contract *PausableCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// PausableTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type PausableTransactorSession struct { - Contract *PausableTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// PausableRaw is an auto generated low-level Go binding around an Ethereum contract. -type PausableRaw struct { - Contract *Pausable // Generic contract binding to access the raw methods on -} - -// PausableCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type PausableCallerRaw struct { - Contract *PausableCaller // Generic read-only contract binding to access the raw methods on -} - -// PausableTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type PausableTransactorRaw struct { - Contract *PausableTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewPausable creates a new instance of Pausable, bound to a specific deployed contract. -func NewPausable(address common.Address, backend bind.ContractBackend) (*Pausable, error) { - contract, err := bindPausable(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &Pausable{PausableCaller: PausableCaller{contract: contract}, PausableTransactor: PausableTransactor{contract: contract}, PausableFilterer: PausableFilterer{contract: contract}}, nil -} - -// NewPausableCaller creates a new read-only instance of Pausable, bound to a specific deployed contract. -func NewPausableCaller(address common.Address, caller bind.ContractCaller) (*PausableCaller, error) { - contract, err := bindPausable(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &PausableCaller{contract: contract}, nil -} - -// NewPausableTransactor creates a new write-only instance of Pausable, bound to a specific deployed contract. -func NewPausableTransactor(address common.Address, transactor bind.ContractTransactor) (*PausableTransactor, error) { - contract, err := bindPausable(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &PausableTransactor{contract: contract}, nil -} - -// NewPausableFilterer creates a new log filterer instance of Pausable, bound to a specific deployed contract. -func NewPausableFilterer(address common.Address, filterer bind.ContractFilterer) (*PausableFilterer, error) { - contract, err := bindPausable(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &PausableFilterer{contract: contract}, nil -} - -// bindPausable binds a generic wrapper to an already deployed contract. -func bindPausable(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := PausableMetaData.GetAbi() - 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 (_Pausable *PausableRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Pausable.Contract.PausableCaller.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 (_Pausable *PausableRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Pausable.Contract.PausableTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Pausable *PausableRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Pausable.Contract.PausableTransactor.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 (_Pausable *PausableCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Pausable.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 (_Pausable *PausableTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Pausable.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Pausable *PausableTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Pausable.Contract.contract.Transact(opts, method, params...) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_Pausable *PausableCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _Pausable.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 (_Pausable *PausableSession) Paused() (bool, error) { - return _Pausable.Contract.Paused(&_Pausable.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_Pausable *PausableCallerSession) Paused() (bool, error) { - return _Pausable.Contract.Paused(&_Pausable.CallOpts) -} - -// PausablePausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the Pausable contract. -type PausablePausedIterator struct { - Event *PausablePaused // 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 *PausablePausedIterator) 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(PausablePaused) - 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(PausablePaused) - 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 *PausablePausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *PausablePausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// PausablePaused represents a Paused event raised by the Pausable contract. -type PausablePaused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_Pausable *PausableFilterer) FilterPaused(opts *bind.FilterOpts) (*PausablePausedIterator, error) { - - logs, sub, err := _Pausable.contract.FilterLogs(opts, "Paused") - if err != nil { - return nil, err - } - return &PausablePausedIterator{contract: _Pausable.contract, event: "Paused", logs: logs, sub: sub}, nil -} - -// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_Pausable *PausableFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *PausablePaused) (event.Subscription, error) { - - logs, sub, err := _Pausable.contract.WatchLogs(opts, "Paused") - 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(PausablePaused) - if err := _Pausable.contract.UnpackLog(event, "Paused", 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 -} - -// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_Pausable *PausableFilterer) ParsePaused(log types.Log) (*PausablePaused, error) { - event := new(PausablePaused) - if err := _Pausable.contract.UnpackLog(event, "Paused", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// PausableUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the Pausable contract. -type PausableUnpausedIterator struct { - Event *PausableUnpaused // 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 *PausableUnpausedIterator) 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(PausableUnpaused) - 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(PausableUnpaused) - 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 *PausableUnpausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *PausableUnpausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// PausableUnpaused represents a Unpaused event raised by the Pausable contract. -type PausableUnpaused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. -// -// Solidity: event Unpaused(address account) -func (_Pausable *PausableFilterer) FilterUnpaused(opts *bind.FilterOpts) (*PausableUnpausedIterator, error) { - - logs, sub, err := _Pausable.contract.FilterLogs(opts, "Unpaused") - if err != nil { - return nil, err - } - return &PausableUnpausedIterator{contract: _Pausable.contract, event: "Unpaused", logs: logs, sub: sub}, nil -} - -// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. -// -// Solidity: event Unpaused(address account) -func (_Pausable *PausableFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *PausableUnpaused) (event.Subscription, error) { - - logs, sub, err := _Pausable.contract.WatchLogs(opts, "Unpaused") - 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(PausableUnpaused) - if err := _Pausable.contract.UnpackLog(event, "Unpaused", 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 -} - -// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. -// -// Solidity: event Unpaused(address account) -func (_Pausable *PausableFilterer) ParseUnpaused(log types.Log) (*PausableUnpaused, error) { - event := new(PausableUnpaused) - if err := _Pausable.contract.UnpackLog(event, "Unpaused", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/v2/pkg/receiverevm.sol/receiverevm.go b/v2/pkg/receiverevm.sol/receiverevm.go index a4c279ace..a7d355072 100644 --- a/v2/pkg/receiverevm.sol/receiverevm.go +++ b/v2/pkg/receiverevm.sol/receiverevm.go @@ -32,14 +32,14 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } // ReceiverEVMMetaData contains all meta data concerning the ReceiverEVM contract. var ReceiverEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveERC20\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveERC20Partial\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveNonPayable\",\"inputs\":[{\"name\":\"strs\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receivePayable\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAmount\",\"inputs\":[]}]", - Bin: "0x6080604052348015600f57600080fd5b506001600055610d9d806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c578063a9b0a73c146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106f9565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7fcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e53382604051610210929190610a2f565b60405180910390a150565b61022361036f565b6000610230600285610b38565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610be1565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c6b565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d2e565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d4b565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610a6d83610694565b166040820152600080602084013590508060608401525060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ab957600080fd5b830160208101903567ffffffffffffffff811115610ad657600080fd5b803603821315610ae557600080fd5b606060808501528060a0850152808260c0860137600060c0828601015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509392505050565b600082610b6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b8e578181015183820152602001610b76565b50506000910152565b60008151808452610baf816020860160208601610b73565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c1660a0830186610b97565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c61578151865260209586019590910190600101610c43565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610cfe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610ce9858351610b97565b94506020938401939190910190600101610caf565b505050508281036040840152610d148186610c2f565b915050610d25606083018415159052565b95945050505050565b600060208284031215610d4057600080fd5b81516104f681610840565b60008251610d5d818460208701610b73565b919091019291505056fea264697066735822122098725982494f2e15151404f3fbfc80b0517e09c0b3e8ae0e6602ac62c5ba8d0d64736f6c634300081a0033", + ABI: "[{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveERC20\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveERC20Partial\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveNonPayable\",\"inputs\":[{\"name\":\"strs\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receivePayable\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAmount\",\"inputs\":[]}]", + Bin: "0x6080604052348015600f57600080fd5b506001600055610dbc806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c578063660b9de01461008c5780636ed70169146100ac57005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6100a73660046106f9565b6101aa565b3480156100b857600080fd5b5061006a6101e6565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e33826040516101db929190610a78565b60405180910390a150565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61022361036f565b6000610230600285610b57565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610c00565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c8a565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d4d565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d6a565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610ab683610694565b1660408201526000602083013567ffffffffffffffff8116808214610ada57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610b1657600080fd5b830160208101903567ffffffffffffffff811115610b3357600080fd5b803603821315610b4257600080fd5b606060808501526105b660a085018284610a2f565b600082610b8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610bad578181015183820152602001610b95565b50506000910152565b60008151808452610bce816020860160208601610b92565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c3560a0830186610bb6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c80578151865260209586019590910190600101610c62565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610d1d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610d08858351610bb6565b94506020938401939190910190600101610cce565b505050508281036040840152610d338186610c4e565b915050610d44606083018415159052565b95945050505050565b600060208284031215610d5f57600080fd5b81516104f681610840565b60008251610d7c818460208701610b92565b919091019291505056fea2646970667358221220084d92a79207d5024a4431b52d5d0038017908edb40aae1ce1d94a5ec3de914064736f6c634300081a0033", } // ReceiverEVMABI is the input ABI used to generate the binding from. @@ -209,23 +209,23 @@ func (_ReceiverEVM *ReceiverEVMTransactorRaw) Transact(opts *bind.TransactOpts, return _ReceiverEVM.Contract.contract.Transact(opts, method, params...) } -// OnRevert is a paid mutator transaction binding the contract method 0xa9b0a73c. +// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. // -// Solidity: function onRevert((address,uint256,bytes) revertContext) returns() +// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() func (_ReceiverEVM *ReceiverEVMTransactor) OnRevert(opts *bind.TransactOpts, revertContext RevertContext) (*types.Transaction, error) { return _ReceiverEVM.contract.Transact(opts, "onRevert", revertContext) } -// OnRevert is a paid mutator transaction binding the contract method 0xa9b0a73c. +// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. // -// Solidity: function onRevert((address,uint256,bytes) revertContext) returns() +// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() func (_ReceiverEVM *ReceiverEVMSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { return _ReceiverEVM.Contract.OnRevert(&_ReceiverEVM.TransactOpts, revertContext) } -// OnRevert is a paid mutator transaction binding the contract method 0xa9b0a73c. +// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. // -// Solidity: function onRevert((address,uint256,bytes) revertContext) returns() +// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() func (_ReceiverEVM *ReceiverEVMTransactorSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { return _ReceiverEVM.Contract.OnRevert(&_ReceiverEVM.TransactOpts, revertContext) } @@ -997,9 +997,9 @@ type ReceiverEVMReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_ReceiverEVM *ReceiverEVMFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*ReceiverEVMReceivedRevertIterator, error) { logs, sub, err := _ReceiverEVM.contract.FilterLogs(opts, "ReceivedRevert") @@ -1009,9 +1009,9 @@ func (_ReceiverEVM *ReceiverEVMFilterer) FilterReceivedRevert(opts *bind.FilterO return &ReceiverEVMReceivedRevertIterator{contract: _ReceiverEVM.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_ReceiverEVM *ReceiverEVMFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *ReceiverEVMReceivedRevert) (event.Subscription, error) { logs, sub, err := _ReceiverEVM.contract.WatchLogs(opts, "ReceivedRevert") @@ -1046,9 +1046,9 @@ func (_ReceiverEVM *ReceiverEVMFilterer) WatchReceivedRevert(opts *bind.WatchOpt }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_ReceiverEVM *ReceiverEVMFilterer) ParseReceivedRevert(log types.Log) (*ReceiverEVMReceivedRevert, error) { event := new(ReceiverEVMReceivedRevert) if err := _ReceiverEVM.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { diff --git a/v2/pkg/revert.sol/inotsupportedmethods.go b/v2/pkg/revert.sol/inotsupportedmethods.go new file mode 100644 index 000000000..b6d916c86 --- /dev/null +++ b/v2/pkg/revert.sol/inotsupportedmethods.go @@ -0,0 +1,181 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package revert + +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 + _ = abi.ConvertType +) + +// INotSupportedMethodsMetaData contains all meta data concerning the INotSupportedMethods contract. +var INotSupportedMethodsMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"error\",\"name\":\"CallOnRevertNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZETANotSupported\",\"inputs\":[]}]", +} + +// INotSupportedMethodsABI is the input ABI used to generate the binding from. +// Deprecated: Use INotSupportedMethodsMetaData.ABI instead. +var INotSupportedMethodsABI = INotSupportedMethodsMetaData.ABI + +// INotSupportedMethods is an auto generated Go binding around an Ethereum contract. +type INotSupportedMethods struct { + INotSupportedMethodsCaller // Read-only binding to the contract + INotSupportedMethodsTransactor // Write-only binding to the contract + INotSupportedMethodsFilterer // Log filterer for contract events +} + +// INotSupportedMethodsCaller is an auto generated read-only Go binding around an Ethereum contract. +type INotSupportedMethodsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// INotSupportedMethodsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type INotSupportedMethodsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// INotSupportedMethodsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type INotSupportedMethodsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// INotSupportedMethodsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type INotSupportedMethodsSession struct { + Contract *INotSupportedMethods // 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 +} + +// INotSupportedMethodsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type INotSupportedMethodsCallerSession struct { + Contract *INotSupportedMethodsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// INotSupportedMethodsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type INotSupportedMethodsTransactorSession struct { + Contract *INotSupportedMethodsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// INotSupportedMethodsRaw is an auto generated low-level Go binding around an Ethereum contract. +type INotSupportedMethodsRaw struct { + Contract *INotSupportedMethods // Generic contract binding to access the raw methods on +} + +// INotSupportedMethodsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type INotSupportedMethodsCallerRaw struct { + Contract *INotSupportedMethodsCaller // Generic read-only contract binding to access the raw methods on +} + +// INotSupportedMethodsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type INotSupportedMethodsTransactorRaw struct { + Contract *INotSupportedMethodsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewINotSupportedMethods creates a new instance of INotSupportedMethods, bound to a specific deployed contract. +func NewINotSupportedMethods(address common.Address, backend bind.ContractBackend) (*INotSupportedMethods, error) { + contract, err := bindINotSupportedMethods(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &INotSupportedMethods{INotSupportedMethodsCaller: INotSupportedMethodsCaller{contract: contract}, INotSupportedMethodsTransactor: INotSupportedMethodsTransactor{contract: contract}, INotSupportedMethodsFilterer: INotSupportedMethodsFilterer{contract: contract}}, nil +} + +// NewINotSupportedMethodsCaller creates a new read-only instance of INotSupportedMethods, bound to a specific deployed contract. +func NewINotSupportedMethodsCaller(address common.Address, caller bind.ContractCaller) (*INotSupportedMethodsCaller, error) { + contract, err := bindINotSupportedMethods(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &INotSupportedMethodsCaller{contract: contract}, nil +} + +// NewINotSupportedMethodsTransactor creates a new write-only instance of INotSupportedMethods, bound to a specific deployed contract. +func NewINotSupportedMethodsTransactor(address common.Address, transactor bind.ContractTransactor) (*INotSupportedMethodsTransactor, error) { + contract, err := bindINotSupportedMethods(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &INotSupportedMethodsTransactor{contract: contract}, nil +} + +// NewINotSupportedMethodsFilterer creates a new log filterer instance of INotSupportedMethods, bound to a specific deployed contract. +func NewINotSupportedMethodsFilterer(address common.Address, filterer bind.ContractFilterer) (*INotSupportedMethodsFilterer, error) { + contract, err := bindINotSupportedMethods(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &INotSupportedMethodsFilterer{contract: contract}, nil +} + +// bindINotSupportedMethods binds a generic wrapper to an already deployed contract. +func bindINotSupportedMethods(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := INotSupportedMethodsMetaData.GetAbi() + 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 (_INotSupportedMethods *INotSupportedMethodsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _INotSupportedMethods.Contract.INotSupportedMethodsCaller.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 (_INotSupportedMethods *INotSupportedMethodsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _INotSupportedMethods.Contract.INotSupportedMethodsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_INotSupportedMethods *INotSupportedMethodsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _INotSupportedMethods.Contract.INotSupportedMethodsTransactor.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 (_INotSupportedMethods *INotSupportedMethodsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _INotSupportedMethods.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 (_INotSupportedMethods *INotSupportedMethodsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _INotSupportedMethods.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_INotSupportedMethods *INotSupportedMethodsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _INotSupportedMethods.Contract.contract.Transact(opts, method, params...) +} diff --git a/v2/pkg/revert.sol/revertable.go b/v2/pkg/revert.sol/revertable.go index c331db997..574030933 100644 --- a/v2/pkg/revert.sol/revertable.go +++ b/v2/pkg/revert.sol/revertable.go @@ -32,13 +32,13 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } // RevertableMetaData contains all meta data concerning the Revertable contract. var RevertableMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", } // RevertableABI is the input ABI used to generate the binding from. @@ -187,23 +187,23 @@ func (_Revertable *RevertableTransactorRaw) Transact(opts *bind.TransactOpts, me return _Revertable.Contract.contract.Transact(opts, method, params...) } -// OnRevert is a paid mutator transaction binding the contract method 0xa9b0a73c. +// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. // -// Solidity: function onRevert((address,uint256,bytes) revertContext) returns() +// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() func (_Revertable *RevertableTransactor) OnRevert(opts *bind.TransactOpts, revertContext RevertContext) (*types.Transaction, error) { return _Revertable.contract.Transact(opts, "onRevert", revertContext) } -// OnRevert is a paid mutator transaction binding the contract method 0xa9b0a73c. +// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. // -// Solidity: function onRevert((address,uint256,bytes) revertContext) returns() +// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() func (_Revertable *RevertableSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { return _Revertable.Contract.OnRevert(&_Revertable.TransactOpts, revertContext) } -// OnRevert is a paid mutator transaction binding the contract method 0xa9b0a73c. +// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. // -// Solidity: function onRevert((address,uint256,bytes) revertContext) returns() +// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() func (_Revertable *RevertableTransactorSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { return _Revertable.Contract.OnRevert(&_Revertable.TransactOpts, revertContext) } diff --git a/v2/pkg/senderzevm.sol/senderzevm.go b/v2/pkg/senderzevm.sol/senderzevm.go index 9164e2f18..b2d98d87d 100644 --- a/v2/pkg/senderzevm.sol/senderzevm.go +++ b/v2/pkg/senderzevm.sol/senderzevm.go @@ -32,7 +32,7 @@ var ( // SenderZEVMMetaData contains all meta data concerning the SenderZEVM contract. var SenderZEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"callReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawAndCallReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]}]", - Bin: "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526001602080840182905283850192909252835191820184526000808352606084019290925260808301829052905492517f048ae42c000000000000000000000000000000000000000000000000000000008152919273ffffffffffffffffffffffffffffffffffffffff169163048ae42c916102d7918c918c918c9189918990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a081018352610321808252600182840181905282850191909152835192830184526000808452606083019390935260808201839052915492517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201526024810183905293945092909188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220390328e54184295fe4eac56bf800f8f4c63d13597995a05e15347f2e505c481464736f6c634300081a0033", + Bin: "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220d7e1a9075911564d308c037a0af9765ff7f3977eee9652547da152cb6de1448964736f6c634300081a0033", } // SenderZEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/systemcontract.sol/systemcontract.go b/v2/pkg/systemcontract.sol/systemcontract.go index ea45ffc1c..e0a21696e 100644 --- a/v2/pkg/systemcontract.sol/systemcontract.go +++ b/v2/pkg/systemcontract.sol/systemcontract.go @@ -39,7 +39,7 @@ type ZContext struct { // SystemContractMetaData contains all meta data concerning the SystemContract contract. var SystemContractMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"wzeta_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Factory_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Router02_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gasCoinZRC20ByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPriceByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasZetaPoolByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setConnectorZEVMAddress\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasCoinZRC20\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasPrice\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasZetaPool\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"erc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setWZETAContractAddress\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"uniswapv2FactoryAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"uniswapv2PairFor\",\"inputs\":[{\"name\":\"factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenA\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenB\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"pair\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"uniswapv2Router02Address\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"wZetaContractAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaConnectorZEVMAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"SetConnectorZEVM\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasCoin\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasPrice\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasZetaPool\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetWZeta\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SystemContractDeployed\",\"inputs\":[],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeIdenticalAddresses\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212203b8a61523cf0636d20451911ef652f516b2b6dc27f59d12ba2a96c4c5f1861dc64736f6c634300081a0033", + Bin: "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201bc2c2e5533a7390cd5c9f230b641bee17c3057fdf7a0f92b4302cd8cea1ce6764736f6c634300081a0033", } // SystemContractABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/systemcontractmock.sol/systemcontractmock.go b/v2/pkg/systemcontractmock.sol/systemcontractmock.go index 506f9f108..ebc8c6ab5 100644 --- a/v2/pkg/systemcontractmock.sol/systemcontractmock.go +++ b/v2/pkg/systemcontractmock.sol/systemcontractmock.go @@ -32,7 +32,7 @@ var ( // SystemContractMockMetaData contains all meta data concerning the SystemContractMock contract. var SystemContractMockMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"wzeta_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Factory_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Router02_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gasCoinZRC20ByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPriceByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasZetaPoolByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onCrossChainCall\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasCoinZRC20\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasPrice\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setWZETAContractAddress\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"uniswapv2FactoryAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"uniswapv2PairFor\",\"inputs\":[{\"name\":\"factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenA\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenB\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"pair\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"uniswapv2Router02Address\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"wZetaContractAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"SetGasCoin\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasPrice\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasZetaPool\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetWZeta\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SystemContractDeployed\",\"inputs\":[],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeIdenticalAddresses\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]}]", - Bin: "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea264697066735822122058a621ddf8438dd7ed89077cf75a72ac07bd86d7792e5230bee3a1bbfb92685b64736f6c634300081a0033", + Bin: "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220cc406cf4b9f9cfbacfa9f32870eb254a68b539001bcca4f238577e817f73a2ab64736f6c634300081a0033", } // SystemContractMockABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go b/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go index 480ab6cf8..74339bc3e 100644 --- a/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go +++ b/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -45,8 +45,8 @@ type ZContext struct { // TestUniversalContractMetaData contains all meta data concerning the TestUniversalContract contract. var TestUniversalContractMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"onCrossChainCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", - Bin: "0x6080604052348015600f57600080fd5b506106098061001f6000396000f3fe60806040526004361061002a5760003560e01c8063a9b0a73c14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7fecf5d82c48083c30b9ba8e8536ba84ae739724bdd8a42c47c1304f5437ade807816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c18284018461038d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610483565b6100ff60408a0160208b016104ef565b8960400135338660405161011896959493929190610511565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b166020820152600080602084013590508060408401525060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261031557600080fd5b830160208101903567ffffffffffffffff81111561033257600080fd5b80360382131561034157600080fd5b60608085015261035560808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561039f57600080fd5b813567ffffffffffffffff8111156103b657600080fd5b8201601f810184136103c757600080fd5b803567ffffffffffffffff8111156103e1576103e161035e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561044d5761044d61035e565b60405281815282820160200186101561046557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104b857600080fd5b83018035915067ffffffffffffffff8211156104d357600080fd5b6020019150368190038213156104e857600080fd5b9250929050565b60006020828403121561050157600080fd5b61050a8261017d565b9392505050565b60a08152600061052560a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b8181101561058f57602081870181015184830182015201610573565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122010486f94f449fc99b4a8d453c3a51c73eb1de12f7d8756d65324b00797fda02e64736f6c634300081a0033", + ABI: "[{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"onCrossChainCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", + Bin: "0x6080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c8063660b9de014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c1828401846103a2565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610498565b6100ff60408a0160208b01610504565b8960400135338660405161011896959493929190610526565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b1660208201526000602083013567ffffffffffffffff81168082146102ed57600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261032a57600080fd5b830160208101903567ffffffffffffffff81111561034757600080fd5b80360382131561035657600080fd5b60608085015261036a60808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103b457600080fd5b813567ffffffffffffffff8111156103cb57600080fd5b8201601f810184136103dc57600080fd5b803567ffffffffffffffff8111156103f6576103f6610373565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561046257610462610373565b60405281815282820160200186101561047a57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104cd57600080fd5b83018035915067ffffffffffffffff8211156104e857600080fd5b6020019150368190038213156104fd57600080fd5b9250929050565b60006020828403121561051657600080fd5b61051f8261017d565b9392505050565b60a08152600061053a60a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105a457602081870181015184830182015201610588565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122002711b914cfa85869597d761ee7a81ae9c55589f2201dbf0c65836b421bff96564736f6c634300081a0033", } // TestUniversalContractABI is the input ABI used to generate the binding from. @@ -237,23 +237,23 @@ func (_TestUniversalContract *TestUniversalContractTransactorSession) OnCrossCha return _TestUniversalContract.Contract.OnCrossChainCall(&_TestUniversalContract.TransactOpts, context, zrc20, amount, message) } -// OnRevert is a paid mutator transaction binding the contract method 0xa9b0a73c. +// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. // -// Solidity: function onRevert((address,uint256,bytes) revertContext) returns() +// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() func (_TestUniversalContract *TestUniversalContractTransactor) OnRevert(opts *bind.TransactOpts, revertContext RevertContext) (*types.Transaction, error) { return _TestUniversalContract.contract.Transact(opts, "onRevert", revertContext) } -// OnRevert is a paid mutator transaction binding the contract method 0xa9b0a73c. +// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. // -// Solidity: function onRevert((address,uint256,bytes) revertContext) returns() +// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() func (_TestUniversalContract *TestUniversalContractSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { return _TestUniversalContract.Contract.OnRevert(&_TestUniversalContract.TransactOpts, revertContext) } -// OnRevert is a paid mutator transaction binding the contract method 0xa9b0a73c. +// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. // -// Solidity: function onRevert((address,uint256,bytes) revertContext) returns() +// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() func (_TestUniversalContract *TestUniversalContractTransactorSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { return _TestUniversalContract.Contract.OnRevert(&_TestUniversalContract.TransactOpts, revertContext) } @@ -511,9 +511,9 @@ type TestUniversalContractContextDataRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterContextDataRevert is a free log retrieval operation binding the contract event 0xecf5d82c48083c30b9ba8e8536ba84ae739724bdd8a42c47c1304f5437ade807. +// FilterContextDataRevert is a free log retrieval operation binding the contract event 0x35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76. // -// Solidity: event ContextDataRevert((address,uint256,bytes) revertContext) +// Solidity: event ContextDataRevert((address,uint64,bytes) revertContext) func (_TestUniversalContract *TestUniversalContractFilterer) FilterContextDataRevert(opts *bind.FilterOpts) (*TestUniversalContractContextDataRevertIterator, error) { logs, sub, err := _TestUniversalContract.contract.FilterLogs(opts, "ContextDataRevert") @@ -523,9 +523,9 @@ func (_TestUniversalContract *TestUniversalContractFilterer) FilterContextDataRe return &TestUniversalContractContextDataRevertIterator{contract: _TestUniversalContract.contract, event: "ContextDataRevert", logs: logs, sub: sub}, nil } -// WatchContextDataRevert is a free log subscription operation binding the contract event 0xecf5d82c48083c30b9ba8e8536ba84ae739724bdd8a42c47c1304f5437ade807. +// WatchContextDataRevert is a free log subscription operation binding the contract event 0x35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76. // -// Solidity: event ContextDataRevert((address,uint256,bytes) revertContext) +// Solidity: event ContextDataRevert((address,uint64,bytes) revertContext) func (_TestUniversalContract *TestUniversalContractFilterer) WatchContextDataRevert(opts *bind.WatchOpts, sink chan<- *TestUniversalContractContextDataRevert) (event.Subscription, error) { logs, sub, err := _TestUniversalContract.contract.WatchLogs(opts, "ContextDataRevert") @@ -560,9 +560,9 @@ func (_TestUniversalContract *TestUniversalContractFilterer) WatchContextDataRev }), nil } -// ParseContextDataRevert is a log parse operation binding the contract event 0xecf5d82c48083c30b9ba8e8536ba84ae739724bdd8a42c47c1304f5437ade807. +// ParseContextDataRevert is a log parse operation binding the contract event 0x35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76. // -// Solidity: event ContextDataRevert((address,uint256,bytes) revertContext) +// Solidity: event ContextDataRevert((address,uint64,bytes) revertContext) func (_TestUniversalContract *TestUniversalContractFilterer) ParseContextDataRevert(log types.Log) (*TestUniversalContractContextDataRevert, error) { event := new(TestUniversalContractContextDataRevert) if err := _TestUniversalContract.contract.UnpackLog(event, "ContextDataRevert", log); err != nil { diff --git a/v2/pkg/universalcontract.sol/universalcontract.go b/v2/pkg/universalcontract.sol/universalcontract.go index 8a9a8ba5f..bafa66941 100644 --- a/v2/pkg/universalcontract.sol/universalcontract.go +++ b/v2/pkg/universalcontract.sol/universalcontract.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -45,7 +45,7 @@ type ZContext struct { // UniversalContractMetaData contains all meta data concerning the UniversalContract contract. var UniversalContractMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"onCrossChainCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"onCrossChainCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", } // UniversalContractABI is the input ABI used to generate the binding from. @@ -215,23 +215,23 @@ func (_UniversalContract *UniversalContractTransactorSession) OnCrossChainCall(c return _UniversalContract.Contract.OnCrossChainCall(&_UniversalContract.TransactOpts, context, zrc20, amount, message) } -// OnRevert is a paid mutator transaction binding the contract method 0xa9b0a73c. +// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. // -// Solidity: function onRevert((address,uint256,bytes) revertContext) returns() +// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() func (_UniversalContract *UniversalContractTransactor) OnRevert(opts *bind.TransactOpts, revertContext RevertContext) (*types.Transaction, error) { return _UniversalContract.contract.Transact(opts, "onRevert", revertContext) } -// OnRevert is a paid mutator transaction binding the contract method 0xa9b0a73c. +// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. // -// Solidity: function onRevert((address,uint256,bytes) revertContext) returns() +// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() func (_UniversalContract *UniversalContractSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { return _UniversalContract.Contract.OnRevert(&_UniversalContract.TransactOpts, revertContext) } -// OnRevert is a paid mutator transaction binding the contract method 0xa9b0a73c. +// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. // -// Solidity: function onRevert((address,uint256,bytes) revertContext) returns() +// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() func (_UniversalContract *UniversalContractTransactorSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { return _UniversalContract.Contract.OnRevert(&_UniversalContract.TransactOpts, revertContext) } diff --git a/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go b/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go index 8814d8e94..0a619ac7d 100644 --- a/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go +++ b/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go @@ -32,13 +32,13 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } // ZetaConnectorBaseMetaData contains all meta data concerning the ZetaConnectorBase contract. var ZetaConnectorBaseMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", } // ZetaConnectorBaseABI is the input ABI used to generate the binding from. @@ -280,6 +280,37 @@ func (_ZetaConnectorBase *ZetaConnectorBaseCallerSession) TSSROLE() ([32]byte, e return _ZetaConnectorBase.Contract.TSSROLE(&_ZetaConnectorBase.CallOpts) } +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorBase *ZetaConnectorBaseCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ZetaConnectorBase.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorBase *ZetaConnectorBaseSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ZetaConnectorBase.Contract.UPGRADEINTERFACEVERSION(&_ZetaConnectorBase.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorBase *ZetaConnectorBaseCallerSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ZetaConnectorBase.Contract.UPGRADEINTERFACEVERSION(&_ZetaConnectorBase.CallOpts) +} + // WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // // Solidity: function WITHDRAWER_ROLE() view returns(bytes32) @@ -435,6 +466,37 @@ func (_ZetaConnectorBase *ZetaConnectorBaseCallerSession) Paused() (bool, error) return _ZetaConnectorBase.Contract.Paused(&_ZetaConnectorBase.CallOpts) } +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorBase *ZetaConnectorBaseCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorBase.contract.Call(opts, &out, "proxiableUUID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorBase *ZetaConnectorBaseSession) ProxiableUUID() ([32]byte, error) { + return _ZetaConnectorBase.Contract.ProxiableUUID(&_ZetaConnectorBase.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorBase *ZetaConnectorBaseCallerSession) ProxiableUUID() ([32]byte, error) { + return _ZetaConnectorBase.Contract.ProxiableUUID(&_ZetaConnectorBase.CallOpts) +} + // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) @@ -549,6 +611,27 @@ func (_ZetaConnectorBase *ZetaConnectorBaseTransactorSession) GrantRole(role [32 return _ZetaConnectorBase.Contract.GrantRole(&_ZetaConnectorBase.TransactOpts, role, account) } +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorBase *ZetaConnectorBaseTransactor) Initialize(opts *bind.TransactOpts, gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorBase.contract.Transact(opts, "initialize", gateway_, zetaToken_, tssAddress_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorBase *ZetaConnectorBaseSession) Initialize(gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorBase.Contract.Initialize(&_ZetaConnectorBase.TransactOpts, gateway_, zetaToken_, tssAddress_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorBase *ZetaConnectorBaseTransactorSession) Initialize(gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorBase.Contract.Initialize(&_ZetaConnectorBase.TransactOpts, gateway_, zetaToken_, tssAddress_, admin_) +} + // Pause is a paid mutator transaction binding the contract method 0x8456cb59. // // Solidity: function pause() returns() @@ -675,6 +758,27 @@ func (_ZetaConnectorBase *ZetaConnectorBaseTransactorSession) UpdateTSSAddress(n return _ZetaConnectorBase.Contract.UpdateTSSAddress(&_ZetaConnectorBase.TransactOpts, newTSSAddress) } +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorBase *ZetaConnectorBaseTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorBase.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorBase *ZetaConnectorBaseSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorBase.Contract.UpgradeToAndCall(&_ZetaConnectorBase.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorBase *ZetaConnectorBaseTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorBase.Contract.UpgradeToAndCall(&_ZetaConnectorBase.TransactOpts, newImplementation, data) +} + // Withdraw is a paid mutator transaction binding the contract method 0x106e6290. // // Solidity: function withdraw(address to, uint256 amount, bytes32 internalSendHash) returns() @@ -717,27 +821,161 @@ func (_ZetaConnectorBase *ZetaConnectorBaseTransactorSession) WithdrawAndCall(to return _ZetaConnectorBase.Contract.WithdrawAndCall(&_ZetaConnectorBase.TransactOpts, to, amount, data, internalSendHash) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xafd2dce4. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() func (_ZetaConnectorBase *ZetaConnectorBaseTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorBase.contract.Transact(opts, "withdrawAndRevert", to, amount, data, internalSendHash, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xafd2dce4. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() func (_ZetaConnectorBase *ZetaConnectorBaseSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorBase.Contract.WithdrawAndRevert(&_ZetaConnectorBase.TransactOpts, to, amount, data, internalSendHash, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xafd2dce4. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() func (_ZetaConnectorBase *ZetaConnectorBaseTransactorSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorBase.Contract.WithdrawAndRevert(&_ZetaConnectorBase.TransactOpts, to, amount, data, internalSendHash, revertContext) } +// ZetaConnectorBaseInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ZetaConnectorBase contract. +type ZetaConnectorBaseInitializedIterator struct { + Event *ZetaConnectorBaseInitialized // 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 *ZetaConnectorBaseInitializedIterator) 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(ZetaConnectorBaseInitialized) + 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(ZetaConnectorBaseInitialized) + 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 *ZetaConnectorBaseInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorBaseInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorBaseInitialized represents a Initialized event raised by the ZetaConnectorBase contract. +type ZetaConnectorBaseInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) FilterInitialized(opts *bind.FilterOpts) (*ZetaConnectorBaseInitializedIterator, error) { + + logs, sub, err := _ZetaConnectorBase.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ZetaConnectorBaseInitializedIterator{contract: _ZetaConnectorBase.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ZetaConnectorBaseInitialized) (event.Subscription, error) { + + logs, sub, err := _ZetaConnectorBase.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(ZetaConnectorBaseInitialized) + if err := _ZetaConnectorBase.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 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) ParseInitialized(log types.Log) (*ZetaConnectorBaseInitialized, error) { + event := new(ZetaConnectorBaseInitialized) + if err := _ZetaConnectorBase.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ZetaConnectorBasePausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ZetaConnectorBase contract. type ZetaConnectorBasePausedIterator struct { Event *ZetaConnectorBasePaused // Event containing the contract specifics and raw log @@ -1561,13 +1799,14 @@ func (it *ZetaConnectorBaseUpdatedZetaConnectorTSSAddressIterator) Close() error // ZetaConnectorBaseUpdatedZetaConnectorTSSAddress represents a UpdatedZetaConnectorTSSAddress event raised by the ZetaConnectorBase contract. type ZetaConnectorBaseUpdatedZetaConnectorTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedZetaConnectorTSSAddress is a free log retrieval operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// FilterUpdatedZetaConnectorTSSAddress is a free log retrieval operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) FilterUpdatedZetaConnectorTSSAddress(opts *bind.FilterOpts) (*ZetaConnectorBaseUpdatedZetaConnectorTSSAddressIterator, error) { logs, sub, err := _ZetaConnectorBase.contract.FilterLogs(opts, "UpdatedZetaConnectorTSSAddress") @@ -1577,9 +1816,9 @@ func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) FilterUpdatedZetaConnectorT return &ZetaConnectorBaseUpdatedZetaConnectorTSSAddressIterator{contract: _ZetaConnectorBase.contract, event: "UpdatedZetaConnectorTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedZetaConnectorTSSAddress is a free log subscription operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// WatchUpdatedZetaConnectorTSSAddress is a free log subscription operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) WatchUpdatedZetaConnectorTSSAddress(opts *bind.WatchOpts, sink chan<- *ZetaConnectorBaseUpdatedZetaConnectorTSSAddress) (event.Subscription, error) { logs, sub, err := _ZetaConnectorBase.contract.WatchLogs(opts, "UpdatedZetaConnectorTSSAddress") @@ -1614,9 +1853,9 @@ func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) WatchUpdatedZetaConnectorTS }), nil } -// ParseUpdatedZetaConnectorTSSAddress is a log parse operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// ParseUpdatedZetaConnectorTSSAddress is a log parse operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) ParseUpdatedZetaConnectorTSSAddress(log types.Log) (*ZetaConnectorBaseUpdatedZetaConnectorTSSAddress, error) { event := new(ZetaConnectorBaseUpdatedZetaConnectorTSSAddress) if err := _ZetaConnectorBase.contract.UnpackLog(event, "UpdatedZetaConnectorTSSAddress", log); err != nil { @@ -1626,6 +1865,150 @@ func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) ParseUpdatedZetaConnectorTS return event, nil } +// ZetaConnectorBaseUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the ZetaConnectorBase contract. +type ZetaConnectorBaseUpgradedIterator struct { + Event *ZetaConnectorBaseUpgraded // 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 *ZetaConnectorBaseUpgradedIterator) 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(ZetaConnectorBaseUpgraded) + 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(ZetaConnectorBaseUpgraded) + 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 *ZetaConnectorBaseUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorBaseUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorBaseUpgraded represents a Upgraded event raised by the ZetaConnectorBase contract. +type ZetaConnectorBaseUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*ZetaConnectorBaseUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ZetaConnectorBase.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &ZetaConnectorBaseUpgradedIterator{contract: _ZetaConnectorBase.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *ZetaConnectorBaseUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ZetaConnectorBase.contract.WatchLogs(opts, "Upgraded", implementationRule) + 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(ZetaConnectorBaseUpgraded) + if err := _ZetaConnectorBase.contract.UnpackLog(event, "Upgraded", 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 +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) ParseUpgraded(log types.Log) (*ZetaConnectorBaseUpgraded, error) { + event := new(ZetaConnectorBaseUpgraded) + if err := _ZetaConnectorBase.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ZetaConnectorBaseWithdrawnIterator is returned from FilterWithdrawn and is used to iterate over the raw logs and unpacked data for Withdrawn events raised by the ZetaConnectorBase contract. type ZetaConnectorBaseWithdrawnIterator struct { Event *ZetaConnectorBaseWithdrawn // Event containing the contract specifics and raw log @@ -1993,9 +2376,9 @@ type ZetaConnectorBaseWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorBaseWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -2010,9 +2393,9 @@ func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) FilterWithdrawnAndReverted( return &ZetaConnectorBaseWithdrawnAndRevertedIterator{contract: _ZetaConnectorBase.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorBaseWithdrawnAndReverted, to []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2052,9 +2435,9 @@ func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) WatchWithdrawnAndReverted(o }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) ParseWithdrawnAndReverted(log types.Log) (*ZetaConnectorBaseWithdrawnAndReverted, error) { event := new(ZetaConnectorBaseWithdrawnAndReverted) if err := _ZetaConnectorBase.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go b/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go index 1517821ba..c2ef1f338 100644 --- a/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go +++ b/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go @@ -32,14 +32,14 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } // ZetaConnectorNativeMetaData contains all meta data concerning the ZetaConnectorNative contract. var ZetaConnectorNativeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405234801561001057600080fd5b50604051611ab2380380611ab283398101604081905261002f91610232565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100d7600082610166565b506101027f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610166565b5061012d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610166565b506101587f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610166565b505050505050505050610286565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1661020c5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101c43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610210565b5060005b92915050565b80516001600160a01b038116811461022d57600080fd5b919050565b6000806000806080858703121561024857600080fd5b61025185610216565b935061025f60208601610216565b925061026d60408601610216565b915061027b60608601610216565b905092959194509250565b60805160a0516117c16102f16000396000818161020a015281816104cd0152818161066101528181610712015281816107fa01528181610a5a0152610b0b0152600081816101be01528181610683015281816106e501528181610a7c0152610ade01526117c16000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d8578063950837aa1161008c578063afd2dce411610066578063afd2dce414610393578063d547741f146103a6578063e63ab1e9146103b957600080fd5b8063950837aa14610351578063a217fddf14610364578063a783c7891461036c57600080fd5b80638456cb59116100bd5780638456cb59146102dc57806385f438c1146102e457806391d148541461030b57600080fd5b80635e3e9fef146102b6578063743e0c9b146102c957600080fd5b80632f2ff15d1161012f5780633f4ba83a116101145780633f4ba83a146102835780635b1125911461028b5780635c975abb146102ab57600080fd5b80632f2ff15d1461025d57806336568abe1461027057600080fd5b8063116191b611610160578063116191b6146101b957806321e093b114610205578063248a9ca31461022c57600080fd5b806301ffc9a71461017c578063106e6290146101a4575b600080fd5b61018f61018a3660046112ef565b6103e0565b60405190151581526020015b60405180910390f35b6101b76101b236600461135a565b610479565b005b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b61024f61023a36600461138d565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761026b3660046113a6565b610554565b6101b761027e3660046113a6565b61057f565b6101b76105d8565b6003546101e09073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102c436600461141b565b61060d565b6101b76102d736600461138d565b6107d8565b6101b7610822565b61024f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f6103193660046113a6565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b761035f36600461147d565b610854565b61024f600081565b61024f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b76103a1366004611498565b610a06565b6101b76103b43660046113a6565b610bd6565b61024f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061047357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610481610bfb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104ab81610c3e565b6104b3610c48565b6104f473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610c87565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161053c91815260200190565b60405180910390a25061054f6001600055565b505050565b60008281526002602052604090206001015461056f81610c3e565b6105798383610d08565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146105ce576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61054f8282610e08565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61060281610c3e565b61060a610ec7565b50565b610615610bfb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461063f81610c3e565b610647610c48565b6106a873ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610c87565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610742907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611579565b600060405180830381600087803b15801561075c57600080fd5b505af1158015610770573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516107be939291906115d6565b60405180910390a2506107d16001600055565b5050505050565b6107e0610c48565b61060a73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610f44565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61084c81610c3e565b61060a610f8a565b600061085f81610c3e565b73ffffffffffffffffffffffffffffffffffffffff82166108ac576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003546108f0907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e49073ffffffffffffffffffffffffffffffffffffffff16610e08565b50600354610935907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb9073ffffffffffffffffffffffffffffffffffffffff16610e08565b506109607f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610d08565b5061098b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610d08565b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f19060200160405180910390a15050565b610a0e610bfb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a3881610c3e565b610a40610c48565b610aa173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000088610c87565b6040517fece697b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ece697b390610b3d907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161169d565b600060405180830381600087803b158015610b5757600080fd5b505af1158015610b6b573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac87878786604051610bbb949392919061170e565b60405180910390a250610bce6001600055565b505050505050565b600082815260026020526040902060010154610bf181610c3e565b6105798383610e08565b600260005403610c37576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61060a8133610fe3565b60015460ff1615610c85576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261054f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611074565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610e0057600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d9e3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610473565b506000610473565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610e0057600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610473565b610ecf61110a565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526105799186918216906323b872dd90608401610cc1565b610f92610c48565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610f1a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611070576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061109673ffffffffffffffffffffffffffffffffffffffff841683611146565b905080516000141580156110bb5750808060200190518101906110b9919061173a565b155b1561054f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611067565b60015460ff16610c85576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606111548383600061115b565b9392505050565b606081471015611199576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611067565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516111c2919061175c565b60006040518083038185875af1925050503d80600081146111ff576040519150601f19603f3d011682016040523d82523d6000602084013e611204565b606091505b509150915061121486838361121e565b9695505050505050565b6060826112335761122e826112ad565b611154565b8151158015611257575073ffffffffffffffffffffffffffffffffffffffff84163b155b156112a6576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611067565b5080611154565b8051156112bd5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561130157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461115457600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461135557600080fd5b919050565b60008060006060848603121561136f57600080fd5b61137884611331565b95602085013595506040909401359392505050565b60006020828403121561139f57600080fd5b5035919050565b600080604083850312156113b957600080fd5b823591506113c960208401611331565b90509250929050565b60008083601f8401126113e457600080fd5b50813567ffffffffffffffff8111156113fc57600080fd5b60208301915083602082850101111561141457600080fd5b9250929050565b60008060008060006080868803121561143357600080fd5b61143c86611331565b945060208601359350604086013567ffffffffffffffff81111561145f57600080fd5b61146b888289016113d2565b96999598509660600135949350505050565b60006020828403121561148f57600080fd5b61115482611331565b60008060008060008060a087890312156114b157600080fd5b6114ba87611331565b955060208701359450604087013567ffffffffffffffff8111156114dd57600080fd5b6114e989828a016113d2565b90955093505060608701359150608087013567ffffffffffffffff81111561151057600080fd5b87016060818a03121561152257600080fd5b809150509295509295509295565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006115cb608083018486611530565b979650505050505050565b8381526040602082015260006115f0604083018486611530565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff61161782611331565b1682526020818101359083015260006040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261165c57600080fd5b820160208101903567ffffffffffffffff81111561167957600080fd5b80360382131561168857600080fd5b606060408601526115f0606086018284611530565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a0606082015260006116ef60a083018587611530565b828103608084015261170181856115f9565b9998505050505050505050565b848152606060208201526000611728606083018587611530565b82810360408401526115cb81856115f9565b60006020828403121561174c57600080fd5b8151801515811461115457600080fd5b6000825160005b8181101561177d5760208186018101518583015201611763565b50600092019182525091905056fea2646970667358221220ceea8b306dd4c7495a20f7115fb6e51d4f71952b2e9e3cf8975e29134cc1979f64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052348015601357600080fd5b5060805161248261003d6000396000818161125d01528181611286015261145c01526124826000f3fe6080604052600436106101965760003560e01c80635c975abb116100e1578063950837aa1161008a578063ad3cb1cc11610064578063ad3cb1cc146104f2578063d547741f14610548578063e63ab1e914610568578063f8c8765e1461059c57600080fd5b8063950837aa14610489578063a217fddf146104a9578063a783c789146104be57600080fd5b80638456cb59116100bb5780638456cb59146103db57806385f438c1146103f057806391d148541461042457600080fd5b80635c975abb146103645780635e3e9fef1461039b578063743e0c9b146103bb57600080fd5b80632f2ff15d116101435780634f1ef2861161011d5780634f1ef2861461031c57806352d1902d1461032f5780635b1125911461034457600080fd5b80632f2ff15d146102c757806336568abe146102e75780633f4ba83a1461030757600080fd5b8063116191b611610174578063116191b61461021257806321e093b11461024a578063248a9ca31461026a57600080fd5b806301ffc9a71461019b578063057e0f25146101d0578063106e6290146101f2575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004611dea565b6105bc565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101f06101eb366004611e91565b610655565b005b3480156101fe57600080fd5b506101f061020d366004611f29565b6107ae565b34801561021e57600080fd5b50600054610232906001600160a01b031681565b6040516001600160a01b0390911681526020016101c7565b34801561025657600080fd5b50600154610232906001600160a01b031681565b34801561027657600080fd5b506102b9610285366004611f5c565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c7565b3480156102d357600080fd5b506101f06102e2366004611f75565b610871565b3480156102f357600080fd5b506101f0610302366004611f75565b6108bb565b34801561031357600080fd5b506101f0610907565b6101f061032a366004611fd0565b61093c565b34801561033b57600080fd5b506102b961095b565b34801561035057600080fd5b50600254610232906001600160a01b031681565b34801561037057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bb565b3480156103a757600080fd5b506101f06103b63660046120d7565b61098a565b3480156103c757600080fd5b506101f06103d6366004611f5c565b610ade565b3480156103e757600080fd5b506101f0610afe565b3480156103fc57600080fd5b506102b97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561043057600080fd5b506101bb61043f366004611f75565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561049557600080fd5b506101f06104a4366004612139565b610b30565b3480156104b557600080fd5b506102b9600081565b3480156104ca57600080fd5b506102b97f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156104fe57600080fd5b5061053b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101c79190612178565b34801561055457600080fd5b506101f0610563366004611f75565b610cc3565b34801561057457600080fd5b506102b97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105a857600080fd5b506101f06105b73660046121c9565b610d07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061064f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61065d610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461068781610f0f565b61068f610f19565b6000546001546106ac916001600160a01b03918216911688610f77565b6000546001546040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263d0b492c392610703929116908b908b908b908b908a90600401612315565b600060405180830381600087803b15801561071d57600080fd5b505af1158015610731573d6000803e3d6000fd5b50505050866001600160a01b03167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c87878786604051610774949392919061236c565b60405180910390a2506107a660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6107b6610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e081610f0f565b6107e8610f19565b6001546107ff906001600160a01b03168585610f77565b836001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161083a91815260200190565b60405180910390a25061086c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546108ab81610f0f565b6108b58383611011565b50505050565b6001600160a01b03811633146108fd576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61086c82826110fe565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61093181610f0f565b6109396111c2565b50565b610944611252565b61094d82611322565b610957828261132d565b5050565b6000610965611451565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610992610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109bc81610f0f565b6109c4610f19565b6000546001546109e1916001600160a01b03918216911687610f77565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab5992610a36929116908a908a908a908a906004016123a3565b600060405180830381600087803b158015610a5057600080fd5b505af1158015610a64573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610aa5939291906123db565b60405180910390a250610ad760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610ae6610f19565b600154610939906001600160a01b03163330846114b3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b2881610f0f565b6109396114ec565b6000610b3b81610f0f565b6001600160a01b038216610b7b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610bb2907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166110fe565b50600254610bea907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166110fe565b50610c157f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483611011565b50610c407f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611011565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610cfd81610f0f565b6108b583836110fe565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d525750825b905060008267ffffffffffffffff166001148015610d6f5750303b155b905081158015610d7d575080155b15610db4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e155784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610e2189898989611565565b8315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610f09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109398133611870565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610f75576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261086c91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118fd565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110f4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556110aa3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061064f565b600091505061064f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110f4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061064f565b6111ca611979565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112eb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112df7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061095781610f0f565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113a5575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526113a2918101906123f5565b60015b6113eb576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611447576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016113e2565b61086c83836119d4565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b0384811660248301528381166044830152606482018390526108b59186918216906323b872dd90608401610fa4565b6114f4610f19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611234565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115b05750825b905060008267ffffffffffffffff1660011480156115cd5750303b155b9050811580156115db575080155b15611612576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116735784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061169057506001600160a01b038816155b806116a257506001600160a01b038716155b806116b457506001600160a01b038616155b156116eb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f3611a2a565b6116fb611a32565b611703611a2a565b61170b611a42565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556117669087611011565b506117917f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488611011565b506117bc7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb88611011565b506117e77f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611011565b506118127f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a88611011565b508315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610e7a565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610957576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016113e2565b60006119126001600160a01b03841683611a52565b90508051600014158015611937575080806020019051810190611935919061240e565b155b1561086c576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113e2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610f75576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119dd82611a67565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611a225761086c8282611b0f565b610957611b85565b610f75611bbd565b611a3a611bbd565b610f75611c24565b611a4a611bbd565b610f75611c2c565b6060611a6083836000611c7d565b9392505050565b806001600160a01b03163b600003611ab6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016113e2565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611b2c9190612430565b600060405180830381855af49150503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b5091509150611b7c858383611d33565b95945050505050565b3415610f75576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f75576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610feb611bbd565b611c34611bbd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606081471015611cbb576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113e2565b600080856001600160a01b03168486604051611cd79190612430565b60006040518083038185875af1925050503d8060008114611d14576040519150601f19603f3d011682016040523d82523d6000602084013e611d19565b606091505b5091509150611d29868383611d33565b9695505050505050565b606082611d4857611d4382611da8565b611a60565b8151158015611d5f57506001600160a01b0384163b155b15611da1576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113e2565b5080611a60565b805115611db85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611dfc57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611a6057600080fd5b80356001600160a01b0381168114611e4357600080fd5b919050565b60008083601f840112611e5a57600080fd5b50813567ffffffffffffffff811115611e7257600080fd5b602083019150836020828501011115611e8a57600080fd5b9250929050565b60008060008060008060a08789031215611eaa57600080fd5b611eb387611e2c565b955060208701359450604087013567ffffffffffffffff811115611ed657600080fd5b611ee289828a01611e48565b90955093505060608701359150608087013567ffffffffffffffff811115611f0957600080fd5b87016060818a031215611f1b57600080fd5b809150509295509295509295565b600080600060608486031215611f3e57600080fd5b611f4784611e2c565b95602085013595506040909401359392505050565b600060208284031215611f6e57600080fd5b5035919050565b60008060408385031215611f8857600080fd5b82359150611f9860208401611e2c565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611fe357600080fd5b611fec83611e2c565b9150602083013567ffffffffffffffff81111561200857600080fd5b8301601f8101851361201957600080fd5b803567ffffffffffffffff81111561203357612033611fa1565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561209f5761209f611fa1565b6040528181528282016020018710156120b757600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806000806000608086880312156120ef57600080fd5b6120f886611e2c565b945060208601359350604086013567ffffffffffffffff81111561211b57600080fd5b61212788828901611e48565b96999598509660600135949350505050565b60006020828403121561214b57600080fd5b611a6082611e2c565b60005b8381101561216f578181015183820152602001612157565b50506000910152565b6020815260008251806020840152612197816040850160208701612154565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156121df57600080fd5b6121e885611e2c565b93506121f660208601611e2c565b925061220460408601611e2c565b915061221260608601611e2c565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361227782611e2c565b1682526000602082013567ffffffffffffffff811680821461229857600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126122d457600080fd5b820160208101903567ffffffffffffffff8111156122f157600080fd5b80360382131561230057600080fd5b60606040860152611b7c60608601828461221d565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061234d60a08301858761221d565b828103608084015261235f8185612266565b9998505050505050505050565b84815260606020820152600061238660608301858761221d565b82810360408401526123988185612266565b979650505050505050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061239860808301848661221d565b838152604060208201526000611b7c60408301848661221d565b60006020828403121561240757600080fd5b5051919050565b60006020828403121561242057600080fd5b81518015158114611a6057600080fd5b60008251612442818460208701612154565b919091019291505056fea2646970667358221220074d716950abba5c0be64fcbc56312f034865a42cd6307352b394a64a7488b7b64736f6c634300081a0033", } // ZetaConnectorNativeABI is the input ABI used to generate the binding from. @@ -51,7 +51,7 @@ var ZetaConnectorNativeABI = ZetaConnectorNativeMetaData.ABI var ZetaConnectorNativeBin = ZetaConnectorNativeMetaData.Bin // DeployZetaConnectorNative deploys a new Ethereum contract, binding an instance of ZetaConnectorNative to it. -func DeployZetaConnectorNative(auth *bind.TransactOpts, backend bind.ContractBackend, gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (common.Address, *types.Transaction, *ZetaConnectorNative, error) { +func DeployZetaConnectorNative(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ZetaConnectorNative, error) { parsed, err := ZetaConnectorNativeMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -60,7 +60,7 @@ func DeployZetaConnectorNative(auth *bind.TransactOpts, backend bind.ContractBac return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZetaConnectorNativeBin), backend, gateway_, zetaToken_, tssAddress_, admin_) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZetaConnectorNativeBin), backend) if err != nil { return common.Address{}, nil, nil, err } @@ -302,6 +302,37 @@ func (_ZetaConnectorNative *ZetaConnectorNativeCallerSession) TSSROLE() ([32]byt return _ZetaConnectorNative.Contract.TSSROLE(&_ZetaConnectorNative.CallOpts) } +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorNative *ZetaConnectorNativeCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ZetaConnectorNative.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorNative *ZetaConnectorNativeSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ZetaConnectorNative.Contract.UPGRADEINTERFACEVERSION(&_ZetaConnectorNative.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorNative *ZetaConnectorNativeCallerSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ZetaConnectorNative.Contract.UPGRADEINTERFACEVERSION(&_ZetaConnectorNative.CallOpts) +} + // WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // // Solidity: function WITHDRAWER_ROLE() view returns(bytes32) @@ -457,6 +488,37 @@ func (_ZetaConnectorNative *ZetaConnectorNativeCallerSession) Paused() (bool, er return _ZetaConnectorNative.Contract.Paused(&_ZetaConnectorNative.CallOpts) } +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorNative *ZetaConnectorNativeCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNative.contract.Call(opts, &out, "proxiableUUID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorNative *ZetaConnectorNativeSession) ProxiableUUID() ([32]byte, error) { + return _ZetaConnectorNative.Contract.ProxiableUUID(&_ZetaConnectorNative.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorNative *ZetaConnectorNativeCallerSession) ProxiableUUID() ([32]byte, error) { + return _ZetaConnectorNative.Contract.ProxiableUUID(&_ZetaConnectorNative.CallOpts) +} + // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) @@ -571,6 +633,27 @@ func (_ZetaConnectorNative *ZetaConnectorNativeTransactorSession) GrantRole(role return _ZetaConnectorNative.Contract.GrantRole(&_ZetaConnectorNative.TransactOpts, role, account) } +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorNative *ZetaConnectorNativeTransactor) Initialize(opts *bind.TransactOpts, gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorNative.contract.Transact(opts, "initialize", gateway_, zetaToken_, tssAddress_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorNative *ZetaConnectorNativeSession) Initialize(gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorNative.Contract.Initialize(&_ZetaConnectorNative.TransactOpts, gateway_, zetaToken_, tssAddress_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorNative *ZetaConnectorNativeTransactorSession) Initialize(gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorNative.Contract.Initialize(&_ZetaConnectorNative.TransactOpts, gateway_, zetaToken_, tssAddress_, admin_) +} + // Pause is a paid mutator transaction binding the contract method 0x8456cb59. // // Solidity: function pause() returns() @@ -697,6 +780,27 @@ func (_ZetaConnectorNative *ZetaConnectorNativeTransactorSession) UpdateTSSAddre return _ZetaConnectorNative.Contract.UpdateTSSAddress(&_ZetaConnectorNative.TransactOpts, newTSSAddress) } +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorNative *ZetaConnectorNativeTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorNative.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorNative *ZetaConnectorNativeSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorNative.Contract.UpgradeToAndCall(&_ZetaConnectorNative.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorNative *ZetaConnectorNativeTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorNative.Contract.UpgradeToAndCall(&_ZetaConnectorNative.TransactOpts, newImplementation, data) +} + // Withdraw is a paid mutator transaction binding the contract method 0x106e6290. // // Solidity: function withdraw(address to, uint256 amount, bytes32 internalSendHash) returns() @@ -739,27 +843,161 @@ func (_ZetaConnectorNative *ZetaConnectorNativeTransactorSession) WithdrawAndCal return _ZetaConnectorNative.Contract.WithdrawAndCall(&_ZetaConnectorNative.TransactOpts, to, amount, data, internalSendHash) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xafd2dce4. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() func (_ZetaConnectorNative *ZetaConnectorNativeTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorNative.contract.Transact(opts, "withdrawAndRevert", to, amount, data, internalSendHash, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xafd2dce4. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() func (_ZetaConnectorNative *ZetaConnectorNativeSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorNative.Contract.WithdrawAndRevert(&_ZetaConnectorNative.TransactOpts, to, amount, data, internalSendHash, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xafd2dce4. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() func (_ZetaConnectorNative *ZetaConnectorNativeTransactorSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorNative.Contract.WithdrawAndRevert(&_ZetaConnectorNative.TransactOpts, to, amount, data, internalSendHash, revertContext) } +// ZetaConnectorNativeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ZetaConnectorNative contract. +type ZetaConnectorNativeInitializedIterator struct { + Event *ZetaConnectorNativeInitialized // 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 *ZetaConnectorNativeInitializedIterator) 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(ZetaConnectorNativeInitialized) + 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(ZetaConnectorNativeInitialized) + 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 *ZetaConnectorNativeInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeInitialized represents a Initialized event raised by the ZetaConnectorNative contract. +type ZetaConnectorNativeInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) FilterInitialized(opts *bind.FilterOpts) (*ZetaConnectorNativeInitializedIterator, error) { + + logs, sub, err := _ZetaConnectorNative.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ZetaConnectorNativeInitializedIterator{contract: _ZetaConnectorNative.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeInitialized) (event.Subscription, error) { + + logs, sub, err := _ZetaConnectorNative.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(ZetaConnectorNativeInitialized) + if err := _ZetaConnectorNative.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 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) ParseInitialized(log types.Log) (*ZetaConnectorNativeInitialized, error) { + event := new(ZetaConnectorNativeInitialized) + if err := _ZetaConnectorNative.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ZetaConnectorNativePausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ZetaConnectorNative contract. type ZetaConnectorNativePausedIterator struct { Event *ZetaConnectorNativePaused // Event containing the contract specifics and raw log @@ -1583,13 +1821,14 @@ func (it *ZetaConnectorNativeUpdatedZetaConnectorTSSAddressIterator) Close() err // ZetaConnectorNativeUpdatedZetaConnectorTSSAddress represents a UpdatedZetaConnectorTSSAddress event raised by the ZetaConnectorNative contract. type ZetaConnectorNativeUpdatedZetaConnectorTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedZetaConnectorTSSAddress is a free log retrieval operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// FilterUpdatedZetaConnectorTSSAddress is a free log retrieval operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) FilterUpdatedZetaConnectorTSSAddress(opts *bind.FilterOpts) (*ZetaConnectorNativeUpdatedZetaConnectorTSSAddressIterator, error) { logs, sub, err := _ZetaConnectorNative.contract.FilterLogs(opts, "UpdatedZetaConnectorTSSAddress") @@ -1599,9 +1838,9 @@ func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) FilterUpdatedZetaConnec return &ZetaConnectorNativeUpdatedZetaConnectorTSSAddressIterator{contract: _ZetaConnectorNative.contract, event: "UpdatedZetaConnectorTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedZetaConnectorTSSAddress is a free log subscription operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// WatchUpdatedZetaConnectorTSSAddress is a free log subscription operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) WatchUpdatedZetaConnectorTSSAddress(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeUpdatedZetaConnectorTSSAddress) (event.Subscription, error) { logs, sub, err := _ZetaConnectorNative.contract.WatchLogs(opts, "UpdatedZetaConnectorTSSAddress") @@ -1636,9 +1875,9 @@ func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) WatchUpdatedZetaConnect }), nil } -// ParseUpdatedZetaConnectorTSSAddress is a log parse operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// ParseUpdatedZetaConnectorTSSAddress is a log parse operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) ParseUpdatedZetaConnectorTSSAddress(log types.Log) (*ZetaConnectorNativeUpdatedZetaConnectorTSSAddress, error) { event := new(ZetaConnectorNativeUpdatedZetaConnectorTSSAddress) if err := _ZetaConnectorNative.contract.UnpackLog(event, "UpdatedZetaConnectorTSSAddress", log); err != nil { @@ -1648,6 +1887,150 @@ func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) ParseUpdatedZetaConnect return event, nil } +// ZetaConnectorNativeUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the ZetaConnectorNative contract. +type ZetaConnectorNativeUpgradedIterator struct { + Event *ZetaConnectorNativeUpgraded // 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 *ZetaConnectorNativeUpgradedIterator) 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(ZetaConnectorNativeUpgraded) + 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(ZetaConnectorNativeUpgraded) + 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 *ZetaConnectorNativeUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeUpgraded represents a Upgraded event raised by the ZetaConnectorNative contract. +type ZetaConnectorNativeUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*ZetaConnectorNativeUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ZetaConnectorNative.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradedIterator{contract: _ZetaConnectorNative.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ZetaConnectorNative.contract.WatchLogs(opts, "Upgraded", implementationRule) + 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(ZetaConnectorNativeUpgraded) + if err := _ZetaConnectorNative.contract.UnpackLog(event, "Upgraded", 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 +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) ParseUpgraded(log types.Log) (*ZetaConnectorNativeUpgraded, error) { + event := new(ZetaConnectorNativeUpgraded) + if err := _ZetaConnectorNative.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ZetaConnectorNativeWithdrawnIterator is returned from FilterWithdrawn and is used to iterate over the raw logs and unpacked data for Withdrawn events raised by the ZetaConnectorNative contract. type ZetaConnectorNativeWithdrawnIterator struct { Event *ZetaConnectorNativeWithdrawn // Event containing the contract specifics and raw log @@ -2015,9 +2398,9 @@ type ZetaConnectorNativeWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNativeWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -2032,9 +2415,9 @@ func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) FilterWithdrawnAndRever return &ZetaConnectorNativeWithdrawnAndRevertedIterator{contract: _ZetaConnectorNative.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeWithdrawnAndReverted, to []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2074,9 +2457,9 @@ func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) WatchWithdrawnAndRevert }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) ParseWithdrawnAndReverted(log types.Log) (*ZetaConnectorNativeWithdrawnAndReverted, error) { event := new(ZetaConnectorNativeWithdrawnAndReverted) if err := _ZetaConnectorNative.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go index 7bc824b47..3ae155cec 100644 --- a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go +++ b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -65,8 +65,8 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNativeTestMetaData contains all meta data concerning the ZetaConnectorNativeTest contract. var ZetaConnectorNativeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testTSSUpgrade\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfSenderIsNotTSSUpdater\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061fc688061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063916a17c611610104578063ccb0e3f2116100a2578063e20c9f7111610071578063e20c9f7114610344578063e63ab1e91461034c578063fa7626d414610373578063fe574f841461038057600080fd5b8063ccb0e3f214610324578063d509b16c1461032c578063dcf7d03714610334578063de1cb76c1461033c57600080fd5b8063b0464fdc116100de578063b0464fdc146102f4578063b5508aa9146102fc578063ba414fa614610304578063c19099721461031c57600080fd5b8063916a17c6146102b0578063a217fddf146102c5578063a783c789146102cd57600080fd5b8063493465581161017157806366d9a9a01161014b57806366d9a9a014610249578063828320141461025e57806385226c811461026657806385f438c11461027b57600080fd5b806349346558146102315780634df42da11461023957806352ff59391461024157600080fd5b80632ade3880116101ad5780632ade3880146102045780633cba0107146102195780633e5e3c23146102215780633f7286f41461022957600080fd5b8063070f2ad0146101d45780630a9254e4146101de5780631ed7831c146101e6575b600080fd5b6101dc610388565b005b6101dc610589565b6101ee610d6a565b6040516101fb919061903d565b60405180910390f35b61020c610dcc565b6040516101fb91906190d9565b6101dc610f0e565b6101ee6116c8565b6101ee611728565b6101dc611788565b6101dc611dcb565b6101dc611f3c565b610251612781565b6040516101fb919061923f565b6101dc612903565b61026e612b5f565b6040516101fb91906192dd565b6102a27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101fb565b6102b8612c2f565b6040516101fb9190619354565b6102a2600081565b6102a27f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6102b8612d2a565b61026e612e25565b61030c612ef5565b60405190151581526020016101fb565b6101dc612fc9565b6101dc613234565b6101dc613d59565b6101dc613d95565b6101dc61443c565b6101ee614a93565b6102a27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f5461030c9060ff1681565b6101dc614af3565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156103fa57600080fd5b505af115801561040e573d6000803e3d6000fd5b5050602754604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506104da91906004016193eb565b600060405180830381600087803b1580156104f457600080fd5b505af1158015610508573d6000803e3d6000fd5b50506023546025546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063950837aa91506024015b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780549091166156781790556040516105db90618f50565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561065f573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152610750919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614d11565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556027546025546040519293918216929116906107dc90618f5d565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610818573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061087390618f6a565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156108b7573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516108fc90618f77565b604051809103906000f080158015610918573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156109c457600080fd5b505af11580156109d8573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610a4e57600080fd5b505af1158015610a62573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610ac857600080fd5b505af1158015610adc573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bb857600080fd5b505af1158015610bcc573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b158015610c3d57600080fd5b505af1158015610c51573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610cd557600080fd5b505af1158015610ce9573d6000803e3d6000fd5b5050604080516060810182526024546001600160a01b0390811682526001602080840191825284519081018552600081529383018490528251602880547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909316178255516029559093509150602a90610d6590826194c1565b505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610dc257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610da4575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610f0557600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610eee578382906000526020600020018054610e619061942d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8d9061942d565b8015610eda5780601f10610eaf57610100808354040283529160200191610eda565b820191906000526020600020905b815481529060010190602001808311610ebd57829003601f168201915b505050505081526020019060010190610e42565b505050508152505081526020019060010190610df0565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d9190619580565b905061101a816000614d30565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561106a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108e9190619580565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611171916001600160a01b0391909116906000908690600401619599565b600060405180830381600087803b15801561118b57600080fd5b505af115801561119f573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561123157600080fd5b505af1158015611245573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561133457600080fd5b505af1158015611348573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d915061138d90899088906195c1565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156113ee57600080fd5b505af1158015611402573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061145a92909116908a9089908b906004016195da565b600060405180830381600087803b15801561147457600080fd5b505af1158015611488573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156114db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ff9190619580565b905061150b8188614d30565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561155b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157f9190619580565b90506115948161158f8a87619642565b614d30565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa15801561160a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162e9190619580565b905061163b816000614d30565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561168b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116af9190619580565b90506116bc816000614d30565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610dc2576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610da4575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610dc2576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610da4575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361182993921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186a9190619580565b9050611877816000614d30565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156118c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118eb9190619580565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916119ce916001600160a01b0391909116906000908690600401619599565b600060405180830381600087803b1580156119e857600080fd5b505af11580156119fc573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a8e57600080fd5b505af1158015611aa2573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b7457600080fd5b505af1158015611b88573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611bcd90899088906195c1565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c2e57600080fd5b505af1158015611c42573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611c9a92909116908a9089908b906004016195da565b600060405180830381600087803b158015611cb457600080fd5b505af1158015611cc8573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3e9190619580565b9050611d4b816000614d30565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbf9190619580565b90506115948185614d30565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611eda57600080fd5b505af1158015611eee573d6000803e3d6000fd5b50506023546040517f950837aa000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063950837aa9150602401610555565b6023546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4600482015261432160248201819052916000916001600160a01b03909116906391d1485490604401602060405180830381865afa158015611fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fef9190619655565b9050611ffa81614db0565b6023546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b03848116602483015260009216906391d1485490604401602060405180830381865afa158015612084573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a89190619655565b90506120b381614db0565b6023546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa158015612143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121679190619655565b905061217281614e2a565b6023546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa158015612202573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122269190619655565b905061223181614e2a565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156122a357600080fd5b505af11580156122b7573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561234957600080fd5b505af115801561235d573d6000803e3d6000fd5b50506040516001600160a01b03881681527fa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f19250602001905060405180910390a16023546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301529091169063950837aa90602401600060405180830381600087803b1580156123fe57600080fd5b505af1158015612412573d6000803e3d6000fd5b5050505061249685602360009054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561246d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124919190619677565b614e7c565b6023546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa15801561251f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125439190619655565b935061254e84614e2a565b6023546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa1580156125d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fb9190619655565b925061260683614e2a565b6023546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa158015612691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b59190619655565b91506126c082614db0565b6023546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa15801561274b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276f9190619655565b905061277a81614db0565b5050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610f0557838290600052602060002090600202016040518060400160405290816000820180546127d89061942d565b80601f01602080910402602001604051908101604052809291908181526020018280546128049061942d565b80156128515780601f1061282657610100808354040283529160200191612851565b820191906000526020600020905b81548152906001019060200180831161283457829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156128eb57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116128985790505b505050505081525050815260200190600101906127a5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156129a057600080fd5b505af11580156129b4573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612a9f91906004016193eb565b600060405180830381600087803b158015612ab957600080fd5b505af1158015612acd573d6000803e3d6000fd5b50506023546021546040517fafd2dce40000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063afd2dce49350612b28929091169087908690889060289060040161976a565b600060405180830381600087803b158015612b4257600080fd5b505af1158015612b56573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610f05578382906000526020600020018054612ba29061942d565b80601f0160208091040260200160405190810160405280929190818152602001828054612bce9061942d565b8015612c1b5780601f10612bf057610100808354040283529160200191612c1b565b820191906000526020600020905b815481529060010190602001808311612bfe57829003601f168201915b505050505081526020019060010190612b83565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610f055760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612d1257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612cbf5790505b50505050508152505081526020019060010190612c53565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610f055760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e0d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dba5790505b50505050508152505081526020019060010190612d4e565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610f05578382906000526020600020018054612e689061942d565b80601f0160208091040260200160405190810160405280929190818152602001828054612e949061942d565b8015612ee15780601f10612eb657610100808354040283529160200191612ee1565b820191906000526020600020905b815481529060010190602001808311612ec457829003601f168201915b505050505081526020019060010190612e49565b60085460009060ff1615612f0d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc29190619580565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156130af57600080fd5b505af11580156130c3573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506131ae91906004016193eb565b600060405180830381600087803b1580156131c857600080fd5b505af11580156131dc573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350612b2892909116908790869088906004016195da565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561329557600080fd5b505af11580156132a9573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061339491906004016193eb565b600060405180830381600087803b1580156133ae57600080fd5b505af11580156133c2573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561341657600080fd5b505af115801561342a573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561348757600080fd5b505af115801561349b573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061358691906004016193eb565b600060405180830381600087803b1580156135a057600080fd5b505af11580156135b4573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561360857600080fd5b505af115801561361c573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561367957600080fd5b505af115801561368d573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156136e157600080fd5b505af11580156136f5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561377e57600080fd5b505af1158015613792573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156137ef57600080fd5b505af1158015613803573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561387757600080fd5b505af115801561388b573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156138e857600080fd5b505af11580156138fc573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561395057600080fd5b505af1158015613964573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156139b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139db9190619580565b90506139e8816000614d30565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613ac8916001600160a01b0391909116906000908690600401619599565b600060405180830381600087803b158015613ae257600080fd5b505af1158015613af6573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613b8857600080fd5b505af1158015613b9c573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c3b57600080fd5b505af1158015613c4f573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b158015613cc357600080fd5b505af1158015613cd7573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4d9190619580565b905061277a8186614d30565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a08231910161399a565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613e70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e949190619580565b9050613ea1816000614d30565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f159190619580565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613ff8916001600160a01b0391909116906000908690600401619599565b600060405180830381600087803b15801561401257600080fd5b505af1158015614026573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156140b857600080fd5b505af11580156140cc573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b0316905061410a6002896197b6565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156141d257600080fd5b505af11580156141e6573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d915061422b90899088906195c1565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561428c57600080fd5b505af11580156142a0573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506142f892909116908a9089908b906004016195da565b600060405180830381600087803b15801561431257600080fd5b505af1158015614326573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015614378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061439c9190619580565b90506143ad8161158f60028a6197b6565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156143fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144219190619580565b90506115948161443260028b6197b6565b61158f9087619642565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa1580156144d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144f59190619580565b9050614502816000614d30565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614552573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145769190619580565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614659916001600160a01b0391909116906000908690600401619599565b600060405180830381600087803b15801561467357600080fd5b505af1158015614687573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561471957600080fd5b505af115801561472d573d6000803e3d6000fd5b50506020546040517fcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5935061477192506001600160a01b03909116906028906197f1565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561480757600080fd5b505af115801561481b573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507fbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c90614869908a908990602890619813565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156148ff57600080fd5b505af1158015614913573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac915061495b9089908890602890619813565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156149bc57600080fd5b505af11580156149d0573d6000803e3d6000fd5b50506023546021546040517fafd2dce40000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063afd2dce49350614a2b92909116908a9089908b9060289060040161976a565b600060405180830381600087803b158015614a4557600080fd5b505af1158015614a59573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191016114be565b60606015805480602002602001604051908101604052809291908181526020018280548015610dc2576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610da4575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614b5457600080fd5b505af1158015614b68573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614c5391906004016193eb565b600060405180830381600087803b158015614c6d57600080fd5b505af1158015614c81573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b158015614cf557600080fd5b505af1158015614d09573d6000803e3d6000fd5b505050505050565b6000614d1b618f84565b614d26848483614edd565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b158015614d9c57600080fd5b505afa158015614d09573d6000803e3d6000fd5b6040517fa59828850000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a5982885906024015b60006040518083038186803b158015614e1657600080fd5b505afa15801561277a573d6000803e3d6000fd5b6040517f0c9fd5810000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90630c9fd58190602401614dfe565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401614d84565b600080614eea8584614f58565b9050614f4d6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f3892919061983e565b60405160208183030381529060405285614f64565b9150505b9392505050565b6000614f518383614f92565b60c08101515160009015614f8857614f8184848460c00151614fad565b9050614f51565b614f818484615153565b6000614f9e838361523e565b614f5183836020015184614f64565b600080614fb861524e565b90506000614fc68683615321565b90506000614fdd82606001518360200151856157c7565b90506000614fed838389896159d9565b90506000614ffa82616856565b602081015181519192509060030b1561506d57898260400151604051602001615024929190619860565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252615064916004016193eb565b60405180910390fd5b60006150b06040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616a25565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906151039084906004016193eb565b602060405180830381865afa158015615120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151449190619677565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906151a89087906004016193eb565b600060405180830381865afa1580156151c5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526151ed919081019061999a565b9050600061521b82856040516020016152079291906199cf565b604051602081830303815290604052616c25565b90506001600160a01b038116614d265784846040516020016150249291906199fe565b61524a82826000616c38565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906152d5908490600401619aa9565b600060405180830381865afa1580156152f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261531a9190810190619af0565b9250505090565b6153536040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061539e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6153a785616d3b565b602082015260006153b786617120565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156153f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154219190810190619af0565b8683856020015160405160200161543b9493929190619b39565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906154939085906004016193eb565b600060405180830381865afa1580156154b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154d89190810190619af0565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615520908490600401619c3d565b602060405180830381865afa15801561553d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155619190619655565b61557657816040516020016150249190619c8f565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906155bb908490600401619d21565b600060405180830381865afa1580156155d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156009190810190619af0565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615647908490600401619d73565b602060405180830381865afa158015615664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156889190619655565b1561571d576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906156d2908490600401619d73565b600060405180830381865afa1580156156ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157179190810190619af0565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016157429190619dc5565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161576e929190619e31565b600060405180830381865afa15801561578b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157b39190810190619af0565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816157e35790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061584357615843619e56565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061589757615897619e56565b6020026020010181905250846040516020016158b39190619e85565b604051602081830303815290604052816002815181106158d5576158d5619e56565b6020026020010181905250826040516020016158f19190619ef1565b6040516020818303038152906040528160038151811061591357615913619e56565b6020026020010181905250600061592982616856565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506159ba90604080518082018252600080825260209182015281518083019092528451825280850190820152906173a3565b6159cf57856040516020016150249190619f32565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615a29565b511590565b615b9d57826020015115615ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401615064565b8260c0015115615b9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401615064565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615bb657905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615c1190619fc3565b935060ff1681518110615c2657615c26619e56565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615c779190619fe2565b604051602081830303815290604052828280615c9290619fc3565b935060ff1681518110615ca757615ca7619e56565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615cf490619fc3565b935060ff1681518110615d0957615d09619e56565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615d5690619fc3565b935060ff1681518110615d6b57615d6b619e56565b60200260200101819052508760200151828280615d8790619fc3565b935060ff1681518110615d9c57615d9c619e56565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615de990619fc3565b935060ff1681518110615dfe57615dfe619e56565b602090810291909101015287518282615e1681619fc3565b935060ff1681518110615e2b57615e2b619e56565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615e7890619fc3565b935060ff1681518110615e8d57615e8d619e56565b6020026020010181905250615ea146617404565b8282615eac81619fc3565b935060ff1681518110615ec157615ec1619e56565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615f0e90619fc3565b935060ff1681518110615f2357615f23619e56565b602002602001018190525086828280615f3b90619fc3565b935060ff1681518110615f5057615f50619e56565b60209081029190910101528551156160775760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615fa181619fc3565b935060ff1681518110615fb657615fb6619e56565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906160069089906004016193eb565b600060405180830381865afa158015616023573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261604b9190810190619af0565b828261605681619fc3565b935060ff168151811061606b5761606b619e56565b60200260200101819052505b8460200151156161475760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826160c081619fc3565b935060ff16815181106160d5576160d5619e56565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061612290619fc3565b935060ff168151811061613757616137619e56565b602002602001018190525061630e565b61617f615a248660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6162125760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826161c281619fc3565b935060ff16815181106161d7576161d7619e56565b60200260200101819052508460a001516040516020016161f79190619e85565b60405160208183030381529060405282828061612290619fc3565b8460c0015115801561625557506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261625390511590565b155b1561630e5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261629981619fc3565b935060ff16815181106162ae576162ae619e56565b60200260200101819052506162c2886174a4565b6040516020016162d29190619e85565b6040516020818303038152906040528282806162ed90619fc3565b935060ff168151811061630257616302619e56565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261634290511590565b6163d75760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261638581619fc3565b935060ff168151811061639a5761639a619e56565b602002602001018190525084604001518282806163b690619fc3565b935060ff16815181106163cb576163cb619e56565b60200260200101819052505b6060850151156164f85760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261642081619fc3565b935060ff168151811061643557616435619e56565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156164a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164cc9190810190619af0565b82826164d781619fc3565b935060ff16815181106164ec576164ec619e56565b60200260200101819052505b60e0850151511561659f5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261654281619fc3565b935060ff168151811061655757616557619e56565b60200260200101819052506165738560e0015160000151617404565b828261657e81619fc3565b935060ff168151811061659357616593619e56565b60200260200101819052505b60e085015160200151156166495760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826165ec81619fc3565b935060ff168151811061660157616601619e56565b602002602001018190525061661d8560e0015160200151617404565b828261662881619fc3565b935060ff168151811061663d5761663d619e56565b60200260200101819052505b60e085015160400151156166f35760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261669681619fc3565b935060ff16815181106166ab576166ab619e56565b60200260200101819052506166c78560e0015160400151617404565b82826166d281619fc3565b935060ff16815181106166e7576166e7619e56565b60200260200101819052505b60e0850151606001511561679d5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261674081619fc3565b935060ff168151811061675557616755619e56565b60200260200101819052506167718560e0015160600151617404565b828261677c81619fc3565b935060ff168151811061679157616791619e56565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156167bb576167bb6193fe565b6040519080825280602002602001820160405280156167ee57816020015b60608152602001906001900390816167d95790505b50905060005b8260ff168160ff16101561684757838160ff168151811061681757616817619e56565b6020026020010151828260ff168151811061683457616834619e56565b60209081029190910101526001016167f4565b5093505050505b949350505050565b61687d6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916169039186910161a04d565b600060405180830381865afa158015616920573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169489190810190619af0565b905060006169568683617f93565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161698691906192dd565b6000604051808303816000875af11580156169a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169cd919081019061a094565b805190915060030b158015906169e65750602081015151155b80156169f55750604081015151155b156159cf5781600081518110616a0d57616a0d619e56565b6020026020010151604051602001615024919061a14a565b60606000616a5a8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616a919082905b906180e8565b15616bee576000616b0e82616b0884616b02616ad48a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061810f565b90618171565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b729082906180e8565b15616bdc57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bd9905b82906181f6565b90505b616be58161821c565b92505050614f51565b8215616c0757848460405160200161502492919061a336565b5050604080516020810190915260008152614f51565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616c4757505050565b6000616c54848484618285565b90506000616c6182616856565b602081015181519192509060030b158015616cfd5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616cfd90604080518082018252600080825260209182015281518083019092528451825280850190820152616a8b565b15616d0a57505050505050565b60408201515115616d2a578160400151604051602001615024919061a3dd565b80604051602001615024919061a43b565b60606000616d708360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616dd5905b82906173a3565b15616e4457604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f5190616e3f908390618820565b61821c565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ea6905b82906188aa565b600103616f7357604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f0c90616bd2565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f5190616e3f905b83906181f6565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fd290616dce565b1561710957604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061703a908390618944565b90506000816001835161704d9190619642565b8151811061705d5761705d619e56565b60200260200101519050617100616e3f6170d36040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618820565b95945050505050565b82604051602001615024919061a4a6565b50919050565b606060006171558360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506171b790616dce565b156171c557614f518161821c565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261722490616e9f565b60010361728e57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f5190616e3f90616f6c565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172ed90616dce565b1561710957604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617355908390618944565b90506001815111156173915780600282516173709190619642565b8151811061738057617380619e56565b602002602001015192505050919050565b5082604051602001615024919061a4a6565b8051825160009111156173b857506000614d2a565b815183516020850151600092916173ce9161a584565b6173d89190619642565b9050826020015181036173ef576001915050614d2a565b82516020840151819020912014905092915050565b60606000617411836189e9565b600101905060008167ffffffffffffffff811115617431576174316193fe565b6040519080825280601f01601f19166020018201604052801561745b576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461746557509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617530905b8290618acb565b1561757057505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175cf90617529565b1561760f57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261766e90617529565b156176ae57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261770d90617529565b806177725750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261777290617529565b156177b257505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261781190617529565b806178765750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261787690617529565b156178b657505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261791590617529565b8061797a5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261797a90617529565b156179ba57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a1990617529565b80617a7e5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a7e90617529565b15617abe57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b1d90617529565b15617b5d57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bbc90617529565b15617bfc57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c5b90617529565b15617c9b57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cfa90617529565b15617d3a57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d9990617529565b15617dd957505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e3890617529565b80617e9d5750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e9d90617529565b15617edd57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f3c90617529565b15617f7c57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151615024929060200161a597565b60608060005b845181101561801e5781858281518110617fb557617fb5619e56565b6020026020010151604051602001617fce9291906199cf565b604051602081830303815290604052915060018551617fed9190619642565b81146180165781604051602001618004919061a700565b60405160208183030381529060405291505b600101617f99565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081618037579050509050838160008151811061806257618062619e56565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106180b6576180b6619e56565b602002602001018190525081816002815181106180d5576180d5619e56565b6020908102919091010152949350505050565b60208083015183518351928401516000936181069291849190618adf565b14159392505050565b604080518082019091526000808252602082015260006181418460000151856020015185600001518660200151618bf0565b90508360200151816181539190619642565b84518590618162908390619642565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015618196575081614d2a565b60208083015190840151600191146181bd5750815160208481015190840151829020919020145b80156181ee578251845185906181d4908390619642565b90525082516020850180516181ea90839061a584565b9052505b509192915050565b6040805180820190915260008082526020820152618215838383618d10565b5092915050565b60606000826000015167ffffffffffffffff81111561823d5761823d6193fe565b6040519080825280601f01601f191660200182016040528015618267576020820181803683370190505b50905060006020820190506182158185602001518660000151618dbb565b6060600061829161524e565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816182ae57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061830990619fc3565b935060ff168151811061831e5761831e619e56565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161836f919061a741565b60405160208183030381529060405282828061838a90619fc3565b935060ff168151811061839f5761839f619e56565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806183ec90619fc3565b935060ff168151811061840157618401619e56565b60200260200101819052508260405160200161841d9190619ef1565b60405160208183030381529060405282828061843890619fc3565b935060ff168151811061844d5761844d619e56565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061849a90619fc3565b935060ff16815181106184af576184af619e56565b60200260200101819052506184c48784618e35565b82826184cf81619fc3565b935060ff16815181106184e4576184e4619e56565b6020908102919091010152855151156185905760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261853681619fc3565b935060ff168151811061854b5761854b619e56565b6020026020010181905250618564866000015184618e35565b828261856f81619fc3565b935060ff168151811061858457618584619e56565b60200260200101819052505b8560800151156185fe5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826185d981619fc3565b935060ff16815181106185ee576185ee619e56565b6020026020010181905250618664565b84156186645760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261864381619fc3565b935060ff168151811061865857618658619e56565b60200260200101819052505b604086015151156187005760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826186ae81619fc3565b935060ff16815181106186c3576186c3619e56565b602002602001018190525085604001518282806186df90619fc3565b935060ff16815181106186f4576186f4619e56565b60200260200101819052505b85606001511561876a5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261874981619fc3565b935060ff168151811061875e5761875e619e56565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618788576187886193fe565b6040519080825280602002602001820160405280156187bb57816020015b60608152602001906001900390816187a65790505b50905060005b8260ff168160ff16101561881457838160ff16815181106187e4576187e4619e56565b6020026020010151828260ff168151811061880157618801619e56565b60209081029190910101526001016187c1565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618845575081614d2a565b8151835160208501516000929161885b9161a584565b6188659190619642565b60208401519091506001908214618886575082516020840151819020908220145b80156188a15783518551869061889d908390619642565b9052505b50929392505050565b60008082600001516188ce8560000151866020015186600001518760200151618bf0565b6188d8919061a584565b90505b835160208501516188ec919061a584565b811161821557816188fc8161a786565b92505082600001516189338560200151836189179190619642565b86516189239190619642565b8386600001518760200151618bf0565b61893d919061a584565b90506188db565b6060600061895284846188aa565b61895d90600161a584565b67ffffffffffffffff811115618975576189756193fe565b6040519080825280602002602001820160405280156189a857816020015b60608152602001906001900390816189935790505b50905060005b8151811015616c1d576189c4616e3f86866181f6565b8282815181106189d6576189d6619e56565b60209081029190910101526001016189ae565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618a32577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618a5e576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618a7c57662386f26fc10000830492506010015b6305f5e1008310618a94576305f5e100830492506008015b6127108310618aa857612710830492506004015b60648310618aba576064830492506002015b600a8310614d2a5760010192915050565b6000618ad78383618e75565b159392505050565b600080858411618be65760208411618b925760008415618b2a576001618b06866020619642565b618b1190600861a7a0565b618b1c90600261a89e565b618b269190619642565b1990505b8351811685618b39898961a584565b618b439190619642565b805190935082165b818114618b7d57878411618b65578794505050505061684e565b83618b6f8161a8aa565b945050828451169050618b4b565b618b87878561a584565b94505050505061684e565b838320618b9f8588619642565b618ba9908761a584565b91505b858210618be457848220808203618bd157618bc7868461a584565b935050505061684e565b618bdc600184619642565b925050618bac565b505b5092949350505050565b60008381868511618cfb5760208511618caa5760008515618c3c576001618c18876020619642565b618c2390600861a7a0565b618c2e90600261a89e565b618c389190619642565b1990505b84518116600087618c4d8b8b61a584565b618c579190619642565b855190915083165b828114618c9c57818610618c8457618c778b8b61a584565b965050505050505061684e565b85618c8e8161a786565b965050838651169050618c5f565b85965050505050505061684e565b508383206000905b618cbc8689619642565b8211618cf957858320808203618cd8578394505050505061684e565b618ce360018561a584565b9350508180618cf19061a786565b925050618cb2565b505b618d05878761a584565b979650505050505050565b60408051808201909152600080825260208201526000618d428560000151866020015186600001518760200151618bf0565b602080870180519186019190915251909150618d5e9082619642565b835284516020860151618d71919061a584565b8103618d805760008552618db2565b83518351618d8e919061a584565b85518690618d9d908390619642565b9052508351618dac908261a584565b60208601525b50909392505050565b60208110618df35781518352618dd260208461a584565b9250618ddf60208361a584565b9150618dec602082619642565b9050618dbb565b6000198115618e22576001618e09836020619642565b618e159061010061a89e565b618e1f9190619642565b90505b9151835183169219169190911790915250565b60606000618e438484615321565b8051602080830151604051939450618e5d9390910161a8c1565b60405160208183030381529060405291505092915050565b8151815160009190811115618e88575081515b6020808501519084015160005b83811015618f415782518251808214618f11576000196020871015618ef057600184618ec2896020619642565b618ecc919061a584565b618ed790600861a7a0565b618ee290600261a89e565b618eec9190619642565b1990505b8181168382168181039114618f0e579750614d2a9650505050505050565b50505b618f1c60208661a584565b9450618f2960208561a584565b93505050602081618f3a919061a584565b9050618e95565b50845186516159cf919061a919565b610c9f8061a93a83390190565b611de78061b5d983390190565b611ab28061d3c083390190565b610dc18061ee7283390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618fc7618fcc565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618fc76040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561907e5783516001600160a01b0316835260209384019390920191600101619057565b509095945050505050565b60005b838110156190a457818101518382015260200161908c565b50506000910152565b600081518084526190c5816020860160208601619089565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156191bb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526191a58486516190ad565b602095860195909450929092019160010161916b565b509197505050602094850194929092019150600101619101565b50929695505050505050565b600081518084526020840193506020830160005b828110156192355781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016191f5565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526192ab60408801826190ad565b90506020820151915086810360208801526192c681836191e1565b965050506020938401939190910190600101619267565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261933f8583516190ad565b94506020938401939190910190600101619305565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156191d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526193d560408701826191e1565b955050602093840193919091019060010161937c565b602081526000614f5160208301846190ad565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061944157607f821691505b60208210810361711a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610d6557806000526020600020601f840160051c810160208510156194a15750805b601f840160051c820191505b8181101561277a57600081556001016194ad565b815167ffffffffffffffff8111156194db576194db6193fe565b6194ef816194e9845461942d565b8461947a565b6020601f821160018114619523576000831561950b5750848201515b600019600385901b1c1916600184901b17845561277a565b600084815260208120601f198516915b828110156195535787850151825560209485019460019092019101619533565b50848210156195715786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561959257600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061710060608301846190ad565b82815260406020820152600061684e60408301846190ad565b6001600160a01b038516815283602082015260806040820152600061960260808301856190ad565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614d2a57614d2a619613565b60006020828403121561966757600080fd5b81518015158114614f5157600080fd5b60006020828403121561968957600080fd5b81516001600160a01b0381168114614f5157600080fd5b6001600160a01b0381541682526001810154602083015260006002820160606040850152600081546196d18161942d565b80606088015260018216600081146196f0576001811461972a5761975e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b890101935061975e565b84600052602060002060005b838110156197555781548a820160800152600190910190602001619736565b89016080019450505b50919695505050505050565b6001600160a01b038616815284602082015260a06040820152600061979260a08301866190ad565b84606084015282810360808401526197aa81856196a0565b98975050505050505050565b6000826197ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b038316815260406020820152600061684e60408301846196a0565b83815260606020820152600061982c60608301856190ad565b82810360408401526159cf81856196a0565b6001600160a01b038316815260406020820152600061684e60408301846190ad565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161989881601a850160208801619089565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516198d581601c840160208801619089565b01601c01949350505050565b6040516060810167ffffffffffffffff81118282101715619904576199046193fe565b60405290565b60008067ffffffffffffffff841115619925576199256193fe565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619954576199546193fe565b60405283815290508082840185101561996c57600080fd5b616c1d846020830185619089565b600082601f83011261998b57600080fd5b614f518383516020850161990a565b6000602082840312156199ac57600080fd5b815167ffffffffffffffff8111156199c357600080fd5b614d268482850161997a565b600083516199e1818460208801619089565b8351908301906199f5818360208801619089565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619a3681601a850160208801619089565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351619a73816033840160208801619089565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f5160808301846190ad565b600060208284031215619b0257600080fd5b815167ffffffffffffffff811115619b1957600080fd5b8201601f81018413619b2a57600080fd5b614d268482516020840161990a565b60008551619b4b818460208a01619089565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619b85816001840160208a01619089565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619bc3816002840160208901619089565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619c05816002840160208801619089565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619c5060408301846190ad565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619cc781601f850160208701619089565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619d3460408301846190ad565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619d8660408301846190ad565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619dfd816014850160208701619089565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000619e4460408301856190ad565b8281036020840152614f4d81856190ad565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619ebd816001850160208701619089565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619f03818460208701619089565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619fb681604b850160208701619089565b91909101604b0192915050565b600060ff821660ff8103619fd957619fd9619613565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a040816029850160208701619089565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f5160808301846190ad565b60006020828403121561a0a657600080fd5b815167ffffffffffffffff81111561a0bd57600080fd5b82016060818503121561a0cf57600080fd5b61a0d76198e1565b81518060030b811461a0e857600080fd5b8152602082015167ffffffffffffffff81111561a10457600080fd5b61a1108682850161997a565b602083015250604082015167ffffffffffffffff81111561a13057600080fd5b61a13c8682850161997a565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a1a8816021850160208701619089565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a394816021850160208801619089565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a3d181602e840160208801619089565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a040816029850160208701619089565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a499816022850160208701619089565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a4de81600e850160208701619089565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115614d2a57614d2a619613565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a5cf816018850160208801619089565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a60c81601c840160208801619089565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a712818460208701619089565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a77981601c850160208701619089565b91909101601c0192915050565b6000600019820361a7995761a799619613565b5060010190565b8082028115828204841417614d2a57614d2a619613565b6001815b600184111561a7f25780850481111561a7d65761a7d6619613565b600184161561a7e457908102905b60019390931c92800261a7bb565b935093915050565b60008261a80957506001614d2a565b8161a81657506000614d2a565b816001811461a82c576002811461a8365761a852565b6001915050614d2a565b60ff84111561a8475761a847619613565b50506001821b614d2a565b5060208310610133831016604e8410600b841016171561a875575081810a614d2a565b61a882600019848461a7b7565b806000190482111561a8965761a896619613565b029392505050565b6000614f51838361a7fa565b60008161a8b95761a8b9619613565b506000190190565b6000835161a8d3818460208801619089565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a90d816001840160208801619089565b01600101949350505050565b81810360008312801583831316838312821617156182155761821561961356fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611de7380380611de783398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611dc78339815191528261014c565b50610143600080516020611dc78339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611b50610277600039600081816101d501528181610574015281816105c9015281816107e6015261083b0152611b506000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638456cb59116100ee578063a217fddf11610097578063d9caed1211610071578063d9caed12146103e0578063e609055e146103f3578063e63ab1e914610406578063eab103df1461042d57600080fd5b8063a217fddf146103a2578063d547741f146103aa578063d936547e146103bd57600080fd5b8063950837aa116100c8578063950837aa146103695780639a5904271461037c5780639b19251a1461038f57600080fd5b80638456cb591461030157806385f438c11461030957806391d148541461033057600080fd5b806336568abe116101505780635b1125911161012a5780635b112591146102d05780635c975abb146102e35780637ab697e7146102ee57600080fd5b806336568abe1461028e5780633f4ba83a146102a1578063570618e1146102a957600080fd5b8063248a9ca311610181578063248a9ca314610224578063252f07bf146102565780632f2ff15d1461027b57600080fd5b806301ffc9a7146101a8578063116191b6146101d057806321fc65f21461020f575b600080fd5b6101bb6101b636600461155e565b610440565b60405190151581526020015b60405180910390f35b6101f77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c7565b61022261021d3660046115fe565b6104d9565b005b610248610232366004611671565b6000908152600160208190526040909120015490565b6040519081526020016101c7565b6004546101bb9074010000000000000000000000000000000000000000900460ff1681565b61022261028936600461168a565b610699565b61022261029c36600461168a565b6106c5565b610222610716565b6102487f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101f7906001600160a01b031681565b60025460ff166101bb565b6102226102fc3660046116ba565b61074b565b610222610910565b6102487f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101bb61033e36600461168a565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61022261037736600461175d565b610942565b61022261038a36600461175d565b610ac0565b61022261039d36600461175d565b610b74565b610248600081565b6102226103b836600461168a565b610c2b565b6101bb6103cb36600461175d565b60036020526000908152604090205460ff1681565b6102226103ee36600461177a565b610c51565b6102226104013660046117bb565b610d49565b6102487f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61022261043b36600461185a565b610f75565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104e1610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461050b8161100e565b610513611018565b6001600160a01b03851660009081526003602052604090205460ff16610565576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105996001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086611057565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106069088908a908990899089906004016118c0565b600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161067f93929190611903565b60405180910390a3506106926001600055565b5050505050565b600082815260016020819052604090912001546106b58161100e565b6106bf83836110cb565b50505050565b6001600160a01b0381163314610707576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610711828261115e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107408161100e565b6107486111e5565b50565b610753610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461077d8161100e565b610785611018565b6001600160a01b03861660009081526003602052604090205460ff166107d7576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61080b6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087611057565b6040517fece697b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ece697b39061087a9089908b908a908a908a908a906004016119bf565b600060405180830381600087803b15801561089457600080fd5b505af11580156108a8573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640878787876040516108f59493929190611a16565b60405180910390a3506109086001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61093a8161100e565b610748611237565b600061094d8161100e565b6001600160a01b03821661098d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546109c4907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661115e565b506004546109fc907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661115e565b50610a277f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836110cb565b50610a527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a836110cb565b50600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527f086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba9060200160405180910390a15050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610aea8161100e565b6001600160a01b038216610b2a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610b9e8161100e565b6001600160a01b038216610bde576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610c478161100e565b6106bf838361115e565b610c59610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610c838161100e565b610c8b611018565b6001600160a01b03831660009081526003602052604090205460ff16610cdd576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf16001600160a01b0384168584611057565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610d3691815260200190565b60405180910390a3506107116001600055565b610d51610fcb565b610d59611018565b60045474010000000000000000000000000000000000000000900460ff16610dad576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610dff576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a42565b9050610e9a6001600160a01b038616333087611274565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f459190611a42565b610f4f9190611a5b565b8787604051610f62959493929190611a95565b60405180910390a2506109086001600055565b6000610f808161100e565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403611007576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61074881336112ad565b60025460ff1615611055576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611324565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166111565760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104d3565b5060006104d3565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16156111565760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104d3565b6111ed6113a0565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61123f611018565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861121a3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106bf9186918216906323b872dd90608401611084565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611320576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b60006113396001600160a01b038416836113dc565b9050805160001415801561135e57508080602001905181019061135c9190611ace565b155b15610711576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611317565b60025460ff16611055576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606113ea838360006113f1565b9392505050565b60608147101561142f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611317565b600080856001600160a01b0316848660405161144b9190611aeb565b60006040518083038185875af1925050503d8060008114611488576040519150601f19603f3d011682016040523d82523d6000602084013e61148d565b606091505b509150915061149d8683836114a7565b9695505050505050565b6060826114bc576114b78261151c565b6113ea565b81511580156114d357506001600160a01b0384163b155b15611515576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611317565b50806113ea565b80511561152c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561157057600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113ea57600080fd5b6001600160a01b038116811461074857600080fd5b60008083601f8401126115c757600080fd5b50813567ffffffffffffffff8111156115df57600080fd5b6020830191508360208285010111156115f757600080fd5b9250929050565b60008060008060006080868803121561161657600080fd5b8535611621816115a0565b94506020860135611631816115a0565b935060408601359250606086013567ffffffffffffffff81111561165457600080fd5b611660888289016115b5565b969995985093965092949392505050565b60006020828403121561168357600080fd5b5035919050565b6000806040838503121561169d57600080fd5b8235915060208301356116af816115a0565b809150509250929050565b60008060008060008060a087890312156116d357600080fd5b86356116de816115a0565b955060208701356116ee816115a0565b945060408701359350606087013567ffffffffffffffff81111561171157600080fd5b61171d89828a016115b5565b909450925050608087013567ffffffffffffffff81111561173d57600080fd5b87016060818a03121561174f57600080fd5b809150509295509295509295565b60006020828403121561176f57600080fd5b81356113ea816115a0565b60008060006060848603121561178f57600080fd5b833561179a816115a0565b925060208401356117aa816115a0565b929592945050506040919091013590565b600080600080600080608087890312156117d457600080fd5b863567ffffffffffffffff8111156117eb57600080fd5b6117f789828a016115b5565b909750955050602087013561180b816115a0565b935060408701359250606087013567ffffffffffffffff81111561182e57600080fd5b61183a89828a016115b5565b979a9699509497509295939492505050565b801515811461074857600080fd5b60006020828403121561186c57600080fd5b81356113ea8161184c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b03851660208201528360408201526080606082015260006118f8608083018486611877565b979650505050505050565b83815260406020820152600061191d604083018486611877565b95945050505050565b60008135611933816115a0565b6001600160a01b03168352602082810135908401526040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261197e57600080fd5b820160208101903567ffffffffffffffff81111561199b57600080fd5b8036038213156119aa57600080fd5b6060604086015261191d606086018284611877565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006119f760a083018587611877565b8281036080840152611a098185611926565b9998505050505050505050565b848152606060208201526000611a30606083018587611877565b82810360408401526118f88185611926565b600060208284031215611a5457600080fd5b5051919050565b818103818111156104d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611aa9606083018789611877565b8560208401528281036040840152611ac2818587611877565b98975050505050505050565b600060208284031215611ae057600080fd5b81516113ea8161184c565b6000825160005b81811015611b0c5760208186018101518583015201611af2565b50600092019182525091905056fea2646970667358221220a57d389b60850bdfffcd53692f80a9c416ca5b9b4d1b7d58052beba77fb7a96b64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405234801561001057600080fd5b50604051611ab2380380611ab283398101604081905261002f91610232565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100d7600082610166565b506101027f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610166565b5061012d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610166565b506101587f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610166565b505050505050505050610286565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1661020c5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101c43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610210565b5060005b92915050565b80516001600160a01b038116811461022d57600080fd5b919050565b6000806000806080858703121561024857600080fd5b61025185610216565b935061025f60208601610216565b925061026d60408601610216565b915061027b60608601610216565b905092959194509250565b60805160a0516117c16102f16000396000818161020a015281816104cd0152818161066101528181610712015281816107fa01528181610a5a0152610b0b0152600081816101be01528181610683015281816106e501528181610a7c0152610ade01526117c16000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d8578063950837aa1161008c578063afd2dce411610066578063afd2dce414610393578063d547741f146103a6578063e63ab1e9146103b957600080fd5b8063950837aa14610351578063a217fddf14610364578063a783c7891461036c57600080fd5b80638456cb59116100bd5780638456cb59146102dc57806385f438c1146102e457806391d148541461030b57600080fd5b80635e3e9fef146102b6578063743e0c9b146102c957600080fd5b80632f2ff15d1161012f5780633f4ba83a116101145780633f4ba83a146102835780635b1125911461028b5780635c975abb146102ab57600080fd5b80632f2ff15d1461025d57806336568abe1461027057600080fd5b8063116191b611610160578063116191b6146101b957806321e093b114610205578063248a9ca31461022c57600080fd5b806301ffc9a71461017c578063106e6290146101a4575b600080fd5b61018f61018a3660046112ef565b6103e0565b60405190151581526020015b60405180910390f35b6101b76101b236600461135a565b610479565b005b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b61024f61023a36600461138d565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761026b3660046113a6565b610554565b6101b761027e3660046113a6565b61057f565b6101b76105d8565b6003546101e09073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102c436600461141b565b61060d565b6101b76102d736600461138d565b6107d8565b6101b7610822565b61024f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f6103193660046113a6565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b761035f36600461147d565b610854565b61024f600081565b61024f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b76103a1366004611498565b610a06565b6101b76103b43660046113a6565b610bd6565b61024f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061047357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610481610bfb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104ab81610c3e565b6104b3610c48565b6104f473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610c87565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161053c91815260200190565b60405180910390a25061054f6001600055565b505050565b60008281526002602052604090206001015461056f81610c3e565b6105798383610d08565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146105ce576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61054f8282610e08565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61060281610c3e565b61060a610ec7565b50565b610615610bfb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461063f81610c3e565b610647610c48565b6106a873ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610c87565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610742907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611579565b600060405180830381600087803b15801561075c57600080fd5b505af1158015610770573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516107be939291906115d6565b60405180910390a2506107d16001600055565b5050505050565b6107e0610c48565b61060a73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610f44565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61084c81610c3e565b61060a610f8a565b600061085f81610c3e565b73ffffffffffffffffffffffffffffffffffffffff82166108ac576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003546108f0907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e49073ffffffffffffffffffffffffffffffffffffffff16610e08565b50600354610935907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb9073ffffffffffffffffffffffffffffffffffffffff16610e08565b506109607f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610d08565b5061098b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610d08565b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f19060200160405180910390a15050565b610a0e610bfb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a3881610c3e565b610a40610c48565b610aa173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000088610c87565b6040517fece697b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ece697b390610b3d907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161169d565b600060405180830381600087803b158015610b5757600080fd5b505af1158015610b6b573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac87878786604051610bbb949392919061170e565b60405180910390a250610bce6001600055565b505050505050565b600082815260026020526040902060010154610bf181610c3e565b6105798383610e08565b600260005403610c37576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61060a8133610fe3565b60015460ff1615610c85576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261054f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611074565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610e0057600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d9e3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610473565b506000610473565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610e0057600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610473565b610ecf61110a565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526105799186918216906323b872dd90608401610cc1565b610f92610c48565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610f1a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611070576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061109673ffffffffffffffffffffffffffffffffffffffff841683611146565b905080516000141580156110bb5750808060200190518101906110b9919061173a565b155b1561054f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611067565b60015460ff16610c85576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606111548383600061115b565b9392505050565b606081471015611199576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611067565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516111c2919061175c565b60006040518083038185875af1925050503d80600081146111ff576040519150601f19603f3d011682016040523d82523d6000602084013e611204565b606091505b509150915061121486838361121e565b9695505050505050565b6060826112335761122e826112ad565b611154565b8151158015611257575073ffffffffffffffffffffffffffffffffffffffff84163b155b156112a6576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611067565b5080611154565b8051156112bd5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561130157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461115457600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461135557600080fd5b919050565b60008060006060848603121561136f57600080fd5b61137884611331565b95602085013595506040909401359392505050565b60006020828403121561139f57600080fd5b5035919050565b600080604083850312156113b957600080fd5b823591506113c960208401611331565b90509250929050565b60008083601f8401126113e457600080fd5b50813567ffffffffffffffff8111156113fc57600080fd5b60208301915083602082850101111561141457600080fd5b9250929050565b60008060008060006080868803121561143357600080fd5b61143c86611331565b945060208601359350604086013567ffffffffffffffff81111561145f57600080fd5b61146b888289016113d2565b96999598509660600135949350505050565b60006020828403121561148f57600080fd5b61115482611331565b60008060008060008060a087890312156114b157600080fd5b6114ba87611331565b955060208701359450604087013567ffffffffffffffff8111156114dd57600080fd5b6114e989828a016113d2565b90955093505060608701359150608087013567ffffffffffffffff81111561151057600080fd5b87016060818a03121561152257600080fd5b809150509295509295509295565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006115cb608083018486611530565b979650505050505050565b8381526040602082015260006115f0604083018486611530565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff61161782611331565b1682526020818101359083015260006040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261165c57600080fd5b820160208101903567ffffffffffffffff81111561167957600080fd5b80360382131561168857600080fd5b606060408601526115f0606086018284611530565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a0606082015260006116ef60a083018587611530565b828103608084015261170181856115f9565b9998505050505050505050565b848152606060208201526000611728606083018587611530565b82810360408401526115cb81856115f9565b60006020828403121561174c57600080fd5b8151801515811461115457600080fd5b6000825160005b8181101561177d5760208186018101518583015201611763565b50600092019182525091905056fea2646970667358221220ceea8b306dd4c7495a20f7115fb6e51d4f71952b2e9e3cf8975e29134cc1979f64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d9d806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c578063a9b0a73c146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106f9565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7fcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e53382604051610210929190610a2f565b60405180910390a150565b61022361036f565b6000610230600285610b38565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610be1565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c6b565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d2e565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d4b565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610a6d83610694565b166040820152600080602084013590508060608401525060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ab957600080fd5b830160208101903567ffffffffffffffff811115610ad657600080fd5b803603821315610ae557600080fd5b606060808501528060a0850152808260c0860137600060c0828601015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509392505050565b600082610b6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b8e578181015183820152602001610b76565b50506000910152565b60008151808452610baf816020860160208601610b73565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c1660a0830186610b97565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c61578151865260209586019590910190600101610c43565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610cfe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610ce9858351610b97565b94506020938401939190910190600101610caf565b505050508281036040840152610d148186610c2f565b915050610d25606083018415159052565b95945050505050565b600060208284031215610d4057600080fd5b81516104f681610840565b60008251610d5d818460208701610b73565b919091019291505056fea264697066735822122098725982494f2e15151404f3fbfc80b0517e09c0b3e8ae0e6602ac62c5ba8d0d64736f6c634300081a0033a264697066735822122046770466f89526cbd6f75f5c4a9d209b50f829c8e22610845da441398de534c864736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testTSSUpgrade\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfSenderIsNotTSSUpdater\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061cf4e8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063a217fddf11610104578063ccb0e3f2116100a2578063e20c9f7111610071578063e20c9f7114610357578063e63ab1e91461035f578063fa7626d414610386578063fe574f841461039357600080fd5b8063ccb0e3f214610337578063d509b16c1461033f578063dcf7d03714610347578063de1cb76c1461034f57600080fd5b8063b0464fdc116100de578063b0464fdc14610307578063b5508aa91461030f578063ba414fa614610317578063c19099721461032f57600080fd5b8063a217fddf146102d0578063a783c789146102d8578063af298bb1146102ff57600080fd5b8063493465581161017c578063828320141161014b578063828320141461026957806385226c811461027157806385f438c114610286578063916a17c6146102bb57600080fd5b8063493465581461023c5780634df42da11461024457806352ff59391461024c57806366d9a9a01461025457600080fd5b80632ade3880116101b85780632ade38801461020f5780633cba0107146102245780633e5e3c231461022c5780633f7286f41461023457600080fd5b8063070f2ad0146101df5780630a9254e4146101e95780631ed7831c146101f1575b600080fd5b6101e761039b565b005b6101e761059b565b6101f9610dee565b6040516102069190619b1e565b60405180910390f35b610217610e50565b6040516102069190619bba565b6101e7610f92565b6101f9611755565b6101f96117b5565b6101e7611815565b6101e7611e59565b6101e7611fc9565b61025c612818565b6040516102069190619d20565b6101e761299a565b610279612bfa565b6040516102069190619dbe565b6102ad7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b604051908152602001610206565b6102c3612cca565b6040516102069190619e35565b6102ad600081565b6102ad7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101e7612dc5565b6102c3613211565b61027961330c565b61031f6133dc565b6040519015158152602001610206565b6101e76134b0565b6101e7613720565b6101e7614246565b6101e7614284565b6101e761492e565b6101f9614f8b565b6102ad7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f5461031f9060ff1681565b6101e7614feb565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561040d57600080fd5b505af1158015610421573d6000803e3d6000fd5b5050602654604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506104ed9190600401619ecc565b600060405180830381600087803b15801561050757600080fd5b505af115801561051b573d6000803e3d6000fd5b5050602254602480546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529216935063950837aa9250015b600060405180830381600087803b15801561058157600080fd5b505af1158015610595573d6000803e3d6000fd5b50505050565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580548216611234179055602680548216615678179055602780549091166198761790556040516105f990619a4b565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561067d573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526026546024805493519186169082015260448101939093529216606482015260009161076f916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052615204565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c000000000000000000000000000000006020820152602654602480549351949096048516958401959095529383166044830152909116606482015291925061081591608401610712565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691909117909155604080518082018252601781527f5a657461436f6e6e6563746f724e61746976652e736f6c0000000000000000006020820152601f5460235460265460248054955161010090940487169084015290851660448301528416606482015291909216608482015291925061091a9160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e00000000000000000000000000000000000000000000000000000000179052615204565b602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831617905560405190915061095c90619a58565b604051809103906000f080158015610978573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556026546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a2457600080fd5b505af1158015610a38573d6000803e3d6000fd5b5050602480546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d93506306447d56925001600060405180830381600087803b158015610aad57600080fd5b505af1158015610ac1573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b158015610b2c57600080fd5b505af1158015610b40573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b158015610bab57600080fd5b505af1158015610bbf573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c2157600080fd5b505af1158015610c35573d6000803e3d6000fd5b50506023546022546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b406024820152911692506340c10f199150604401600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d3c57600080fd5b505af1158015610d50573d6000803e3d6000fd5b5050604080516060810182526023546001600160a01b039081168252600160208084019182528451908101855260008152938301849052825160288054925167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316919093161717815590935091506029906105959082619fa7565b60606016805480602002602001604051908101604052809291908181526020018280548015610e4657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e28575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610f8957600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610f72578382906000526020600020018054610ee590619f0e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1190619f0e565b8015610f5e5780601f10610f3357610100808354040283529160200191610f5e565b820191906000526020600020905b815481529060010190602001808311610f4157829003601f168201915b505050505081526020019060010190610ec6565b505050508152505081526020019060010190610e74565b50505050905090565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260235460255491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa158015611070573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611094919061a066565b90506110a1816000615223565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156110f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611116919061a066565b601f54604080516001600160a01b036101009093048316602482015260448082018a905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926111f192911690600090869060040161a07f565b600060405180830381600087803b15801561120b57600080fd5b505af115801561121f573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156112b157600080fd5b505af11580156112c5573d6000803e3d6000fd5b5050601f54602354602554604080516101009094046001600160a01b039081168552602085018d9052928316908401521660608201527f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609250608001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156113b957600080fd5b505af11580156113cd573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611412908990889061a0a7565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561147357600080fd5b505af1158015611487573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506114df92909116908a9089908b9060040161a0c0565b600060405180830381600087803b1580156114f957600080fd5b505af115801561150d573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611585919061a066565b90506115918188615223565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156115e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611606919061a066565b905061161b816116168a8761a128565b615223565b602354601f546020546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b0390811660048401529081166024830152600092169063dd62ed3e90604401602060405180830381865afa158015611693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b7919061a066565b90506116c4816000615223565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa158015611718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173c919061a066565b9050611749816000615223565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610e46576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e28575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610e46576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e28575050505050905090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260235460255493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936118b793921691016001600160a01b0391909116815260200190565b602060405180830381865afa1580156118d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f8919061a066565b9050611905816000615223565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197a919061a066565b601f54604080516001600160a01b036101009093048316602482015260448082018a905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611a5592911690600090869060040161a07f565b600060405180830381600087803b158015611a6f57600080fd5b505af1158015611a83573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611b1557600080fd5b505af1158015611b29573d6000803e3d6000fd5b5050601f546040516101009091046001600160a01b031681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09250602001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611c0057600080fd5b505af1158015611c14573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611c59908990889061a0a7565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611cba57600080fd5b505af1158015611cce573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611d2692909116908a9089908b9060040161a0c0565b600060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcb919061a066565b9050611dd8816000615223565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4d919061a066565b905061161b8185615223565b602480546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015611eca57600080fd5b505af1158015611ede573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611f6757600080fd5b505af1158015611f7b573d6000803e3d6000fd5b50506022546040517f950837aa000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063950837aa9150602401610567565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4600482015261432160248201819052916000916001600160a01b03909116906391d1485490604401602060405180830381865afa158015612058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207c919061a13b565b9050612087816152a3565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b03848116602483015260009216906391d1485490604401602060405180830381865afa158015612111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612135919061a13b565b9050612140816152a3565b6022546026546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa1580156121d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f4919061a13b565b90506121ff8161531d565b6022546026546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa15801561228f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b3919061a13b565b90506122be8161531d565b602480546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b15801561232f57600080fd5b505af1158015612343573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156123d557600080fd5b505af11580156123e9573d6000803e3d6000fd5b5050602654604080516001600160a01b03928316815291891660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e935001905060405180910390a16022546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301529091169063950837aa90602401600060405180830381600087803b15801561249557600080fd5b505af11580156124a9573d6000803e3d6000fd5b5050505061252d85602260009054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612504573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612528919061a15d565b61536f565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa1580156125b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125da919061a13b565b93506125e58461531d565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa15801561266e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612692919061a13b565b925061269d8361531d565b6022546026546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c919061a13b565b9150612757826152a3565b6022546026546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612806919061a13b565b9050612811816152a3565b5050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610f89578382906000526020600020906002020160405180604001604052908160008201805461286f90619f0e565b80601f016020809104026020016040519081016040528092919081815260200182805461289b90619f0e565b80156128e85780601f106128bd576101008083540402835291602001916128e8565b820191906000526020600020905b8154815290600101906020018083116128cb57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561298257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161292f5790505b5050505050815250508152602001906001019061283c565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526024805463ca669fa760e01b84526001600160a01b03166004840152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b158015612a3757600080fd5b505af1158015612a4b573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612b3a9190600401619ecc565b600060405180830381600087803b158015612b5457600080fd5b505af1158015612b68573d6000803e3d6000fd5b50506022546020546040517f057e0f250000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063057e0f259350612bc3929091169087908690889060289060040161a25b565b600060405180830381600087803b158015612bdd57600080fd5b505af1158015612bf1573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610f89578382906000526020600020018054612c3d90619f0e565b80601f0160208091040260200160405190810160405280929190818152602001828054612c6990619f0e565b8015612cb65780601f10612c8b57610100808354040283529160200191612cb6565b820191906000526020600020905b815481529060010190602001808311612c9957829003601f168201915b505050505081526020019060010190612c1e565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610f895760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612dad57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612d5a5790505b50505050508152505081526020019060010190612cee565b602280546040805160608101909152828152612e0f926001600160a01b039092169161cef760208301396040805160208101909152600081526024546001600160a01b03166153d0565b6022546023546025546040516370a0823160e01b81526001600160a01b03918216600482015292811692620186a09260009283929116906370a0823190602401602060405180830381865afa158015612e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e90919061a066565b9050612e9d816000615223565b6025546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612f7d916001600160a01b039190911690600090869060040161a07f565b600060405180830381600087803b158015612f9757600080fd5b505af1158015612fab573d6000803e3d6000fd5b50506040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0388166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561303957600080fd5b505af115801561304d573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156130ec57600080fd5b505af1158015613100573d6000803e3d6000fd5b50506025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810188905260448101879052908816925063106e62909150606401600060405180830381600087803b15801561317257600080fd5b505af1158015613186573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156131d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fd919061a066565b90506132098186615223565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610f895760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156132f457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116132a15790505b50505050508152505081526020019060010190613235565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610f8957838290600052602060002001805461334f90619f0e565b80601f016020809104026020016040519081016040528092919081815260200182805461337b90619f0e565b80156133c85780601f1061339d576101008083540402835291602001916133c8565b820191906000526020600020905b8154815290600101906020018083116133ab57829003601f168201915b505050505081526020019060010190613330565b60085460009060ff16156133f4575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a9919061a066565b1415905090565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260248054915163ca669fa760e01b81526001600160a01b039092166004830152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b15801561359757600080fd5b505af11580156135ab573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061369a9190600401619ecc565b600060405180830381600087803b1580156136b457600080fd5b505af11580156136c8573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350612bc3929091169087908690889060040161a0c0565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561378157600080fd5b505af1158015613795573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138809190600401619ecc565b600060405180830381600087803b15801561389a57600080fd5b505af11580156138ae573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561390257600080fd5b505af1158015613916573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561397357600080fd5b505af1158015613987573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613a729190600401619ecc565b600060405180830381600087803b158015613a8c57600080fd5b505af1158015613aa0573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613af457600080fd5b505af1158015613b08573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613b6557600080fd5b505af1158015613b79573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613bcd57600080fd5b505af1158015613be1573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613c6a57600080fd5b505af1158015613c7e573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b158015613d6357600080fd5b505af1158015613d77573d6000803e3d6000fd5b50506024805460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063ca669fa7925001600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613e3b57600080fd5b505af1158015613e4f573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015613ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec7919061a066565b9050613ed4816000615223565b6025546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613fb4916001600160a01b039190911690600090869060040161a07f565b600060405180830381600087803b158015613fce57600080fd5b505af1158015613fe2573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561407457600080fd5b505af1158015614088573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561412757600080fd5b505af115801561413b573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b1580156141af57600080fd5b505af11580156141c3573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061423a919061a066565b90506128118186615223565b6023546025546040516370a0823160e01b81526001600160a01b039182166004820152620186a09260009283929116906370a0823190602401613e86565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc51316910000000000000000000000000000000000000000000000000000000017905260235460255491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa158015614362573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614386919061a066565b9050614393816000615223565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156143e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614408919061a066565b601f54604080516001600160a01b036101009093048316602482015260448082018a905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926144e392911690600090869060040161a07f565b600060405180830381600087803b1580156144fd57600080fd5b505af1158015614511573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156145a357600080fd5b505af11580156145b7573d6000803e3d6000fd5b5050601f547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60925061010090046001600160a01b031690506145fa60028961a2a7565b602354602554604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156146c257600080fd5b505af11580156146d6573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d915061471b908990889061a0a7565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561477c57600080fd5b505af1158015614790573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506147e892909116908a9089908b9060040161a0c0565b600060405180830381600087803b15801561480257600080fd5b505af1158015614816573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061488d919061a066565b905061489e8161161660028a61a2a7565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156148ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614913919061a066565b905061161b8161492460028b61a2a7565b611616908761a128565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526023546020546370a0823160e01b84526001600160a01b0390811660048501529193506000929116906370a0823190602401602060405180830381865afa1580156149c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149e8919061a066565b90506149f5816000615223565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a6a919061a066565b601f54604080516001600160a01b036101009093048316602482015260448082018a905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392614b4592911690600090869060040161a07f565b600060405180830381600087803b158015614b5f57600080fd5b505af1158015614b73573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614c0557600080fd5b505af1158015614c19573d6000803e3d6000fd5b505050507f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e601f60019054906101000a90046001600160a01b03166028604051614c6492919061a2e2565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614cfe57600080fd5b505af1158015614d12573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143690614d60908a90899060289061a304565b60405180910390a36022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614df657600080fd5b505af1158015614e0a573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c9150614e52908990889060289061a304565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614eb357600080fd5b505af1158015614ec7573d6000803e3d6000fd5b50506022546020546040517f057e0f250000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063057e0f259350614f2292909116908a9089908b9060289060040161a25b565b600060405180830381600087803b158015614f3c57600080fd5b505af1158015614f50573d6000803e3d6000fd5b50506023546020546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401611544565b60606015805480602002602001604051908101604052809291908181526020018280548015610e46576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e28575050505050905090565b6024805460405163ca669fa760e01b81526001600160a01b039091166004820152620186a091600091737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b15801561504b57600080fd5b505af115801561505f573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061514e9190600401619ecc565b600060405180830381600087803b15801561516857600080fd5b505af115801561517c573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b1580156151f057600080fd5b505af1158015613209573d6000803e3d6000fd5b600061520e619a65565b6152198484836153e5565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b15801561528f57600080fd5b505afa158015613209573d6000803e3d6000fd5b6040517fa59828850000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a5982885906024015b60006040518083038186803b15801561530957600080fd5b505afa158015612811573d6000803e3d6000fd5b6040517f0c9fd5810000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90630c9fd581906024016152f1565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401615277565b6153d8619a65565b6128118585858486615460565b6000806153f28584615560565b90506154556040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161544092919061a32f565b6040516020818303038152906040528561556c565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b1580156154d257600080fd5b505af19250505080156154e3575060015b6154f8576154f38787878761559a565b612bf1565b6155048787878761559a565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561553f57600080fd5b505af1158015615553573d6000803e3d6000fd5b5050505050505050505050565b600061545983836155b3565b60c081015151600090156155905761558984848460c001516155ce565b9050615459565b6155898484615774565b60006155a6848361585f565b905061281185828561586b565b60006155bf8383615c35565b6154598383602001518461556c565b6000806155d9615c45565b905060006155e78683615d18565b905060006155fe82606001518360200151856161be565b9050600061560e838389896163d0565b9050600061561b8261724d565b602081015181519192509060030b1561568e5789826040015160405160200161564592919061a351565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261568591600401619ecc565b60405180910390fd5b60006156d16040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161741c565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90615724908490600401619ecc565b602060405180830381865afa158015615741573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615765919061a15d565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906157c9908790600401619ecc565b600060405180830381865afa1580156157e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261580e919081019061a48b565b9050600061583c828560405160200161582892919061a4c0565b60405160208183030381529060405261761c565b90506001600160a01b03811661521957848460405160200161564592919061a4ef565b60006155bf838361762f565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015615907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061592b919061a066565b905080615ad257600061593d8661763b565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506159c8905b60408051808201825260008082526020918201528151808301909252845182528085019082015290617733565b806159d4575060008451115b15615a57576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef28690615a20908890889060040161a32f565b600060405180830381600087803b158015615a3a57600080fd5b505af1158015615a4e573d6000803e3d6000fd5b50505050615acc565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b158015615ab357600080fd5b505af1158015615ac7573d6000803e3d6000fd5b505050505b50612811565b806000615ade8261763b565b604080518082018252600581527f352e302e3000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615b409061599b565b80615b4c575060008551115b15615bd1576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90615b9a908a908a908a9060040161a59a565b600060405180830381600087803b158015615bb457600080fd5b505af1158015615bc8573d6000803e3d6000fd5b50505050612bf1565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b15801561553f57600080fd5b615c4182826000617747565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90615ccc90849060040161a5cb565b600060405180830381865afa158015615ce9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d11919081019061a612565b9250505090565b615d4a6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050615d956040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b615d9e8561784a565b60208201526000615dae86617c2f565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615df0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e18919081019061a612565b86838560200151604051602001615e32949392919061a65b565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190615e8a908590600401619ecc565b600060405180830381865afa158015615ea7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ecf919081019061a612565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615f1790849060040161a75f565b602060405180830381865afa158015615f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615f58919061a13b565b615f6d5781604051602001615645919061a7b1565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615fb290849060040161a843565b600060405180830381865afa158015615fcf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ff7919081019061a612565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061603e90849060040161a895565b602060405180830381865afa15801561605b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061607f919061a13b565b15616114576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906160c990849060040161a895565b600060405180830381865afa1580156160e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261610e919081019061a612565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001616139919061a8e7565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161616592919061a953565b600060405180830381865afa158015616182573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526161aa919081019061a612565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816161da5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061623a5761623a61a978565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061628e5761628e61a978565b6020026020010181905250846040516020016162aa919061a9a7565b604051602081830303815290604052816002815181106162cc576162cc61a978565b6020026020010181905250826040516020016162e8919061aa13565b6040516020818303038152906040528160038151811061630a5761630a61a978565b602002602001018190525060006163208261724d565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506163b19060408051808201825260008082526020918201528151808301909252845182528085019082015290617eb2565b6163c65785604051602001615645919061aa54565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616420565b511590565b616594578260200151156164dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401615685565b8260c0015115616594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401615685565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816165ad57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806166089061aae5565b935060ff168151811061661d5761661d61a978565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161666e919061ab04565b6040516020818303038152906040528282806166899061aae5565b935060ff168151811061669e5761669e61a978565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806166eb9061aae5565b935060ff16815181106167005761670061a978565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061674d9061aae5565b935060ff16815181106167625761676261a978565b6020026020010181905250876020015182828061677e9061aae5565b935060ff16815181106167935761679361a978565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806167e09061aae5565b935060ff16815181106167f5576167f561a978565b60209081029190910101528751828261680d8161aae5565b935060ff16815181106168225761682261a978565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061686f9061aae5565b935060ff16815181106168845761688461a978565b602002602001018190525061689846617f13565b82826168a38161aae5565b935060ff16815181106168b8576168b861a978565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806169059061aae5565b935060ff168151811061691a5761691a61a978565b6020026020010181905250868282806169329061aae5565b935060ff16815181106169475761694761a978565b6020908102919091010152855115616a6e5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826169988161aae5565b935060ff16815181106169ad576169ad61a978565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906169fd908990600401619ecc565b600060405180830381865afa158015616a1a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616a42919081019061a612565b8282616a4d8161aae5565b935060ff1681518110616a6257616a6261a978565b60200260200101819052505b846020015115616b3e5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282616ab78161aae5565b935060ff1681518110616acc57616acc61a978565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280616b199061aae5565b935060ff1681518110616b2e57616b2e61a978565b6020026020010181905250616d05565b616b7661641b8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b616c095760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282616bb98161aae5565b935060ff1681518110616bce57616bce61a978565b60200260200101819052508460a00151604051602001616bee919061a9a7565b604051602081830303815290604052828280616b199061aae5565b8460c00151158015616c4c575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152616c4a90511590565b155b15616d055760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282616c908161aae5565b935060ff1681518110616ca557616ca561a978565b6020026020010181905250616cb988617fb3565b604051602001616cc9919061a9a7565b604051602081830303815290604052828280616ce49061aae5565b935060ff1681518110616cf957616cf961a978565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152616d3990511590565b616dce5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282616d7c8161aae5565b935060ff1681518110616d9157616d9161a978565b60200260200101819052508460400151828280616dad9061aae5565b935060ff1681518110616dc257616dc261a978565b60200260200101819052505b606085015115616eef5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282616e178161aae5565b935060ff1681518110616e2c57616e2c61a978565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616e9b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ec3919081019061a612565b8282616ece8161aae5565b935060ff1681518110616ee357616ee361a978565b60200260200101819052505b60e08501515115616f965760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616f398161aae5565b935060ff1681518110616f4e57616f4e61a978565b6020026020010181905250616f6a8560e0015160000151617f13565b8282616f758161aae5565b935060ff1681518110616f8a57616f8a61a978565b60200260200101819052505b60e085015160200151156170405760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616fe38161aae5565b935060ff1681518110616ff857616ff861a978565b60200260200101819052506170148560e0015160200151617f13565b828261701f8161aae5565b935060ff16815181106170345761703461a978565b60200260200101819052505b60e085015160400151156170ea5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261708d8161aae5565b935060ff16815181106170a2576170a261a978565b60200260200101819052506170be8560e0015160400151617f13565b82826170c98161aae5565b935060ff16815181106170de576170de61a978565b60200260200101819052505b60e085015160600151156171945760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826171378161aae5565b935060ff168151811061714c5761714c61a978565b60200260200101819052506171688560e0015160600151617f13565b82826171738161aae5565b935060ff16815181106171885761718861a978565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156171b2576171b2619edf565b6040519080825280602002602001820160405280156171e557816020015b60608152602001906001900390816171d05790505b50905060005b8260ff168160ff16101561723e57838160ff168151811061720e5761720e61a978565b6020026020010151828260ff168151811061722b5761722b61a978565b60209081029190910101526001016171eb565b5093505050505b949350505050565b6172746040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916172fa9186910161ab6f565b600060405180830381865afa158015617317573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261733f919081019061a612565b9050600061734d8683618aa2565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161737d9190619dbe565b6000604051808303816000875af115801561739c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526173c4919081019061abb6565b805190915060030b158015906173dd5750602081015151155b80156173ec5750604081015151155b156163c657816000815181106174045761740461a978565b6020026020010151604051602001615645919061ac6c565b606060006174518560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506174889082905b90618bf7565b156175e5576000617505826174ff846174f96174cb8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618c1e565b90618c80565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617569908290618bf7565b156175d357604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175d0905b8290618d05565b90505b6175dc81618d2b565b92505050615459565b82156175fe57848460405160200161564592919061ae58565b5050604080516020810190915260008152615459565b509392505050565b6000808251602084016000f09392505050565b615c4182826001617747565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b038616916176b0919061aeff565b600060405180830381855afa9150503d80600081146176eb576040519150601f19603f3d011682016040523d82523d6000602084013e6176f0565b606091505b5091509150818015617703575060208151115b1561771c5780806020019051810190617245919061a612565b505060408051602081019091526000815292915050565b600061773f8383618d94565b159392505050565b8160a001511561775657505050565b6000617763848484618e6f565b905060006177708261724d565b602081015181519192509060030b15801561780c5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261780c90604080518082018252600080825260209182015281518083019092528451825280850190820152617482565b1561781957505050505050565b60408201515115617839578160400151604051602001615645919061af1b565b80604051602001615645919061af79565b6060600061787f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506178e4905b8290617eb2565b1561795357604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154599061794e90839061940a565b618d2b565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179b5905b8290619494565b600103617a8257604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a1b906175c9565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154599061794e905b8390618d05565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ae1906178dd565b15617c1857604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617b4990839061952e565b905060008160018351617b5c919061a128565b81518110617b6c57617b6c61a978565b60200260200101519050617c0f61794e617be26040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061940a565b95945050505050565b82604051602001615645919061afe4565b50919050565b60606000617c648360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617cc6906178dd565b15617cd45761545981618d2b565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d33906179ae565b600103617d9d57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154599061794e90617a7b565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dfc906178dd565b15617c1857604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617e6490839061952e565b9050600181511115617ea0578060028251617e7f919061a128565b81518110617e8f57617e8f61a978565b602002602001015192505050919050565b5082604051602001615645919061afe4565b805182516000911115617ec75750600061521d565b81518351602085015160009291617edd9161b0c2565b617ee7919061a128565b905082602001518103617efe57600191505061521d565b82516020840151819020912014905092915050565b60606000617f20836195d3565b600101905060008167ffffffffffffffff811115617f4057617f40619edf565b6040519080825280601f01601f191660200182016040528015617f6a576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617f7457509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161803f905b8290617733565b1561807f57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180de90618038565b1561811e57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261817d90618038565b156181bd57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261821c90618038565b806182815750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261828190618038565b156182c157505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261832090618038565b806183855750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261838590618038565b156183c557505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261842490618038565b806184895750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261848990618038565b156184c957505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261852890618038565b8061858d5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261858d90618038565b156185cd57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261862c90618038565b1561866c57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526186cb90618038565b1561870b57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261876a90618038565b156187aa57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261880990618038565b1561884957505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188a890618038565b156188e857505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261894790618038565b806189ac5750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189ac90618038565b156189ec57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a4b90618038565b15618a8b57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151615645929060200161b0d5565b60608060005b8451811015618b2d5781858281518110618ac457618ac461a978565b6020026020010151604051602001618add92919061a4c0565b604051602081830303815290604052915060018551618afc919061a128565b8114618b255781604051602001618b13919061b23e565b60405160208183030381529060405291505b600101618aa8565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081618b465790505090508381600081518110618b7157618b7161a978565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110618bc557618bc561a978565b60200260200101819052508181600281518110618be457618be461a978565b6020908102919091010152949350505050565b6020808301518351835192840151600093618c1592918491906196b5565b14159392505050565b60408051808201909152600080825260208201526000618c5084600001518560200151856000015186602001516197c6565b9050836020015181618c62919061a128565b84518590618c7190839061a128565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015618ca557508161521d565b6020808301519084015160019114618ccc5750815160208481015190840151829020919020145b8015618cfd57825184518590618ce390839061a128565b9052508251602085018051618cf990839061b0c2565b9052505b509192915050565b6040805180820190915260008082526020820152618d248383836198e6565b5092915050565b60606000826000015167ffffffffffffffff811115618d4c57618d4c619edf565b6040519080825280601f01601f191660200182016040528015618d76576020820181803683370190505b5090506000602082019050618d248185602001518660000151619991565b8151815160009190811115618da7575081515b6020808501519084015160005b83811015618e605782518251808214618e30576000196020871015618e0f57600184618de189602061a128565b618deb919061b0c2565b618df690600861b27f565b618e0190600261b37d565b618e0b919061a128565b1990505b8181168382168181039114618e2d57975061521d9650505050505050565b50505b618e3b60208661b0c2565b9450618e4860208561b0c2565b93505050602081618e59919061b0c2565b9050618db4565b50845186516163c6919061b389565b60606000618e7b615c45565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081618e9857905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618ef39061aae5565b935060ff1681518110618f0857618f0861a978565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618f59919061b3a9565b604051602081830303815290604052828280618f749061aae5565b935060ff1681518110618f8957618f8961a978565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618fd69061aae5565b935060ff1681518110618feb57618feb61a978565b602002602001018190525082604051602001619007919061aa13565b6040516020818303038152906040528282806190229061aae5565b935060ff16815181106190375761903761a978565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806190849061aae5565b935060ff16815181106190995761909961a978565b60200260200101819052506190ae8784619a0b565b82826190b98161aae5565b935060ff16815181106190ce576190ce61a978565b60209081029190910101528551511561917a5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826191208161aae5565b935060ff16815181106191355761913561a978565b602002602001018190525061914e866000015184619a0b565b82826191598161aae5565b935060ff168151811061916e5761916e61a978565b60200260200101819052505b8560800151156191e85760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826191c38161aae5565b935060ff16815181106191d8576191d861a978565b602002602001018190525061924e565b841561924e5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261922d8161aae5565b935060ff16815181106192425761924261a978565b60200260200101819052505b604086015151156192ea5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826192988161aae5565b935060ff16815181106192ad576192ad61a978565b602002602001018190525085604001518282806192c99061aae5565b935060ff16815181106192de576192de61a978565b60200260200101819052505b8560600151156193545760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826193338161aae5565b935060ff16815181106193485761934861a978565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561937257619372619edf565b6040519080825280602002602001820160405280156193a557816020015b60608152602001906001900390816193905790505b50905060005b8260ff168160ff1610156193fe57838160ff16815181106193ce576193ce61a978565b6020026020010151828260ff16815181106193eb576193eb61a978565b60209081029190910101526001016193ab565b50979650505050505050565b604080518082019091526000808252602082015281518351101561942f57508161521d565b815183516020850151600092916194459161b0c2565b61944f919061a128565b60208401519091506001908214619470575082516020840151819020908220145b801561948b5783518551869061948790839061a128565b9052505b50929392505050565b60008082600001516194b885600001518660200151866000015187602001516197c6565b6194c2919061b0c2565b90505b835160208501516194d6919061b0c2565b8111618d2457816194e68161b3ee565b925050826000015161951d856020015183619501919061a128565b865161950d919061a128565b83866000015187602001516197c6565b619527919061b0c2565b90506194c5565b6060600061953c8484619494565b61954790600161b0c2565b67ffffffffffffffff81111561955f5761955f619edf565b60405190808252806020026020018201604052801561959257816020015b606081526020019060019003908161957d5790505b50905060005b8151811015617614576195ae61794e8686618d05565b8282815181106195c0576195c061a978565b6020908102919091010152600101619598565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061961c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619648576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061966657662386f26fc10000830492506010015b6305f5e100831061967e576305f5e100830492506008015b612710831061969257612710830492506004015b606483106196a4576064830492506002015b600a831061521d5760010192915050565b6000808584116197bc576020841161976857600084156197005760016196dc86602061a128565b6196e790600861b27f565b6196f290600261b37d565b6196fc919061a128565b1990505b835181168561970f898961b0c2565b619719919061a128565b805190935082165b8181146197535787841161973b5787945050505050617245565b836197458161b408565b945050828451169050619721565b61975d878561b0c2565b945050505050617245565b838320619775858861a128565b61977f908761b0c2565b91505b8582106197ba578482208082036197a75761979d868461b0c2565b9350505050617245565b6197b260018461a128565b925050619782565b505b5092949350505050565b600083818685116198d1576020851161988057600085156198125760016197ee87602061a128565b6197f990600861b27f565b61980490600261b37d565b61980e919061a128565b1990505b845181166000876198238b8b61b0c2565b61982d919061a128565b855190915083165b8281146198725781861061985a5761984d8b8b61b0c2565b9650505050505050617245565b856198648161b3ee565b965050838651169050619835565b859650505050505050617245565b508383206000905b619892868961a128565b82116198cf578583208082036198ae5783945050505050617245565b6198b960018561b0c2565b93505081806198c79061b3ee565b925050619888565b505b6198db878761b0c2565b979650505050505050565b6040805180820190915260008082526020820152600061991885600001518660200151866000015187602001516197c6565b602080870180519186019190915251909150619934908261a128565b835284516020860151619947919061b0c2565b81036199565760008552619988565b83518351619964919061b0c2565b8551869061997390839061a128565b9052508351619982908261b0c2565b60208601525b50909392505050565b602081106199c957815183526199a860208461b0c2565b92506199b560208361b0c2565b91506199c260208261a128565b9050619991565b60001981156199f85760016199df83602061a128565b6199eb9061010061b37d565b6199f5919061a128565b90505b9151835183169219169190911790915250565b60606000619a198484615d18565b8051602080830151604051939450619a339390910161b41f565b60405160208183030381529060405291505092915050565b610c9f8061b47883390190565b610de08061c11783390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001619aa8619aad565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001619aa86040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015619b5f5783516001600160a01b0316835260209384019390920191600101619b38565b509095945050505050565b60005b83811015619b85578181015183820152602001619b6d565b50506000910152565b60008151808452619ba6816020860160208601619b6a565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619cb6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015619c9c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352619c86848651619b8e565b6020958601959094509290920191600101619c4c565b509197505050602094850194929092019150600101619be2565b50929695505050505050565b600081518084526020840193506020830160005b82811015619d165781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101619cd6565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619cb6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752619d8c6040880182619b8e565b9050602082015191508681036020880152619da78183619cc2565b965050506020938401939190910190600101619d48565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619cb6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619e20858351619b8e565b94506020938401939190910190600101619de6565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619cb6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152619eb66040870182619cc2565b9550506020938401939190910190600101619e5d565b6020815260006154596020830184619b8e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c90821680619f2257607f821691505b602082108103617c29577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115619fa257806000526020600020601f840160051c81016020851015619f825750805b601f840160051c820191505b818110156128115760008155600101619f8e565b505050565b815167ffffffffffffffff811115619fc157619fc1619edf565b619fd581619fcf8454619f0e565b84619f5b565b6020601f82116001811461a0095760008315619ff15750848201515b600019600385901b1c1916600184901b178455612811565b600084815260208120601f198516915b8281101561a039578785015182556020948501946001909201910161a019565b508482101561a0575786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561a07857600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000617c0f6060830184619b8e565b8281526040602082015260006172456040830184619b8e565b6001600160a01b038516815283602082015260806040820152600061a0e86080830185619b8e565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561521d5761521d61a0f9565b60006020828403121561a14d57600080fd5b8151801515811461545957600080fd5b60006020828403121561a16f57600080fd5b81516001600160a01b038116811461545957600080fd5b600081546001600160a01b038116845267ffffffffffffffff8160a01c1660208501525060018201606060408501526000815461a1c281619f0e565b806060880152600182166000811461a1e1576001811461a21b5761a24f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b890101935061a24f565b84600052602060002060005b8381101561a2465781548a82016080015260019091019060200161a227565b89016080019450505b50919695505050505050565b6001600160a01b038616815284602082015260a06040820152600061a28360a0830186619b8e565b846060840152828103608084015261a29b818561a186565b98975050505050505050565b60008261a2dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000617245604083018461a186565b83815260606020820152600061a31d6060830185619b8e565b82810360408401526163c6818561a186565b6001600160a01b03831681526040602082015260006172456040830184619b8e565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a38981601a850160208801619b6a565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a3c681601c840160208801619b6a565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561a3f55761a3f5619edf565b60405290565b60008067ffffffffffffffff84111561a4165761a416619edf565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a4455761a445619edf565b60405283815290508082840185101561a45d57600080fd5b617614846020830185619b6a565b600082601f83011261a47c57600080fd5b6154598383516020850161a3fb565b60006020828403121561a49d57600080fd5b815167ffffffffffffffff81111561a4b457600080fd5b6152198482850161a46b565b6000835161a4d2818460208801619b6a565b83519083019061a4e6818360208801619b6a565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a52781601a850160208801619b6a565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a564816033840160208801619b6a565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b0383166020820152606060408201526000617c0f6060830184619b8e565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006154596080830184619b8e565b60006020828403121561a62457600080fd5b815167ffffffffffffffff81111561a63b57600080fd5b8201601f8101841361a64c57600080fd5b6152198482516020840161a3fb565b6000855161a66d818460208a01619b6a565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a6a7816001840160208a01619b6a565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a6e5816002840160208901619b6a565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a727816002840160208801619b6a565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a7726040830184619b8e565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a7e981601f850160208701619b6a565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a8566040830184619b8e565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a8a86040830184619b8e565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a91f816014850160208701619b6a565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061a9666040830185619b8e565b82810360208401526154558185619b8e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a9df816001850160208701619b6a565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161aa25818460208701619b6a565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161aad881604b850160208701619b6a565b91909101604b0192915050565b600060ff821660ff810361aafb5761aafb61a0f9565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161ab62816029850160208701619b6a565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006154596080830184619b8e565b60006020828403121561abc857600080fd5b815167ffffffffffffffff81111561abdf57600080fd5b82016060818503121561abf157600080fd5b61abf961a3d2565b81518060030b811461ac0a57600080fd5b8152602082015167ffffffffffffffff81111561ac2657600080fd5b61ac328682850161a46b565b602083015250604082015167ffffffffffffffff81111561ac5257600080fd5b61ac5e8682850161a46b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161acca816021850160208701619b6a565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161aeb6816021850160208801619b6a565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161aef381602e840160208801619b6a565b01602e01949350505050565b6000825161af11818460208701619b6a565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161ab62816029850160208701619b6a565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161afd7816022850160208701619b6a565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b01c81600e850160208701619b6a565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561521d5761521d61a0f9565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b10d816018850160208801619b6a565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b14a81601c840160208801619b6a565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161b250818460208701619b6a565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b808202811582820484141761521d5761521d61a0f9565b6001815b600184111561b2d15780850481111561b2b55761b2b561a0f9565b600184161561b2c357908102905b60019390931c92800261b29a565b935093915050565b60008261b2e85750600161521d565b8161b2f55750600061521d565b816001811461b30b576002811461b3155761b331565b600191505061521d565b60ff84111561b3265761b32661a0f9565b50506001821b61521d565b5060208310610133831016604e8410600b841016171561b354575081810a61521d565b61b361600019848461b296565b806000190482111561b3755761b37561a0f9565b029392505050565b6000615459838361b2d9565b8181036000831280158383131683831282161715618d2457618d2461a0f9565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b3e181601c850160208701619b6a565b91909101601c0192915050565b6000600019820361b4015761b40161a0f9565b5060010190565b60008161b4175761b41761a0f9565b506000190190565b6000835161b431818460208801619b6a565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161b46b816001840160208801619b6a565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610dbc806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c578063660b9de01461008c5780636ed70169146100ac57005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6100a73660046106f9565b6101aa565b3480156100b857600080fd5b5061006a6101e6565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e33826040516101db929190610a78565b60405180910390a150565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61022361036f565b6000610230600285610b57565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610c00565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c8a565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d4d565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d6a565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610ab683610694565b1660408201526000602083013567ffffffffffffffff8116808214610ada57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610b1657600080fd5b830160208101903567ffffffffffffffff811115610b3357600080fd5b803603821315610b4257600080fd5b606060808501526105b660a085018284610a2f565b600082610b8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610bad578181015183820152602001610b95565b50506000910152565b60008151808452610bce816020860160208601610b92565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c3560a0830186610bb6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c80578151865260209586019590910190600101610c62565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610d1d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610d08858351610bb6565b94506020938401939190910190600101610cce565b505050508281036040840152610d338186610c4e565b915050610d44606083018415159052565b95945050505050565b600060208284031215610d5f57600080fd5b81516104f681610840565b60008251610d7c818460208701610b92565b919091019291505056fea2646970667358221220084d92a79207d5024a4431b52d5d0038017908edb40aae1ce1d94a5ec3de914064736f6c634300081a00335a657461436f6e6e6563746f724e617469766555706772616465546573742e736f6ca2646970667358221220a9cb71381b3fa1d9eb3a1a06689639fe09c907d1431f3a872157ba8966fbb6cf64736f6c634300081a0033", } // ZetaConnectorNativeTestABI is the input ABI used to generate the binding from. @@ -816,6 +816,27 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestTS return _ZetaConnectorNativeTest.Contract.TestTSSUpgradeFailsIfZeroAddress(&_ZetaConnectorNativeTest.TransactOpts) } +// TestUpgradeAndWithdraw is a paid mutator transaction binding the contract method 0xaf298bb1. +// +// Solidity: function testUpgradeAndWithdraw() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactor) TestUpgradeAndWithdraw(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNativeTest.contract.Transact(opts, "testUpgradeAndWithdraw") +} + +// TestUpgradeAndWithdraw is a paid mutator transaction binding the contract method 0xaf298bb1. +// +// Solidity: function testUpgradeAndWithdraw() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestSession) TestUpgradeAndWithdraw() (*types.Transaction, error) { + return _ZetaConnectorNativeTest.Contract.TestUpgradeAndWithdraw(&_ZetaConnectorNativeTest.TransactOpts) +} + +// TestUpgradeAndWithdraw is a paid mutator transaction binding the contract method 0xaf298bb1. +// +// Solidity: function testUpgradeAndWithdraw() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestUpgradeAndWithdraw() (*types.Transaction, error) { + return _ZetaConnectorNativeTest.Contract.TestUpgradeAndWithdraw(&_ZetaConnectorNativeTest.TransactOpts) +} + // TestWithdraw is a paid mutator transaction binding the contract method 0xd509b16c. // // Solidity: function testWithdraw() returns() @@ -2238,9 +2259,9 @@ type ZetaConnectorNativeTestReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*ZetaConnectorNativeTestReceivedRevertIterator, error) { logs, sub, err := _ZetaConnectorNativeTest.contract.FilterLogs(opts, "ReceivedRevert") @@ -2250,9 +2271,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterReceivedR return &ZetaConnectorNativeTestReceivedRevertIterator{contract: _ZetaConnectorNativeTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeTestReceivedRevert) (event.Subscription, error) { logs, sub, err := _ZetaConnectorNativeTest.contract.WatchLogs(opts, "ReceivedRevert") @@ -2287,9 +2308,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchReceivedRe }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) ParseReceivedRevert(log types.Log) (*ZetaConnectorNativeTestReceivedRevert, error) { event := new(ZetaConnectorNativeTestReceivedRevert) if err := _ZetaConnectorNativeTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { @@ -2376,9 +2397,9 @@ type ZetaConnectorNativeTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ZetaConnectorNativeTestRevertedIterator, error) { var toRule []interface{} @@ -2397,9 +2418,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterReverted( return &ZetaConnectorNativeTestRevertedIterator{contract: _ZetaConnectorNativeTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2443,9 +2464,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchReverted(o }), nil } -// ParseReverted is a log parse operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) ParseReverted(log types.Log) (*ZetaConnectorNativeTestReverted, error) { event := new(ZetaConnectorNativeTestReverted) if err := _ZetaConnectorNativeTest.contract.UnpackLog(event, "Reverted", log); err != nil { @@ -2524,13 +2545,14 @@ func (it *ZetaConnectorNativeTestUpdatedGatewayTSSAddressIterator) Close() error // ZetaConnectorNativeTestUpdatedGatewayTSSAddress represents a UpdatedGatewayTSSAddress event raised by the ZetaConnectorNativeTest contract. type ZetaConnectorNativeTestUpdatedGatewayTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterUpdatedGatewayTSSAddress(opts *bind.FilterOpts) (*ZetaConnectorNativeTestUpdatedGatewayTSSAddressIterator, error) { logs, sub, err := _ZetaConnectorNativeTest.contract.FilterLogs(opts, "UpdatedGatewayTSSAddress") @@ -2540,9 +2562,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterUpdatedGa return &ZetaConnectorNativeTestUpdatedGatewayTSSAddressIterator{contract: _ZetaConnectorNativeTest.contract, event: "UpdatedGatewayTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchUpdatedGatewayTSSAddress(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeTestUpdatedGatewayTSSAddress) (event.Subscription, error) { logs, sub, err := _ZetaConnectorNativeTest.contract.WatchLogs(opts, "UpdatedGatewayTSSAddress") @@ -2577,9 +2599,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchUpdatedGat }), nil } -// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) ParseUpdatedGatewayTSSAddress(log types.Log) (*ZetaConnectorNativeTestUpdatedGatewayTSSAddress, error) { event := new(ZetaConnectorNativeTestUpdatedGatewayTSSAddress) if err := _ZetaConnectorNativeTest.contract.UnpackLog(event, "UpdatedGatewayTSSAddress", log); err != nil { @@ -2658,13 +2680,14 @@ func (it *ZetaConnectorNativeTestUpdatedZetaConnectorTSSAddressIterator) Close() // ZetaConnectorNativeTestUpdatedZetaConnectorTSSAddress represents a UpdatedZetaConnectorTSSAddress event raised by the ZetaConnectorNativeTest contract. type ZetaConnectorNativeTestUpdatedZetaConnectorTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedZetaConnectorTSSAddress is a free log retrieval operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// FilterUpdatedZetaConnectorTSSAddress is a free log retrieval operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterUpdatedZetaConnectorTSSAddress(opts *bind.FilterOpts) (*ZetaConnectorNativeTestUpdatedZetaConnectorTSSAddressIterator, error) { logs, sub, err := _ZetaConnectorNativeTest.contract.FilterLogs(opts, "UpdatedZetaConnectorTSSAddress") @@ -2674,9 +2697,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterUpdatedZe return &ZetaConnectorNativeTestUpdatedZetaConnectorTSSAddressIterator{contract: _ZetaConnectorNativeTest.contract, event: "UpdatedZetaConnectorTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedZetaConnectorTSSAddress is a free log subscription operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// WatchUpdatedZetaConnectorTSSAddress is a free log subscription operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchUpdatedZetaConnectorTSSAddress(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeTestUpdatedZetaConnectorTSSAddress) (event.Subscription, error) { logs, sub, err := _ZetaConnectorNativeTest.contract.WatchLogs(opts, "UpdatedZetaConnectorTSSAddress") @@ -2711,9 +2734,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchUpdatedZet }), nil } -// ParseUpdatedZetaConnectorTSSAddress is a log parse operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// ParseUpdatedZetaConnectorTSSAddress is a log parse operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) ParseUpdatedZetaConnectorTSSAddress(log types.Log) (*ZetaConnectorNativeTestUpdatedZetaConnectorTSSAddress, error) { event := new(ZetaConnectorNativeTestUpdatedZetaConnectorTSSAddress) if err := _ZetaConnectorNativeTest.contract.UnpackLog(event, "UpdatedZetaConnectorTSSAddress", log); err != nil { @@ -3090,9 +3113,9 @@ type ZetaConnectorNativeTestWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNativeTestWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -3107,9 +3130,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterWithdrawn return &ZetaConnectorNativeTestWithdrawnAndRevertedIterator{contract: _ZetaConnectorNativeTest.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeTestWithdrawnAndReverted, to []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -3149,9 +3172,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchWithdrawnA }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) ParseWithdrawnAndReverted(log types.Log) (*ZetaConnectorNativeTestWithdrawnAndReverted, error) { event := new(ZetaConnectorNativeTestWithdrawnAndReverted) if err := _ZetaConnectorNativeTest.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { @@ -3161,6 +3184,151 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) ParseWithdrawnA return event, nil } +// ZetaConnectorNativeTestWithdrawnV2Iterator is returned from FilterWithdrawnV2 and is used to iterate over the raw logs and unpacked data for WithdrawnV2 events raised by the ZetaConnectorNativeTest contract. +type ZetaConnectorNativeTestWithdrawnV2Iterator struct { + Event *ZetaConnectorNativeTestWithdrawnV2 // 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 *ZetaConnectorNativeTestWithdrawnV2Iterator) 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(ZetaConnectorNativeTestWithdrawnV2) + 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(ZetaConnectorNativeTestWithdrawnV2) + 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 *ZetaConnectorNativeTestWithdrawnV2Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeTestWithdrawnV2Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeTestWithdrawnV2 represents a WithdrawnV2 event raised by the ZetaConnectorNativeTest contract. +type ZetaConnectorNativeTestWithdrawnV2 struct { + To common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnV2 is a free log retrieval operation binding the contract event 0x3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9. +// +// Solidity: event WithdrawnV2(address indexed to, uint256 amount) +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterWithdrawnV2(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNativeTestWithdrawnV2Iterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNativeTest.contract.FilterLogs(opts, "WithdrawnV2", toRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeTestWithdrawnV2Iterator{contract: _ZetaConnectorNativeTest.contract, event: "WithdrawnV2", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnV2 is a free log subscription operation binding the contract event 0x3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9. +// +// Solidity: event WithdrawnV2(address indexed to, uint256 amount) +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchWithdrawnV2(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeTestWithdrawnV2, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNativeTest.contract.WatchLogs(opts, "WithdrawnV2", 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(ZetaConnectorNativeTestWithdrawnV2) + if err := _ZetaConnectorNativeTest.contract.UnpackLog(event, "WithdrawnV2", 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 +} + +// ParseWithdrawnV2 is a log parse operation binding the contract event 0x3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9. +// +// Solidity: event WithdrawnV2(address indexed to, uint256 amount) +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) ParseWithdrawnV2(log types.Log) (*ZetaConnectorNativeTestWithdrawnV2, error) { + event := new(ZetaConnectorNativeTestWithdrawnV2) + if err := _ZetaConnectorNativeTest.contract.UnpackLog(event, "WithdrawnV2", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ZetaConnectorNativeTestLogIterator is returned from FilterLog and is used to iterate over the raw logs and unpacked data for Log events raised by the ZetaConnectorNativeTest contract. type ZetaConnectorNativeTestLogIterator struct { Event *ZetaConnectorNativeTestLog // Event containing the contract specifics and raw log diff --git a/v2/pkg/zetaconnectornativeupgradetest.sol/zetaconnectornativeupgradetest.go b/v2/pkg/zetaconnectornativeupgradetest.sol/zetaconnectornativeupgradetest.go new file mode 100644 index 000000000..911d49520 --- /dev/null +++ b/v2/pkg/zetaconnectornativeupgradetest.sol/zetaconnectornativeupgradetest.go @@ -0,0 +1,2615 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package zetaconnectornativeupgradetest + +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 + _ = abi.ConvertType +) + +// RevertContext is an auto generated low-level Go binding around an user-defined struct. +type RevertContext struct { + Asset common.Address + Amount uint64 + RevertMessage []byte +} + +// ZetaConnectorNativeUpgradeTestMetaData contains all meta data concerning the ZetaConnectorNativeUpgradeTest contract. +var ZetaConnectorNativeUpgradeTestMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052348015601357600080fd5b5060805161248261003d6000396000818161125d01528181611286015261145c01526124826000f3fe6080604052600436106101965760003560e01c80635c975abb116100e1578063950837aa1161008a578063ad3cb1cc11610064578063ad3cb1cc146104f2578063d547741f14610548578063e63ab1e914610568578063f8c8765e1461059c57600080fd5b8063950837aa14610489578063a217fddf146104a9578063a783c789146104be57600080fd5b80638456cb59116100bb5780638456cb59146103db57806385f438c1146103f057806391d148541461042457600080fd5b80635c975abb146103645780635e3e9fef1461039b578063743e0c9b146103bb57600080fd5b80632f2ff15d116101435780634f1ef2861161011d5780634f1ef2861461031c57806352d1902d1461032f5780635b1125911461034457600080fd5b80632f2ff15d146102c757806336568abe146102e75780633f4ba83a1461030757600080fd5b8063116191b611610174578063116191b61461021257806321e093b11461024a578063248a9ca31461026a57600080fd5b806301ffc9a71461019b578063057e0f25146101d0578063106e6290146101f2575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004611dea565b6105bc565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101f06101eb366004611e91565b610655565b005b3480156101fe57600080fd5b506101f061020d366004611f29565b6107ae565b34801561021e57600080fd5b50600054610232906001600160a01b031681565b6040516001600160a01b0390911681526020016101c7565b34801561025657600080fd5b50600154610232906001600160a01b031681565b34801561027657600080fd5b506102b9610285366004611f5c565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c7565b3480156102d357600080fd5b506101f06102e2366004611f75565b610871565b3480156102f357600080fd5b506101f0610302366004611f75565b6108bb565b34801561031357600080fd5b506101f0610907565b6101f061032a366004611fd0565b61093c565b34801561033b57600080fd5b506102b961095b565b34801561035057600080fd5b50600254610232906001600160a01b031681565b34801561037057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bb565b3480156103a757600080fd5b506101f06103b63660046120d7565b61098a565b3480156103c757600080fd5b506101f06103d6366004611f5c565b610ade565b3480156103e757600080fd5b506101f0610afe565b3480156103fc57600080fd5b506102b97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561043057600080fd5b506101bb61043f366004611f75565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561049557600080fd5b506101f06104a4366004612139565b610b30565b3480156104b557600080fd5b506102b9600081565b3480156104ca57600080fd5b506102b97f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156104fe57600080fd5b5061053b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101c79190612178565b34801561055457600080fd5b506101f0610563366004611f75565b610cc3565b34801561057457600080fd5b506102b97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105a857600080fd5b506101f06105b73660046121c9565b610d07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061064f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61065d610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461068781610f0f565b61068f610f19565b6000546001546106ac916001600160a01b03918216911688610f77565b6000546001546040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263d0b492c392610703929116908b908b908b908b908a90600401612315565b600060405180830381600087803b15801561071d57600080fd5b505af1158015610731573d6000803e3d6000fd5b50505050866001600160a01b03167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c87878786604051610774949392919061236c565b60405180910390a2506107a660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6107b6610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e081610f0f565b6107e8610f19565b6001546107ff906001600160a01b03168585610f77565b836001600160a01b03167f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee98460405161083a91815260200190565b60405180910390a25061086c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546108ab81610f0f565b6108b58383611011565b50505050565b6001600160a01b03811633146108fd576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61086c82826110fe565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61093181610f0f565b6109396111c2565b50565b610944611252565b61094d82611322565b610957828261132d565b5050565b6000610965611451565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610992610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109bc81610f0f565b6109c4610f19565b6000546001546109e1916001600160a01b03918216911687610f77565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab5992610a36929116908a908a908a908a906004016123a3565b600060405180830381600087803b158015610a5057600080fd5b505af1158015610a64573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610aa5939291906123db565b60405180910390a250610ad760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610ae6610f19565b600154610939906001600160a01b03163330846114b3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b2881610f0f565b6109396114ec565b6000610b3b81610f0f565b6001600160a01b038216610b7b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610bb2907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166110fe565b50600254610bea907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166110fe565b50610c157f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483611011565b50610c407f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611011565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610cfd81610f0f565b6108b583836110fe565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d525750825b905060008267ffffffffffffffff166001148015610d6f5750303b155b905081158015610d7d575080155b15610db4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e155784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610e2189898989611565565b8315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610f09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109398133611870565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610f75576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261086c91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118fd565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110f4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556110aa3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061064f565b600091505061064f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110f4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061064f565b6111ca611979565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112eb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112df7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061095781610f0f565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113a5575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526113a2918101906123f5565b60015b6113eb576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611447576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016113e2565b61086c83836119d4565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b0384811660248301528381166044830152606482018390526108b59186918216906323b872dd90608401610fa4565b6114f4610f19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611234565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115b05750825b905060008267ffffffffffffffff1660011480156115cd5750303b155b9050811580156115db575080155b15611612576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116735784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061169057506001600160a01b038816155b806116a257506001600160a01b038716155b806116b457506001600160a01b038616155b156116eb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f3611a2a565b6116fb611a32565b611703611a2a565b61170b611a42565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556117669087611011565b506117917f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488611011565b506117bc7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb88611011565b506117e77f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611011565b506118127f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a88611011565b508315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610e7a565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610957576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016113e2565b60006119126001600160a01b03841683611a52565b90508051600014158015611937575080806020019051810190611935919061240e565b155b1561086c576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113e2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610f75576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119dd82611a67565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611a225761086c8282611b0f565b610957611b85565b610f75611bbd565b611a3a611bbd565b610f75611c24565b611a4a611bbd565b610f75611c2c565b6060611a6083836000611c7d565b9392505050565b806001600160a01b03163b600003611ab6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016113e2565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611b2c9190612430565b600060405180830381855af49150503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b5091509150611b7c858383611d33565b95945050505050565b3415610f75576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f75576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610feb611bbd565b611c34611bbd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606081471015611cbb576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113e2565b600080856001600160a01b03168486604051611cd79190612430565b60006040518083038185875af1925050503d8060008114611d14576040519150601f19603f3d011682016040523d82523d6000602084013e611d19565b606091505b5091509150611d29868383611d33565b9695505050505050565b606082611d4857611d4382611da8565b611a60565b8151158015611d5f57506001600160a01b0384163b155b15611da1576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113e2565b5080611a60565b805115611db85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611dfc57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611a6057600080fd5b80356001600160a01b0381168114611e4357600080fd5b919050565b60008083601f840112611e5a57600080fd5b50813567ffffffffffffffff811115611e7257600080fd5b602083019150836020828501011115611e8a57600080fd5b9250929050565b60008060008060008060a08789031215611eaa57600080fd5b611eb387611e2c565b955060208701359450604087013567ffffffffffffffff811115611ed657600080fd5b611ee289828a01611e48565b90955093505060608701359150608087013567ffffffffffffffff811115611f0957600080fd5b87016060818a031215611f1b57600080fd5b809150509295509295509295565b600080600060608486031215611f3e57600080fd5b611f4784611e2c565b95602085013595506040909401359392505050565b600060208284031215611f6e57600080fd5b5035919050565b60008060408385031215611f8857600080fd5b82359150611f9860208401611e2c565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611fe357600080fd5b611fec83611e2c565b9150602083013567ffffffffffffffff81111561200857600080fd5b8301601f8101851361201957600080fd5b803567ffffffffffffffff81111561203357612033611fa1565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561209f5761209f611fa1565b6040528181528282016020018710156120b757600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806000806000608086880312156120ef57600080fd5b6120f886611e2c565b945060208601359350604086013567ffffffffffffffff81111561211b57600080fd5b61212788828901611e48565b96999598509660600135949350505050565b60006020828403121561214b57600080fd5b611a6082611e2c565b60005b8381101561216f578181015183820152602001612157565b50506000910152565b6020815260008251806020840152612197816040850160208701612154565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156121df57600080fd5b6121e885611e2c565b93506121f660208601611e2c565b925061220460408601611e2c565b915061221260608601611e2c565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361227782611e2c565b1682526000602082013567ffffffffffffffff811680821461229857600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126122d457600080fd5b820160208101903567ffffffffffffffff8111156122f157600080fd5b80360382131561230057600080fd5b60606040860152611b7c60608601828461221d565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061234d60a08301858761221d565b828103608084015261235f8185612266565b9998505050505050505050565b84815260606020820152600061238660608301858761221d565b82810360408401526123988185612266565b979650505050505050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061239860808301848661221d565b838152604060208201526000611b7c60408301848661221d565b60006020828403121561240757600080fd5b5051919050565b60006020828403121561242057600080fd5b81518015158114611a6057600080fd5b60008251612442818460208701612154565b919091019291505056fea264697066735822122049170f4da020f959bc5c526f673e6af216e9243e29e6f43be3951a20d8b264ce64736f6c634300081a0033", +} + +// ZetaConnectorNativeUpgradeTestABI is the input ABI used to generate the binding from. +// Deprecated: Use ZetaConnectorNativeUpgradeTestMetaData.ABI instead. +var ZetaConnectorNativeUpgradeTestABI = ZetaConnectorNativeUpgradeTestMetaData.ABI + +// ZetaConnectorNativeUpgradeTestBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ZetaConnectorNativeUpgradeTestMetaData.Bin instead. +var ZetaConnectorNativeUpgradeTestBin = ZetaConnectorNativeUpgradeTestMetaData.Bin + +// DeployZetaConnectorNativeUpgradeTest deploys a new Ethereum contract, binding an instance of ZetaConnectorNativeUpgradeTest to it. +func DeployZetaConnectorNativeUpgradeTest(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ZetaConnectorNativeUpgradeTest, error) { + parsed, err := ZetaConnectorNativeUpgradeTestMetaData.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(ZetaConnectorNativeUpgradeTestBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ZetaConnectorNativeUpgradeTest{ZetaConnectorNativeUpgradeTestCaller: ZetaConnectorNativeUpgradeTestCaller{contract: contract}, ZetaConnectorNativeUpgradeTestTransactor: ZetaConnectorNativeUpgradeTestTransactor{contract: contract}, ZetaConnectorNativeUpgradeTestFilterer: ZetaConnectorNativeUpgradeTestFilterer{contract: contract}}, nil +} + +// ZetaConnectorNativeUpgradeTest is an auto generated Go binding around an Ethereum contract. +type ZetaConnectorNativeUpgradeTest struct { + ZetaConnectorNativeUpgradeTestCaller // Read-only binding to the contract + ZetaConnectorNativeUpgradeTestTransactor // Write-only binding to the contract + ZetaConnectorNativeUpgradeTestFilterer // Log filterer for contract events +} + +// ZetaConnectorNativeUpgradeTestCaller is an auto generated read-only Go binding around an Ethereum contract. +type ZetaConnectorNativeUpgradeTestCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZetaConnectorNativeUpgradeTestTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ZetaConnectorNativeUpgradeTestTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZetaConnectorNativeUpgradeTestFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ZetaConnectorNativeUpgradeTestFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZetaConnectorNativeUpgradeTestSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ZetaConnectorNativeUpgradeTestSession struct { + Contract *ZetaConnectorNativeUpgradeTest // 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 +} + +// ZetaConnectorNativeUpgradeTestCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ZetaConnectorNativeUpgradeTestCallerSession struct { + Contract *ZetaConnectorNativeUpgradeTestCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ZetaConnectorNativeUpgradeTestTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ZetaConnectorNativeUpgradeTestTransactorSession struct { + Contract *ZetaConnectorNativeUpgradeTestTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ZetaConnectorNativeUpgradeTestRaw is an auto generated low-level Go binding around an Ethereum contract. +type ZetaConnectorNativeUpgradeTestRaw struct { + Contract *ZetaConnectorNativeUpgradeTest // Generic contract binding to access the raw methods on +} + +// ZetaConnectorNativeUpgradeTestCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ZetaConnectorNativeUpgradeTestCallerRaw struct { + Contract *ZetaConnectorNativeUpgradeTestCaller // Generic read-only contract binding to access the raw methods on +} + +// ZetaConnectorNativeUpgradeTestTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ZetaConnectorNativeUpgradeTestTransactorRaw struct { + Contract *ZetaConnectorNativeUpgradeTestTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewZetaConnectorNativeUpgradeTest creates a new instance of ZetaConnectorNativeUpgradeTest, bound to a specific deployed contract. +func NewZetaConnectorNativeUpgradeTest(address common.Address, backend bind.ContractBackend) (*ZetaConnectorNativeUpgradeTest, error) { + contract, err := bindZetaConnectorNativeUpgradeTest(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTest{ZetaConnectorNativeUpgradeTestCaller: ZetaConnectorNativeUpgradeTestCaller{contract: contract}, ZetaConnectorNativeUpgradeTestTransactor: ZetaConnectorNativeUpgradeTestTransactor{contract: contract}, ZetaConnectorNativeUpgradeTestFilterer: ZetaConnectorNativeUpgradeTestFilterer{contract: contract}}, nil +} + +// NewZetaConnectorNativeUpgradeTestCaller creates a new read-only instance of ZetaConnectorNativeUpgradeTest, bound to a specific deployed contract. +func NewZetaConnectorNativeUpgradeTestCaller(address common.Address, caller bind.ContractCaller) (*ZetaConnectorNativeUpgradeTestCaller, error) { + contract, err := bindZetaConnectorNativeUpgradeTest(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestCaller{contract: contract}, nil +} + +// NewZetaConnectorNativeUpgradeTestTransactor creates a new write-only instance of ZetaConnectorNativeUpgradeTest, bound to a specific deployed contract. +func NewZetaConnectorNativeUpgradeTestTransactor(address common.Address, transactor bind.ContractTransactor) (*ZetaConnectorNativeUpgradeTestTransactor, error) { + contract, err := bindZetaConnectorNativeUpgradeTest(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestTransactor{contract: contract}, nil +} + +// NewZetaConnectorNativeUpgradeTestFilterer creates a new log filterer instance of ZetaConnectorNativeUpgradeTest, bound to a specific deployed contract. +func NewZetaConnectorNativeUpgradeTestFilterer(address common.Address, filterer bind.ContractFilterer) (*ZetaConnectorNativeUpgradeTestFilterer, error) { + contract, err := bindZetaConnectorNativeUpgradeTest(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestFilterer{contract: contract}, nil +} + +// bindZetaConnectorNativeUpgradeTest binds a generic wrapper to an already deployed contract. +func bindZetaConnectorNativeUpgradeTest(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ZetaConnectorNativeUpgradeTestMetaData.GetAbi() + 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 (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ZetaConnectorNativeUpgradeTest.Contract.ZetaConnectorNativeUpgradeTestCaller.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 (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.ZetaConnectorNativeUpgradeTestTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.ZetaConnectorNativeUpgradeTestTransactor.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 (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ZetaConnectorNativeUpgradeTest.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 (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.contract.Transact(opts, method, params...) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNativeUpgradeTest.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) DEFAULTADMINROLE() ([32]byte, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.DEFAULTADMINROLE(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.DEFAULTADMINROLE(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNativeUpgradeTest.contract.Call(opts, &out, "PAUSER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) PAUSERROLE() ([32]byte, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.PAUSERROLE(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCallerSession) PAUSERROLE() ([32]byte, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.PAUSERROLE(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNativeUpgradeTest.contract.Call(opts, &out, "TSS_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) TSSROLE() ([32]byte, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.TSSROLE(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCallerSession) TSSROLE() ([32]byte, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.TSSROLE(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ZetaConnectorNativeUpgradeTest.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.UPGRADEINTERFACEVERSION(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCallerSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.UPGRADEINTERFACEVERSION(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCaller) WITHDRAWERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNativeUpgradeTest.contract.Call(opts, &out, "WITHDRAWER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) WITHDRAWERROLE() ([32]byte, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.WITHDRAWERROLE(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCallerSession) WITHDRAWERROLE() ([32]byte, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.WITHDRAWERROLE(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// Gateway is a free data retrieval call binding the contract method 0x116191b6. +// +// Solidity: function gateway() view returns(address) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCaller) Gateway(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZetaConnectorNativeUpgradeTest.contract.Call(opts, &out, "gateway") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Gateway is a free data retrieval call binding the contract method 0x116191b6. +// +// Solidity: function gateway() view returns(address) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) Gateway() (common.Address, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.Gateway(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// Gateway is a free data retrieval call binding the contract method 0x116191b6. +// +// Solidity: function gateway() view returns(address) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCallerSession) Gateway() (common.Address, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.Gateway(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNativeUpgradeTest.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.GetRoleAdmin(&_ZetaConnectorNativeUpgradeTest.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.GetRoleAdmin(&_ZetaConnectorNativeUpgradeTest.CallOpts, role) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _ZetaConnectorNativeUpgradeTest.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.HasRole(&_ZetaConnectorNativeUpgradeTest.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.HasRole(&_ZetaConnectorNativeUpgradeTest.CallOpts, role, account) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ZetaConnectorNativeUpgradeTest.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 (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) Paused() (bool, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.Paused(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCallerSession) Paused() (bool, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.Paused(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNativeUpgradeTest.contract.Call(opts, &out, "proxiableUUID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) ProxiableUUID() ([32]byte, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.ProxiableUUID(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCallerSession) ProxiableUUID() ([32]byte, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.ProxiableUUID(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _ZetaConnectorNativeUpgradeTest.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.SupportsInterface(&_ZetaConnectorNativeUpgradeTest.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.SupportsInterface(&_ZetaConnectorNativeUpgradeTest.CallOpts, interfaceId) +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCaller) TssAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZetaConnectorNativeUpgradeTest.contract.Call(opts, &out, "tssAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) TssAddress() (common.Address, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.TssAddress(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCallerSession) TssAddress() (common.Address, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.TssAddress(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. +// +// Solidity: function zetaToken() view returns(address) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCaller) ZetaToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZetaConnectorNativeUpgradeTest.contract.Call(opts, &out, "zetaToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. +// +// Solidity: function zetaToken() view returns(address) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) ZetaToken() (common.Address, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.ZetaToken(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. +// +// Solidity: function zetaToken() view returns(address) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestCallerSession) ZetaToken() (common.Address, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.ZetaToken(&_ZetaConnectorNativeUpgradeTest.CallOpts) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.GrantRole(&_ZetaConnectorNativeUpgradeTest.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.GrantRole(&_ZetaConnectorNativeUpgradeTest.TransactOpts, role, account) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactor) Initialize(opts *bind.TransactOpts, gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.contract.Transact(opts, "initialize", gateway_, zetaToken_, tssAddress_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) Initialize(gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.Initialize(&_ZetaConnectorNativeUpgradeTest.TransactOpts, gateway_, zetaToken_, tssAddress_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorSession) Initialize(gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.Initialize(&_ZetaConnectorNativeUpgradeTest.TransactOpts, gateway_, zetaToken_, tssAddress_, admin_) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) Pause() (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.Pause(&_ZetaConnectorNativeUpgradeTest.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorSession) Pause() (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.Pause(&_ZetaConnectorNativeUpgradeTest.TransactOpts) +} + +// ReceiveTokens is a paid mutator transaction binding the contract method 0x743e0c9b. +// +// Solidity: function receiveTokens(uint256 amount) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactor) ReceiveTokens(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.contract.Transact(opts, "receiveTokens", amount) +} + +// ReceiveTokens is a paid mutator transaction binding the contract method 0x743e0c9b. +// +// Solidity: function receiveTokens(uint256 amount) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) ReceiveTokens(amount *big.Int) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.ReceiveTokens(&_ZetaConnectorNativeUpgradeTest.TransactOpts, amount) +} + +// ReceiveTokens is a paid mutator transaction binding the contract method 0x743e0c9b. +// +// Solidity: function receiveTokens(uint256 amount) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorSession) ReceiveTokens(amount *big.Int) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.ReceiveTokens(&_ZetaConnectorNativeUpgradeTest.TransactOpts, amount) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.contract.Transact(opts, "renounceRole", role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.RenounceRole(&_ZetaConnectorNativeUpgradeTest.TransactOpts, role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.RenounceRole(&_ZetaConnectorNativeUpgradeTest.TransactOpts, role, callerConfirmation) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.RevokeRole(&_ZetaConnectorNativeUpgradeTest.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.RevokeRole(&_ZetaConnectorNativeUpgradeTest.TransactOpts, role, account) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) Unpause() (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.Unpause(&_ZetaConnectorNativeUpgradeTest.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorSession) Unpause() (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.Unpause(&_ZetaConnectorNativeUpgradeTest.TransactOpts) +} + +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactor) UpdateTSSAddress(opts *bind.TransactOpts, newTSSAddress common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.contract.Transact(opts, "updateTSSAddress", newTSSAddress) +} + +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) UpdateTSSAddress(newTSSAddress common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.UpdateTSSAddress(&_ZetaConnectorNativeUpgradeTest.TransactOpts, newTSSAddress) +} + +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorSession) UpdateTSSAddress(newTSSAddress common.Address) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.UpdateTSSAddress(&_ZetaConnectorNativeUpgradeTest.TransactOpts, newTSSAddress) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.UpgradeToAndCall(&_ZetaConnectorNativeUpgradeTest.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.UpgradeToAndCall(&_ZetaConnectorNativeUpgradeTest.TransactOpts, newImplementation, data) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x106e6290. +// +// Solidity: function withdraw(address to, uint256 amount, bytes32 internalSendHash) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactor) Withdraw(opts *bind.TransactOpts, to common.Address, amount *big.Int, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.contract.Transact(opts, "withdraw", to, amount, internalSendHash) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x106e6290. +// +// Solidity: function withdraw(address to, uint256 amount, bytes32 internalSendHash) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) Withdraw(to common.Address, amount *big.Int, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.Withdraw(&_ZetaConnectorNativeUpgradeTest.TransactOpts, to, amount, internalSendHash) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x106e6290. +// +// Solidity: function withdraw(address to, uint256 amount, bytes32 internalSendHash) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorSession) Withdraw(to common.Address, amount *big.Int, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.Withdraw(&_ZetaConnectorNativeUpgradeTest.TransactOpts, to, amount, internalSendHash) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// +// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactor) WithdrawAndCall(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.contract.Transact(opts, "withdrawAndCall", to, amount, data, internalSendHash) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// +// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) WithdrawAndCall(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.WithdrawAndCall(&_ZetaConnectorNativeUpgradeTest.TransactOpts, to, amount, data, internalSendHash) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// +// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorSession) WithdrawAndCall(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.WithdrawAndCall(&_ZetaConnectorNativeUpgradeTest.TransactOpts, to, amount, data, internalSendHash) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.contract.Transact(opts, "withdrawAndRevert", to, amount, data, internalSendHash, revertContext) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.WithdrawAndRevert(&_ZetaConnectorNativeUpgradeTest.TransactOpts, to, amount, data, internalSendHash, revertContext) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.WithdrawAndRevert(&_ZetaConnectorNativeUpgradeTest.TransactOpts, to, amount, data, internalSendHash, revertContext) +} + +// ZetaConnectorNativeUpgradeTestInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestInitializedIterator struct { + Event *ZetaConnectorNativeUpgradeTestInitialized // 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 *ZetaConnectorNativeUpgradeTestInitializedIterator) 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(ZetaConnectorNativeUpgradeTestInitialized) + 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(ZetaConnectorNativeUpgradeTestInitialized) + 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 *ZetaConnectorNativeUpgradeTestInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeUpgradeTestInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeUpgradeTestInitialized represents a Initialized event raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) FilterInitialized(opts *bind.FilterOpts) (*ZetaConnectorNativeUpgradeTestInitializedIterator, error) { + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestInitializedIterator{contract: _ZetaConnectorNativeUpgradeTest.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeUpgradeTestInitialized) (event.Subscription, error) { + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.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(ZetaConnectorNativeUpgradeTestInitialized) + if err := _ZetaConnectorNativeUpgradeTest.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 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) ParseInitialized(log types.Log) (*ZetaConnectorNativeUpgradeTestInitialized, error) { + event := new(ZetaConnectorNativeUpgradeTestInitialized) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNativeUpgradeTestPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestPausedIterator struct { + Event *ZetaConnectorNativeUpgradeTestPaused // 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 *ZetaConnectorNativeUpgradeTestPausedIterator) 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(ZetaConnectorNativeUpgradeTestPaused) + 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(ZetaConnectorNativeUpgradeTestPaused) + 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 *ZetaConnectorNativeUpgradeTestPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeUpgradeTestPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeUpgradeTestPaused represents a Paused event raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestPaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) FilterPaused(opts *bind.FilterOpts) (*ZetaConnectorNativeUpgradeTestPausedIterator, error) { + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestPausedIterator{contract: _ZetaConnectorNativeUpgradeTest.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeUpgradeTestPaused) (event.Subscription, error) { + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.WatchLogs(opts, "Paused") + 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(ZetaConnectorNativeUpgradeTestPaused) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "Paused", 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 +} + +// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) ParsePaused(log types.Log) (*ZetaConnectorNativeUpgradeTestPaused, error) { + event := new(ZetaConnectorNativeUpgradeTestPaused) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNativeUpgradeTestRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestRoleAdminChangedIterator struct { + Event *ZetaConnectorNativeUpgradeTestRoleAdminChanged // 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 *ZetaConnectorNativeUpgradeTestRoleAdminChangedIterator) 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(ZetaConnectorNativeUpgradeTestRoleAdminChanged) + 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(ZetaConnectorNativeUpgradeTestRoleAdminChanged) + 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 *ZetaConnectorNativeUpgradeTestRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeUpgradeTestRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeUpgradeTestRoleAdminChanged represents a RoleAdminChanged event raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*ZetaConnectorNativeUpgradeTestRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestRoleAdminChangedIterator{contract: _ZetaConnectorNativeUpgradeTest.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeUpgradeTestRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(ZetaConnectorNativeUpgradeTestRoleAdminChanged) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "RoleAdminChanged", 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 +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) ParseRoleAdminChanged(log types.Log) (*ZetaConnectorNativeUpgradeTestRoleAdminChanged, error) { + event := new(ZetaConnectorNativeUpgradeTestRoleAdminChanged) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNativeUpgradeTestRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestRoleGrantedIterator struct { + Event *ZetaConnectorNativeUpgradeTestRoleGranted // 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 *ZetaConnectorNativeUpgradeTestRoleGrantedIterator) 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(ZetaConnectorNativeUpgradeTestRoleGranted) + 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(ZetaConnectorNativeUpgradeTestRoleGranted) + 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 *ZetaConnectorNativeUpgradeTestRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeUpgradeTestRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeUpgradeTestRoleGranted represents a RoleGranted event raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ZetaConnectorNativeUpgradeTestRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestRoleGrantedIterator{contract: _ZetaConnectorNativeUpgradeTest.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeUpgradeTestRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + 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(ZetaConnectorNativeUpgradeTestRoleGranted) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "RoleGranted", 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 +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) ParseRoleGranted(log types.Log) (*ZetaConnectorNativeUpgradeTestRoleGranted, error) { + event := new(ZetaConnectorNativeUpgradeTestRoleGranted) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNativeUpgradeTestRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestRoleRevokedIterator struct { + Event *ZetaConnectorNativeUpgradeTestRoleRevoked // 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 *ZetaConnectorNativeUpgradeTestRoleRevokedIterator) 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(ZetaConnectorNativeUpgradeTestRoleRevoked) + 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(ZetaConnectorNativeUpgradeTestRoleRevoked) + 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 *ZetaConnectorNativeUpgradeTestRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeUpgradeTestRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeUpgradeTestRoleRevoked represents a RoleRevoked event raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ZetaConnectorNativeUpgradeTestRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestRoleRevokedIterator{contract: _ZetaConnectorNativeUpgradeTest.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeUpgradeTestRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + 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(ZetaConnectorNativeUpgradeTestRoleRevoked) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "RoleRevoked", 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 +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) ParseRoleRevoked(log types.Log) (*ZetaConnectorNativeUpgradeTestRoleRevoked, error) { + event := new(ZetaConnectorNativeUpgradeTestRoleRevoked) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNativeUpgradeTestUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestUnpausedIterator struct { + Event *ZetaConnectorNativeUpgradeTestUnpaused // 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 *ZetaConnectorNativeUpgradeTestUnpausedIterator) 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(ZetaConnectorNativeUpgradeTestUnpaused) + 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(ZetaConnectorNativeUpgradeTestUnpaused) + 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 *ZetaConnectorNativeUpgradeTestUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeUpgradeTestUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeUpgradeTestUnpaused represents a Unpaused event raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestUnpaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) FilterUnpaused(opts *bind.FilterOpts) (*ZetaConnectorNativeUpgradeTestUnpausedIterator, error) { + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestUnpausedIterator{contract: _ZetaConnectorNativeUpgradeTest.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeUpgradeTestUnpaused) (event.Subscription, error) { + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.WatchLogs(opts, "Unpaused") + 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(ZetaConnectorNativeUpgradeTestUnpaused) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "Unpaused", 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 +} + +// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) ParseUnpaused(log types.Log) (*ZetaConnectorNativeUpgradeTestUnpaused, error) { + event := new(ZetaConnectorNativeUpgradeTestUnpaused) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddressIterator is returned from FilterUpdatedZetaConnectorTSSAddress and is used to iterate over the raw logs and unpacked data for UpdatedZetaConnectorTSSAddress events raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddressIterator struct { + Event *ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddress // 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 *ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddressIterator) 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(ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddress) + 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(ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddress) + 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 *ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddressIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddressIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddress represents a UpdatedZetaConnectorTSSAddress event raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddress struct { + OldTSSAddress common.Address + NewTSSAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedZetaConnectorTSSAddress is a free log retrieval operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. +// +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) FilterUpdatedZetaConnectorTSSAddress(opts *bind.FilterOpts) (*ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddressIterator, error) { + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.FilterLogs(opts, "UpdatedZetaConnectorTSSAddress") + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddressIterator{contract: _ZetaConnectorNativeUpgradeTest.contract, event: "UpdatedZetaConnectorTSSAddress", logs: logs, sub: sub}, nil +} + +// WatchUpdatedZetaConnectorTSSAddress is a free log subscription operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. +// +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) WatchUpdatedZetaConnectorTSSAddress(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddress) (event.Subscription, error) { + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.WatchLogs(opts, "UpdatedZetaConnectorTSSAddress") + 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(ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddress) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "UpdatedZetaConnectorTSSAddress", 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 +} + +// ParseUpdatedZetaConnectorTSSAddress is a log parse operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. +// +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) ParseUpdatedZetaConnectorTSSAddress(log types.Log) (*ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddress, error) { + event := new(ZetaConnectorNativeUpgradeTestUpdatedZetaConnectorTSSAddress) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "UpdatedZetaConnectorTSSAddress", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNativeUpgradeTestUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestUpgradedIterator struct { + Event *ZetaConnectorNativeUpgradeTestUpgraded // 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 *ZetaConnectorNativeUpgradeTestUpgradedIterator) 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(ZetaConnectorNativeUpgradeTestUpgraded) + 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(ZetaConnectorNativeUpgradeTestUpgraded) + 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 *ZetaConnectorNativeUpgradeTestUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeUpgradeTestUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeUpgradeTestUpgraded represents a Upgraded event raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*ZetaConnectorNativeUpgradeTestUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestUpgradedIterator{contract: _ZetaConnectorNativeUpgradeTest.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeUpgradeTestUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.WatchLogs(opts, "Upgraded", implementationRule) + 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(ZetaConnectorNativeUpgradeTestUpgraded) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "Upgraded", 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 +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) ParseUpgraded(log types.Log) (*ZetaConnectorNativeUpgradeTestUpgraded, error) { + event := new(ZetaConnectorNativeUpgradeTestUpgraded) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNativeUpgradeTestWithdrawnIterator is returned from FilterWithdrawn and is used to iterate over the raw logs and unpacked data for Withdrawn events raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestWithdrawnIterator struct { + Event *ZetaConnectorNativeUpgradeTestWithdrawn // 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 *ZetaConnectorNativeUpgradeTestWithdrawnIterator) 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(ZetaConnectorNativeUpgradeTestWithdrawn) + 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(ZetaConnectorNativeUpgradeTestWithdrawn) + 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 *ZetaConnectorNativeUpgradeTestWithdrawnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeUpgradeTestWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeUpgradeTestWithdrawn represents a Withdrawn event raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestWithdrawn struct { + To common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawn is a free log retrieval operation binding the contract event 0x7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5. +// +// Solidity: event Withdrawn(address indexed to, uint256 amount) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) FilterWithdrawn(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNativeUpgradeTestWithdrawnIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.FilterLogs(opts, "Withdrawn", toRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestWithdrawnIterator{contract: _ZetaConnectorNativeUpgradeTest.contract, event: "Withdrawn", logs: logs, sub: sub}, nil +} + +// WatchWithdrawn is a free log subscription operation binding the contract event 0x7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5. +// +// Solidity: event Withdrawn(address indexed to, uint256 amount) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) WatchWithdrawn(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeUpgradeTestWithdrawn, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.WatchLogs(opts, "Withdrawn", 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(ZetaConnectorNativeUpgradeTestWithdrawn) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "Withdrawn", 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 +} + +// ParseWithdrawn is a log parse operation binding the contract event 0x7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5. +// +// Solidity: event Withdrawn(address indexed to, uint256 amount) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) ParseWithdrawn(log types.Log) (*ZetaConnectorNativeUpgradeTestWithdrawn, error) { + event := new(ZetaConnectorNativeUpgradeTestWithdrawn) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "Withdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNativeUpgradeTestWithdrawnAndCalledIterator is returned from FilterWithdrawnAndCalled and is used to iterate over the raw logs and unpacked data for WithdrawnAndCalled events raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestWithdrawnAndCalledIterator struct { + Event *ZetaConnectorNativeUpgradeTestWithdrawnAndCalled // 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 *ZetaConnectorNativeUpgradeTestWithdrawnAndCalledIterator) 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(ZetaConnectorNativeUpgradeTestWithdrawnAndCalled) + 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(ZetaConnectorNativeUpgradeTestWithdrawnAndCalled) + 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 *ZetaConnectorNativeUpgradeTestWithdrawnAndCalledIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeUpgradeTestWithdrawnAndCalledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeUpgradeTestWithdrawnAndCalled represents a WithdrawnAndCalled event raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestWithdrawnAndCalled struct { + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnAndCalled is a free log retrieval operation binding the contract event 0x23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d. +// +// Solidity: event WithdrawnAndCalled(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) FilterWithdrawnAndCalled(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNativeUpgradeTestWithdrawnAndCalledIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.FilterLogs(opts, "WithdrawnAndCalled", toRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestWithdrawnAndCalledIterator{contract: _ZetaConnectorNativeUpgradeTest.contract, event: "WithdrawnAndCalled", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnAndCalled is a free log subscription operation binding the contract event 0x23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d. +// +// Solidity: event WithdrawnAndCalled(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) WatchWithdrawnAndCalled(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeUpgradeTestWithdrawnAndCalled, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.WatchLogs(opts, "WithdrawnAndCalled", 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(ZetaConnectorNativeUpgradeTestWithdrawnAndCalled) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "WithdrawnAndCalled", 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 +} + +// ParseWithdrawnAndCalled is a log parse operation binding the contract event 0x23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d. +// +// Solidity: event WithdrawnAndCalled(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) ParseWithdrawnAndCalled(log types.Log) (*ZetaConnectorNativeUpgradeTestWithdrawnAndCalled, error) { + event := new(ZetaConnectorNativeUpgradeTestWithdrawnAndCalled) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "WithdrawnAndCalled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNativeUpgradeTestWithdrawnAndRevertedIterator is returned from FilterWithdrawnAndReverted and is used to iterate over the raw logs and unpacked data for WithdrawnAndReverted events raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestWithdrawnAndRevertedIterator struct { + Event *ZetaConnectorNativeUpgradeTestWithdrawnAndReverted // 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 *ZetaConnectorNativeUpgradeTestWithdrawnAndRevertedIterator) 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(ZetaConnectorNativeUpgradeTestWithdrawnAndReverted) + 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(ZetaConnectorNativeUpgradeTestWithdrawnAndReverted) + 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 *ZetaConnectorNativeUpgradeTestWithdrawnAndRevertedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeUpgradeTestWithdrawnAndRevertedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeUpgradeTestWithdrawnAndReverted represents a WithdrawnAndReverted event raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestWithdrawnAndReverted struct { + To common.Address + Amount *big.Int + Data []byte + RevertContext RevertContext + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNativeUpgradeTestWithdrawnAndRevertedIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.FilterLogs(opts, "WithdrawnAndReverted", toRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestWithdrawnAndRevertedIterator{contract: _ZetaConnectorNativeUpgradeTest.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeUpgradeTestWithdrawnAndReverted, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.WatchLogs(opts, "WithdrawnAndReverted", 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(ZetaConnectorNativeUpgradeTestWithdrawnAndReverted) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "WithdrawnAndReverted", 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 +} + +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) ParseWithdrawnAndReverted(log types.Log) (*ZetaConnectorNativeUpgradeTestWithdrawnAndReverted, error) { + event := new(ZetaConnectorNativeUpgradeTestWithdrawnAndReverted) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNativeUpgradeTestWithdrawnV2Iterator is returned from FilterWithdrawnV2 and is used to iterate over the raw logs and unpacked data for WithdrawnV2 events raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestWithdrawnV2Iterator struct { + Event *ZetaConnectorNativeUpgradeTestWithdrawnV2 // 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 *ZetaConnectorNativeUpgradeTestWithdrawnV2Iterator) 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(ZetaConnectorNativeUpgradeTestWithdrawnV2) + 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(ZetaConnectorNativeUpgradeTestWithdrawnV2) + 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 *ZetaConnectorNativeUpgradeTestWithdrawnV2Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeUpgradeTestWithdrawnV2Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeUpgradeTestWithdrawnV2 represents a WithdrawnV2 event raised by the ZetaConnectorNativeUpgradeTest contract. +type ZetaConnectorNativeUpgradeTestWithdrawnV2 struct { + To common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnV2 is a free log retrieval operation binding the contract event 0x3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9. +// +// Solidity: event WithdrawnV2(address indexed to, uint256 amount) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) FilterWithdrawnV2(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNativeUpgradeTestWithdrawnV2Iterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.FilterLogs(opts, "WithdrawnV2", toRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeUpgradeTestWithdrawnV2Iterator{contract: _ZetaConnectorNativeUpgradeTest.contract, event: "WithdrawnV2", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnV2 is a free log subscription operation binding the contract event 0x3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9. +// +// Solidity: event WithdrawnV2(address indexed to, uint256 amount) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) WatchWithdrawnV2(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeUpgradeTestWithdrawnV2, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNativeUpgradeTest.contract.WatchLogs(opts, "WithdrawnV2", 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(ZetaConnectorNativeUpgradeTestWithdrawnV2) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "WithdrawnV2", 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 +} + +// ParseWithdrawnV2 is a log parse operation binding the contract event 0x3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9. +// +// Solidity: event WithdrawnV2(address indexed to, uint256 amount) +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestFilterer) ParseWithdrawnV2(log types.Log) (*ZetaConnectorNativeUpgradeTestWithdrawnV2, error) { + event := new(ZetaConnectorNativeUpgradeTestWithdrawnV2) + if err := _ZetaConnectorNativeUpgradeTest.contract.UnpackLog(event, "WithdrawnV2", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go b/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go index c55767c78..03066f907 100644 --- a/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go +++ b/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go @@ -32,14 +32,14 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } // ZetaConnectorNonNativeMetaData contains all meta data concerning the ZetaConnectorNonNative contract. var ZetaConnectorNonNativeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxSupply\",\"inputs\":[{\"name\":\"maxSupply_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"MaxSupplyUpdated\",\"inputs\":[{\"name\":\"maxSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405260001960045534801561001657600080fd5b5060405161199338038061199383398101604081905261003591610238565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100dd60008261016c565b506101087f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361016c565b506101337f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361016c565b5061015e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261016c565b50505050505050505061028c565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166102125760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610216565b5060005b92915050565b80516001600160a01b038116811461023357600080fd5b919050565b6000806000806080858703121561024e57600080fd5b6102578561021c565b93506102656020860161021c565b92506102736040860161021c565b91506102816060860161021c565b905092959194509250565b60805160a0516116a36102f060003960008181610220015281816106d80152818161084a01528181610b6301528181610ce40152610e060152600081816101d401528181610648015281816106ab01528181610ad30152610b3601526116a36000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80636f8b44b0116100e3578063a217fddf1161008c578063d547741f11610066578063d547741f146103cf578063d5abeb01146103e2578063e63ab1e9146103eb57600080fd5b8063a217fddf1461038d578063a783c78914610395578063afd2dce4146103bc57600080fd5b806385f438c1116100bd57806385f438c11461030d57806391d1485414610334578063950837aa1461037a57600080fd5b80636f8b44b0146102df578063743e0c9b146102f25780638456cb591461030557600080fd5b80632f2ff15d116101455780635b1125911161011f5780635b112591146102a15780635c975abb146102c15780635e3e9fef146102cc57600080fd5b80632f2ff15d1461027357806336568abe146102865780633f4ba83a1461029957600080fd5b8063116191b611610176578063116191b6146101cf57806321e093b11461021b578063248a9ca31461024257600080fd5b806301ffc9a714610192578063106e6290146101ba575b600080fd5b6101a56101a03660046111c8565b610412565b60405190151581526020015b60405180910390f35b6101cd6101c836600461123a565b6104ab565b005b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b61026561025036600461126d565b60009081526002602052604090206001015490565b6040519081526020016101b1565b6101cd610281366004611286565b610550565b6101cd610294366004611286565b61057b565b6101cd6105d4565b6003546101f69073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff166101a5565b6101cd6102da3660046112fb565b610609565b6101cd6102ed36600461126d565b61079e565b6101cd61030036600461126d565b61080d565b6101cd6108b7565b6102657f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a5610342366004611286565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cd61038836600461135d565b6108e9565b610265600081565b6102657f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101cd6103ca366004611378565b610a94565b6101cd6103dd366004611286565b610c2e565b61026560045481565b6102657f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104a557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104b3610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104dd81610c96565b6104e5610ca0565b6104f0848484610cdf565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161053891815260200190565b60405180910390a25061054b6001600055565b505050565b60008281526002602052604090206001015461056b81610c96565b6105758383610e67565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146105ca576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61054b8282610f67565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fe81610c96565b610606611026565b50565b610611610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461063b81610c96565b610643610ca0565b61066e7f00000000000000000000000000000000000000000000000000000000000000008684610cdf565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610708907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611459565b600060405180830381600087803b15801561072257600080fd5b505af1158015610736573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610784939291906114b6565b60405180910390a2506107976001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c881610c96565b6107d0610ca0565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c906020015b60405180910390a15050565b610815610ca0565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156108a357600080fd5b505af1158015610797573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108e181610c96565b6106066110a3565b60006108f481610c96565b73ffffffffffffffffffffffffffffffffffffffff8216610941576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354610985907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e49073ffffffffffffffffffffffffffffffffffffffff16610f67565b506003546109ca907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb9073ffffffffffffffffffffffffffffffffffffffff16610f67565b506109f57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610e67565b50610a207f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610e67565b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f190602001610801565b610a9c610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ac681610c96565b610ace610ca0565b610af97f00000000000000000000000000000000000000000000000000000000000000008785610cdf565b6040517fece697b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ece697b390610b95907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161157d565b600060405180830381600087803b158015610baf57600080fd5b505af1158015610bc3573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac87878786604051610c1394939291906115ee565b60405180910390a250610c266001600055565b505050505050565b600082815260026020526040902060010154610c4981610c96565b6105758383610f67565b600260005403610c8f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61060681336110fc565b60015460ff1615610cdd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d71919061161a565b610d7b9084611633565b1115610db3576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610e4a57600080fd5b505af1158015610e5e573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610efd3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016104a5565b5060006104a5565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104a5565b61102e61118c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6110ab610ca0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611079565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611188576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610cdd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156111da57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461120a57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461123557600080fd5b919050565b60008060006060848603121561124f57600080fd5b61125884611211565b95602085013595506040909401359392505050565b60006020828403121561127f57600080fd5b5035919050565b6000806040838503121561129957600080fd5b823591506112a960208401611211565b90509250929050565b60008083601f8401126112c457600080fd5b50813567ffffffffffffffff8111156112dc57600080fd5b6020830191508360208285010111156112f457600080fd5b9250929050565b60008060008060006080868803121561131357600080fd5b61131c86611211565b945060208601359350604086013567ffffffffffffffff81111561133f57600080fd5b61134b888289016112b2565b96999598509660600135949350505050565b60006020828403121561136f57600080fd5b61120a82611211565b60008060008060008060a0878903121561139157600080fd5b61139a87611211565b955060208701359450604087013567ffffffffffffffff8111156113bd57600080fd5b6113c989828a016112b2565b90955093505060608701359150608087013567ffffffffffffffff8111156113f057600080fd5b87016060818a03121561140257600080fd5b809150509295509295509295565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114ab608083018486611410565b979650505050505050565b8381526040602082015260006114d0604083018486611410565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff6114f782611211565b1682526020818101359083015260006040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261153c57600080fd5b820160208101903567ffffffffffffffff81111561155957600080fd5b80360382131561156857600080fd5b606060408601526114d0606086018284611410565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a0606082015260006115cf60a083018587611410565b82810360808401526115e181856114d9565b9998505050505050505050565b848152606060208201526000611608606083018587611410565b82810360408401526114ab81856114d9565b60006020828403121561162c57600080fd5b5051919050565b808201808211156104a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206fa68043397322d1636dba3251c7e40948706562c8e08173e2df059302eb268d64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxSupply\",\"inputs\":[{\"name\":\"maxSupply_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxSupplyUpdated\",\"inputs\":[{\"name\":\"maxSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052348015601357600080fd5b5060805161251761003d6000396000818161145701528181611480015261165601526125176000f3fe6080604052600436106101ac5760003560e01c80635e3e9fef116100ec578063a217fddf1161008a578063d547741f11610064578063d547741f1461057e578063d5abeb011461059e578063e63ab1e9146105b4578063f8c8765e146105e857600080fd5b8063a217fddf146104df578063a783c789146104f4578063ad3cb1cc1461052857600080fd5b80638456cb59116100c65780638456cb591461041157806385f438c11461042657806391d148541461045a578063950837aa146104bf57600080fd5b80635e3e9fef146103b15780636f8b44b0146103d1578063743e0c9b146103f157600080fd5b80632f2ff15d116101595780634f1ef286116101335780634f1ef2861461033257806352d1902d146103455780635b1125911461035a5780635c975abb1461037a57600080fd5b80632f2ff15d146102dd57806336568abe146102fd5780633f4ba83a1461031d57600080fd5b8063116191b61161018a578063116191b61461022857806321e093b114610260578063248a9ca31461028057600080fd5b806301ffc9a7146101b1578063057e0f25146101e6578063106e629014610208575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611e67565b610608565b60405190151581526020015b60405180910390f35b3480156101f257600080fd5b50610206610201366004611f0e565b6106a1565b005b34801561021457600080fd5b50610206610223366004611fa6565b6107f4565b34801561023457600080fd5b50600054610248906001600160a01b031681565b6040516001600160a01b0390911681526020016101dd565b34801561026c57600080fd5b50600154610248906001600160a01b031681565b34801561028c57600080fd5b506102cf61029b366004611fd9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101dd565b3480156102e957600080fd5b506102066102f8366004611ff2565b6108ab565b34801561030957600080fd5b50610206610318366004611ff2565b6108f5565b34801561032957600080fd5b50610206610941565b61020661034036600461204d565b610976565b34801561035157600080fd5b506102cf610995565b34801561036657600080fd5b50600254610248906001600160a01b031681565b34801561038657600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101d1565b3480156103bd57600080fd5b506102066103cc366004612154565b6109c4565b3480156103dd57600080fd5b506102066103ec366004611fd9565b610b12565b3480156103fd57600080fd5b5061020661040c366004611fd9565b610b80565b34801561041d57600080fd5b50610206610c01565b34801561043257600080fd5b506102cf7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561046657600080fd5b506101d1610475366004611ff2565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb57600080fd5b506102066104da3660046121b6565b610c33565b3480156104eb57600080fd5b506102cf600081565b34801561050057600080fd5b506102cf7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561053457600080fd5b506105716040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101dd91906121f5565b34801561058a57600080fd5b50610206610599366004611ff2565b610dc6565b3480156105aa57600080fd5b506102cf60035481565b3480156105c057600080fd5b506102cf7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105f457600080fd5b50610206610603366004612246565b610e0a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061069b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6106a9610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106d381611036565b6106db611040565b6000546106f2906001600160a01b0316878561109e565b6000546001546040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263d0b492c392610749929116908b908b908b908b908a90600401612392565b600060405180830381600087803b15801561076357600080fd5b505af1158015610777573d6000803e3d6000fd5b50505050866001600160a01b03167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516107ba94939291906123e9565b60405180910390a2506107ec60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6107fc610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461082681611036565b61082e611040565b61083984848461109e565b836001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161087491815260200190565b60405180910390a2506108a660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546108e581611036565b6108ef838361120b565b50505050565b6001600160a01b0381163314610937576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108a682826112f8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61096b81611036565b6109736113bc565b50565b61097e61144c565b6109878261151c565b6109918282611527565b5050565b600061099f61164b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6109cc610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109f681611036565b6109fe611040565b600054610a15906001600160a01b0316868461109e565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab5992610a6a929116908a908a908a908a90600401612420565b600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610ad993929190612458565b60405180910390a250610b0b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b3c81611036565b610b44611040565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610b88611040565b6001546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610bed57600080fd5b505af1158015610b0b573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c2b81611036565b6109736116ad565b6000610c3e81611036565b6001600160a01b038216610c7e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610cb5907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166112f8565b50600254610ced907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166112f8565b50610d187f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361120b565b50610d437f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361120b565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e0081611036565b6108ef83836112f8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610eb7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f185784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610f2489898989611726565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003558315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611030576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109738133611a31565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561109c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600354600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612472565b611122908461248b565b111561115a576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f1e458bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526044820184905290911690631e458bee90606401600060405180830381600087803b1580156111c857600080fd5b505af11580156111dc573d6000803e3d6000fd5b50505050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166112ee576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112a43390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061069b565b600091505061069b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156112ee576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061069b565b6113c4611abe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114e557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114d97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061099181611036565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561159f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261159c91810190612472565b60015b6115e5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611641576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016115dc565b6108a68383611b19565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b5611040565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361142e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117715750825b905060008267ffffffffffffffff16600114801561178e5750303b155b90508115801561179c575080155b156117d3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118345784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061185157506001600160a01b038816155b8061186357506001600160a01b038716155b8061187557506001600160a01b038616155b156118ac576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118b4611b6f565b6118bc611b77565b6118c4611b6f565b6118cc611b87565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b1691909216179055611927908761120b565b506119527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48861120b565b5061197d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8861120b565b506119a87f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761120b565b506119d37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8861120b565b508315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610fa1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610991576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016115dc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661109c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b2282611b97565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b67576108a68282611c3f565b610991611cb5565b61109c611ced565b611b7f611ced565b61109c611d54565b611b8f611ced565b61109c611d5c565b806001600160a01b03163b600003611be6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016115dc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611c5c91906124c5565b600060405180830381855af49150503d8060008114611c97576040519150601f19603f3d011682016040523d82523d6000602084013e611c9c565b606091505b5091509150611cac858383611dad565b95945050505050565b341561109c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661109c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111e5611ced565b611d64611ced565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606082611dc257611dbd82611e25565b611e1e565b8151158015611dd957506001600160a01b0384163b155b15611e1b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016115dc565b50805b9392505050565b805115611e355780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611e7957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611e1e57600080fd5b80356001600160a01b0381168114611ec057600080fd5b919050565b60008083601f840112611ed757600080fd5b50813567ffffffffffffffff811115611eef57600080fd5b602083019150836020828501011115611f0757600080fd5b9250929050565b60008060008060008060a08789031215611f2757600080fd5b611f3087611ea9565b955060208701359450604087013567ffffffffffffffff811115611f5357600080fd5b611f5f89828a01611ec5565b90955093505060608701359150608087013567ffffffffffffffff811115611f8657600080fd5b87016060818a031215611f9857600080fd5b809150509295509295509295565b600080600060608486031215611fbb57600080fd5b611fc484611ea9565b95602085013595506040909401359392505050565b600060208284031215611feb57600080fd5b5035919050565b6000806040838503121561200557600080fd5b8235915061201560208401611ea9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561206057600080fd5b61206983611ea9565b9150602083013567ffffffffffffffff81111561208557600080fd5b8301601f8101851361209657600080fd5b803567ffffffffffffffff8111156120b0576120b061201e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561211c5761211c61201e565b60405281815282820160200187101561213457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561216c57600080fd5b61217586611ea9565b945060208601359350604086013567ffffffffffffffff81111561219857600080fd5b6121a488828901611ec5565b96999598509660600135949350505050565b6000602082840312156121c857600080fd5b611e1e82611ea9565b60005b838110156121ec5781810151838201526020016121d4565b50506000910152565b60208152600082518060208401526122148160408501602087016121d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561225c57600080fd5b61226585611ea9565b935061227360208601611ea9565b925061228160408601611ea9565b915061228f60608601611ea9565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b036122f482611ea9565b1682526000602082013567ffffffffffffffff811680821461231557600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261235157600080fd5b820160208101903567ffffffffffffffff81111561236e57600080fd5b80360382131561237d57600080fd5b60606040860152611cac60608601828461229a565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006123ca60a08301858761229a565b82810360808401526123dc81856122e3565b9998505050505050505050565b84815260606020820152600061240360608301858761229a565b828103604084015261241581856122e3565b979650505050505050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061241560808301848661229a565b838152604060208201526000611cac60408301848661229a565b60006020828403121561248457600080fd5b5051919050565b8082018082111561069b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082516124d78184602087016121d1565b919091019291505056fea26469706673582212202fb043a34ee4e9462c9f9506a8ed82f300e4fffb4db3d6b81653b7e1c00e3b8564736f6c634300081a0033", } // ZetaConnectorNonNativeABI is the input ABI used to generate the binding from. @@ -51,7 +51,7 @@ var ZetaConnectorNonNativeABI = ZetaConnectorNonNativeMetaData.ABI var ZetaConnectorNonNativeBin = ZetaConnectorNonNativeMetaData.Bin // DeployZetaConnectorNonNative deploys a new Ethereum contract, binding an instance of ZetaConnectorNonNative to it. -func DeployZetaConnectorNonNative(auth *bind.TransactOpts, backend bind.ContractBackend, gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (common.Address, *types.Transaction, *ZetaConnectorNonNative, error) { +func DeployZetaConnectorNonNative(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ZetaConnectorNonNative, error) { parsed, err := ZetaConnectorNonNativeMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -60,7 +60,7 @@ func DeployZetaConnectorNonNative(auth *bind.TransactOpts, backend bind.Contract return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZetaConnectorNonNativeBin), backend, gateway_, zetaToken_, tssAddress_, admin_) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZetaConnectorNonNativeBin), backend) if err != nil { return common.Address{}, nil, nil, err } @@ -302,6 +302,37 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCallerSession) TSSROLE() ([ return _ZetaConnectorNonNative.Contract.TSSROLE(&_ZetaConnectorNonNative.CallOpts) } +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ZetaConnectorNonNative.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ZetaConnectorNonNative.Contract.UPGRADEINTERFACEVERSION(&_ZetaConnectorNonNative.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCallerSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ZetaConnectorNonNative.Contract.UPGRADEINTERFACEVERSION(&_ZetaConnectorNonNative.CallOpts) +} + // WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. // // Solidity: function WITHDRAWER_ROLE() view returns(bytes32) @@ -488,6 +519,37 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCallerSession) Paused() (bo return _ZetaConnectorNonNative.Contract.Paused(&_ZetaConnectorNonNative.CallOpts) } +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNonNative.contract.Call(opts, &out, "proxiableUUID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) ProxiableUUID() ([32]byte, error) { + return _ZetaConnectorNonNative.Contract.ProxiableUUID(&_ZetaConnectorNonNative.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCallerSession) ProxiableUUID() ([32]byte, error) { + return _ZetaConnectorNonNative.Contract.ProxiableUUID(&_ZetaConnectorNonNative.CallOpts) +} + // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) @@ -602,6 +664,27 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) GrantRol return _ZetaConnectorNonNative.Contract.GrantRole(&_ZetaConnectorNonNative.TransactOpts, role, account) } +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactor) Initialize(opts *bind.TransactOpts, gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNative.contract.Transact(opts, "initialize", gateway_, zetaToken_, tssAddress_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) Initialize(gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNative.Contract.Initialize(&_ZetaConnectorNonNative.TransactOpts, gateway_, zetaToken_, tssAddress_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) Initialize(gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNative.Contract.Initialize(&_ZetaConnectorNonNative.TransactOpts, gateway_, zetaToken_, tssAddress_, admin_) +} + // Pause is a paid mutator transaction binding the contract method 0x8456cb59. // // Solidity: function pause() returns() @@ -749,6 +832,27 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) UpdateTS return _ZetaConnectorNonNative.Contract.UpdateTSSAddress(&_ZetaConnectorNonNative.TransactOpts, newTSSAddress) } +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorNonNative.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorNonNative.Contract.UpgradeToAndCall(&_ZetaConnectorNonNative.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorNonNative.Contract.UpgradeToAndCall(&_ZetaConnectorNonNative.TransactOpts, newImplementation, data) +} + // Withdraw is a paid mutator transaction binding the contract method 0x106e6290. // // Solidity: function withdraw(address to, uint256 amount, bytes32 internalSendHash) returns() @@ -791,27 +895,161 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) Withdraw return _ZetaConnectorNonNative.Contract.WithdrawAndCall(&_ZetaConnectorNonNative.TransactOpts, to, amount, data, internalSendHash) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xafd2dce4. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorNonNative.contract.Transact(opts, "withdrawAndRevert", to, amount, data, internalSendHash, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xafd2dce4. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorNonNative.Contract.WithdrawAndRevert(&_ZetaConnectorNonNative.TransactOpts, to, amount, data, internalSendHash, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xafd2dce4. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint256,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorNonNative.Contract.WithdrawAndRevert(&_ZetaConnectorNonNative.TransactOpts, to, amount, data, internalSendHash, revertContext) } +// ZetaConnectorNonNativeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ZetaConnectorNonNative contract. +type ZetaConnectorNonNativeInitializedIterator struct { + Event *ZetaConnectorNonNativeInitialized // 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 *ZetaConnectorNonNativeInitializedIterator) 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(ZetaConnectorNonNativeInitialized) + 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(ZetaConnectorNonNativeInitialized) + 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 *ZetaConnectorNonNativeInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeInitialized represents a Initialized event raised by the ZetaConnectorNonNative contract. +type ZetaConnectorNonNativeInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) FilterInitialized(opts *bind.FilterOpts) (*ZetaConnectorNonNativeInitializedIterator, error) { + + logs, sub, err := _ZetaConnectorNonNative.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeInitializedIterator{contract: _ZetaConnectorNonNative.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeInitialized) (event.Subscription, error) { + + logs, sub, err := _ZetaConnectorNonNative.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(ZetaConnectorNonNativeInitialized) + if err := _ZetaConnectorNonNative.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 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) ParseInitialized(log types.Log) (*ZetaConnectorNonNativeInitialized, error) { + event := new(ZetaConnectorNonNativeInitialized) + if err := _ZetaConnectorNonNative.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ZetaConnectorNonNativeMaxSupplyUpdatedIterator is returned from FilterMaxSupplyUpdated and is used to iterate over the raw logs and unpacked data for MaxSupplyUpdated events raised by the ZetaConnectorNonNative contract. type ZetaConnectorNonNativeMaxSupplyUpdatedIterator struct { Event *ZetaConnectorNonNativeMaxSupplyUpdated // Event containing the contract specifics and raw log @@ -1769,13 +2007,14 @@ func (it *ZetaConnectorNonNativeUpdatedZetaConnectorTSSAddressIterator) Close() // ZetaConnectorNonNativeUpdatedZetaConnectorTSSAddress represents a UpdatedZetaConnectorTSSAddress event raised by the ZetaConnectorNonNative contract. type ZetaConnectorNonNativeUpdatedZetaConnectorTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedZetaConnectorTSSAddress is a free log retrieval operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// FilterUpdatedZetaConnectorTSSAddress is a free log retrieval operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) FilterUpdatedZetaConnectorTSSAddress(opts *bind.FilterOpts) (*ZetaConnectorNonNativeUpdatedZetaConnectorTSSAddressIterator, error) { logs, sub, err := _ZetaConnectorNonNative.contract.FilterLogs(opts, "UpdatedZetaConnectorTSSAddress") @@ -1785,9 +2024,9 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) FilterUpdatedZeta return &ZetaConnectorNonNativeUpdatedZetaConnectorTSSAddressIterator{contract: _ZetaConnectorNonNative.contract, event: "UpdatedZetaConnectorTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedZetaConnectorTSSAddress is a free log subscription operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// WatchUpdatedZetaConnectorTSSAddress is a free log subscription operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) WatchUpdatedZetaConnectorTSSAddress(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpdatedZetaConnectorTSSAddress) (event.Subscription, error) { logs, sub, err := _ZetaConnectorNonNative.contract.WatchLogs(opts, "UpdatedZetaConnectorTSSAddress") @@ -1822,9 +2061,9 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) WatchUpdatedZetaC }), nil } -// ParseUpdatedZetaConnectorTSSAddress is a log parse operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// ParseUpdatedZetaConnectorTSSAddress is a log parse operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) ParseUpdatedZetaConnectorTSSAddress(log types.Log) (*ZetaConnectorNonNativeUpdatedZetaConnectorTSSAddress, error) { event := new(ZetaConnectorNonNativeUpdatedZetaConnectorTSSAddress) if err := _ZetaConnectorNonNative.contract.UnpackLog(event, "UpdatedZetaConnectorTSSAddress", log); err != nil { @@ -1834,6 +2073,150 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) ParseUpdatedZetaC return event, nil } +// ZetaConnectorNonNativeUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the ZetaConnectorNonNative contract. +type ZetaConnectorNonNativeUpgradedIterator struct { + Event *ZetaConnectorNonNativeUpgraded // 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 *ZetaConnectorNonNativeUpgradedIterator) 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(ZetaConnectorNonNativeUpgraded) + 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(ZetaConnectorNonNativeUpgraded) + 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 *ZetaConnectorNonNativeUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeUpgraded represents a Upgraded event raised by the ZetaConnectorNonNative contract. +type ZetaConnectorNonNativeUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*ZetaConnectorNonNativeUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ZetaConnectorNonNative.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradedIterator{contract: _ZetaConnectorNonNative.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ZetaConnectorNonNative.contract.WatchLogs(opts, "Upgraded", implementationRule) + 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(ZetaConnectorNonNativeUpgraded) + if err := _ZetaConnectorNonNative.contract.UnpackLog(event, "Upgraded", 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 +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) ParseUpgraded(log types.Log) (*ZetaConnectorNonNativeUpgraded, error) { + event := new(ZetaConnectorNonNativeUpgraded) + if err := _ZetaConnectorNonNative.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ZetaConnectorNonNativeWithdrawnIterator is returned from FilterWithdrawn and is used to iterate over the raw logs and unpacked data for Withdrawn events raised by the ZetaConnectorNonNative contract. type ZetaConnectorNonNativeWithdrawnIterator struct { Event *ZetaConnectorNonNativeWithdrawn // Event containing the contract specifics and raw log @@ -2201,9 +2584,9 @@ type ZetaConnectorNonNativeWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNonNativeWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -2218,9 +2601,9 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) FilterWithdrawnAn return &ZetaConnectorNonNativeWithdrawnAndRevertedIterator{contract: _ZetaConnectorNonNative.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeWithdrawnAndReverted, to []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2260,9 +2643,9 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) WatchWithdrawnAnd }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) ParseWithdrawnAndReverted(log types.Log) (*ZetaConnectorNonNativeWithdrawnAndReverted, error) { event := new(ZetaConnectorNonNativeWithdrawnAndReverted) if err := _ZetaConnectorNonNative.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go index 204be4c82..e5c6ef267 100644 --- a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go +++ b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go @@ -32,7 +32,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address - Amount *big.Int + Amount uint64 RevertMessage []byte } @@ -65,8 +65,8 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNonNativeTestMetaData contains all meta data concerning the ZetaConnectorNonNativeTest contract. var ZetaConnectorNonNativeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testSexMaxSupplyFailsIfSenderIsNotTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5062010119806200003e6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063a783c78911610104578063d509b16c116100a2578063e63ab1e911610071578063e63ab1e914610344578063fa7626d41461036b578063fdca905214610378578063fe574f841461038057600080fd5b8063d509b16c14610324578063dcf7d0371461032c578063de1cb76c14610334578063e20c9f711461033c57600080fd5b8063b5508aa9116100de578063b5508aa9146102f4578063ba414fa6146102fc578063c190997214610314578063ccb0e3f21461031c57600080fd5b8063a783c789146102bd578063aaf74192146102e4578063b0464fdc146102ec57600080fd5b80634934655811610171578063828320141161014b578063828320141461025657806385226c811461025e57806385f438c114610273578063916a17c6146102a857600080fd5b8063493465581461023157806366d9a9a0146102395780637db20efb1461024e57600080fd5b80632ade3880116101ad5780632ade3880146102045780633cba0107146102195780633e5e3c23146102215780633f7286f41461022957600080fd5b80630a9254e4146101d45780631ed7831c146101de5780632506ef03146101fc575b600080fd5b6101dc610388565b005b6101e6610ae9565b6040516101f39190618f8c565b60405180910390f35b6101dc610b4b565b61020c610dff565b6040516101f39190619028565b6101dc610f41565b6101e6611703565b6101e6611763565b6101dc6117c3565b610241611d97565b6040516101f3919061918e565b6101dc611f19565b6101dc6121b8565b610266612414565b6040516101f3919061922c565b61029a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101f3565b6102b06124e4565b6040516101f391906192a3565b61029a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101dc6125df565b6102b061285a565b610266612955565b610304612a25565b60405190151581526020016101f3565b6101dc612af9565b6101dc612d64565b6101dc613890565b6101dc613be5565b6101dc614213565b6101e6614939565b61029a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f546103049060ff1681565b6101dc614999565b6101dc614b9d565b60258054307fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155602680546112349083161790556027805461567892168217905560405181906103dd90618e9b565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610410573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152610501919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614d8a565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061058d90618ea9565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156105c9573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061062490618eb7565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610668573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156106ed57600080fd5b505af1158015610701573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b15801561077457600080fd5b505af1158015610788573d6000803e3d6000fd5b5050505060405161079890618ec5565b604051809103906000f0801580156107b4573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561086057600080fd5b505af1158015610874573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156108ea57600080fd5b505af11580156108fe573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561096457600080fd5b505af1158015610978573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156109de57600080fd5b505af11580156109f2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5457600080fd5b505af1158015610a68573d6000803e3d6000fd5b5050604080516060810182526024546001600160a01b0390811682526001602080840191825284519081018552600081529383018490528251602880547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909316178255516029559093509150602a90610ae490826193fd565b505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610b4157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b23575b5050505050905090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610be657600080fd5b505af1158015610bfa573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610c5d57600080fd5b505af1158015610c71573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610cce57600080fd5b505af1158015610ce2573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015610d6b57600080fd5b505af1158015610d7f573d6000803e3d6000fd5b50506023546021546001600160a01b03918216935063afd2dce4925016610da78560016194eb565b8460286040518563ffffffff1660e01b8152600401610dc994939291906195c8565b600060405180830381600087803b158015610de357600080fd5b505af1158015610df7573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610f3857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610f21578382906000526020600020018054610e9490619369565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec090619369565b8015610f0d5780601f10610ee257610100808354040283529160200191610f0d565b820191906000526020600020905b815481529060010190602001808311610ef057829003601f168201915b505050505081526020019060010190610e75565b505050508152505081526020019060010190610e23565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa15801561101c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110409190619609565b905061104d816000614da9565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561109d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c19190619609565b90506110ce816000614da9565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916111b5916001600160a01b0391909116906000908690600401619622565b600060405180830381600087803b1580156111cf57600080fd5b505af11580156111e3573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561127557600080fd5b505af1158015611289573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561137857600080fd5b505af115801561138c573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d91506113d1908990889061964a565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561143257600080fd5b505af1158015611446573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061149e92909116908a9089908b90600401619663565b600060405180830381600087803b1580156114b857600080fd5b505af11580156114cc573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190619609565b905061154e8188614da9565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561159e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c29190619609565b90506115cf816000614da9565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116699190619609565b9050611676816000614da9565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156116c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ea9190619609565b90506116f7816000614da9565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610b41576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b23575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610b41576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b23575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361186493921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a59190619609565b90506118b2816000614da9565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190619609565b9050611933816000614da9565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611a1a916001600160a01b0391909116906000908690600401619622565b600060405180830381600087803b158015611a3457600080fd5b505af1158015611a48573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611ada57600080fd5b505af1158015611aee573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611bc057600080fd5b505af1158015611bd4573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611c19908990889061964a565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c7a57600080fd5b505af1158015611c8e573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611ce692909116908a9089908b90600401619663565b600060405180830381600087803b158015611d0057600080fd5b505af1158015611d14573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8a9190619609565b905061154e816000614da9565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610f385783829060005260206000209060020201604051806040016040529081600082018054611dee90619369565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1a90619369565b8015611e675780601f10611e3c57610100808354040283529160200191611e67565b820191906000526020600020905b815481529060010190602001808311611e4a57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611f0157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611eae5790505b50505050508152505081526020019060010190611dbb565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611f7757600080fd5b505af1158015611f8b573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015611fee57600080fd5b505af1158015612002573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561205f57600080fd5b505af1158015612073573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156120fc57600080fd5b505af1158015612110573d6000803e3d6000fd5b50506023546021546001600160a01b03918216935063106e62909250166121388460016194eb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260006044820152606401600060405180830381600087803b15801561219d57600080fd5b505af11580156121b1573d6000803e3d6000fd5b5050505050565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561225557600080fd5b505af1158015612269573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612354919060040161969c565b600060405180830381600087803b15801561236e57600080fd5b505af1158015612382573d6000803e3d6000fd5b50506023546021546040517fafd2dce40000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063afd2dce493506123dd92909116908790869088906028906004016196af565b600060405180830381600087803b1580156123f757600080fd5b505af115801561240b573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610f3857838290600052602060002001805461245790619369565b80601f016020809104026020016040519081016040528092919081815260200182805461248390619369565b80156124d05780601f106124a5576101008083540402835291602001916124d0565b820191906000526020600020905b8154815290600101906020018083116124b357829003601f168201915b505050505081526020019060010190612438565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610f385760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156125c757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116125745790505b50505050508152505081526020019060010190612508565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561267a57600080fd5b505af115801561268e573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b1580156126f157600080fd5b505af1158015612705573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561276257600080fd5b505af1158015612776573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156127ff57600080fd5b505af1158015612813573d6000803e3d6000fd5b50506023546021546001600160a01b039182169350635e3e9fef92501661283b8560016194eb565b846040518463ffffffff1660e01b8152600401610dc9939291906196fb565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610f385760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561293d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116128ea5790505b5050505050815250508152602001906001019061287e565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610f3857838290600052602060002001805461299890619369565b80601f01602080910402602001604051908101604052809291908181526020018280546129c490619369565b8015612a115780601f106129e657610100808354040283529160200191612a11565b820191906000526020600020905b8154815290600101906020018083116129f457829003601f168201915b505050505081526020019060010190612979565b60085460009060ff1615612a3d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af29190619609565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612bdf57600080fd5b505af1158015612bf3573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612cde919060040161969c565b600060405180830381600087803b158015612cf857600080fd5b505af1158015612d0c573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506123dd9290911690879086908890600401619663565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612dc557600080fd5b505af1158015612dd9573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612ec4919060040161969c565b600060405180830381600087803b158015612ede57600080fd5b505af1158015612ef2573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f4657600080fd5b505af1158015612f5a573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612fb757600080fd5b505af1158015612fcb573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506130b6919060040161969c565b600060405180830381600087803b1580156130d057600080fd5b505af11580156130e4573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561313857600080fd5b505af115801561314c573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156131a957600080fd5b505af11580156131bd573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561321157600080fd5b505af1158015613225573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156132ae57600080fd5b505af11580156132c2573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561331f57600080fd5b505af1158015613333573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561341857600080fd5b505af115801561342c573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561348057600080fd5b505af1158015613494573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156134e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350a9190619609565b9050613517816000614da9565b6026546040516001600160a01b039091166024820152604481018490526064810183905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916135fe916001600160a01b0391909116906000908690600401619622565b600060405180830381600087803b15801561361857600080fd5b505af115801561362c573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156136be57600080fd5b505af11580156136d2573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561377157600080fd5b505af1158015613785573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e629091506064015b600060405180830381600087803b1580156137fa57600080fd5b505af115801561380e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613860573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138849190619609565b90506121b18186614da9565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa1580156138e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139099190619609565b9050613916816000614da9565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916139ff916001600160a01b0391909116906000908690600401619622565b600060405180830381600087803b158015613a1957600080fd5b505af1158015613a2d573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613abf57600080fd5b505af1158015613ad3573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e629091506064016137e0565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613cc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ce49190619609565b9050613cf1816000614da9565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d659190619609565b9050613d72816000614da9565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613e59916001600160a01b0391909116906000908690600401619622565b600060405180830381600087803b158015613e7357600080fd5b505af1158015613e87573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613f1957600080fd5b505af1158015613f2d573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050613f6b600289619734565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561403357600080fd5b505af1158015614047573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d915061408c908990889061964a565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156140ed57600080fd5b505af1158015614101573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061415992909116908a9089908b90600401619663565b600060405180830381600087803b15801561417357600080fd5b505af1158015614187573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156141d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141fd9190619609565b905061154e8161420e60028a619734565b614da9565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa1580156142a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142cc9190619609565b90506142d9816000614da9565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061434d9190619609565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614437916001600160a01b0391909116906000908690600401619622565b600060405180830381600087803b15801561445157600080fd5b505af1158015614465573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156144f757600080fd5b505af115801561450b573d6000803e3d6000fd5b50506020546040517fcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5935061454f92506001600160a01b039091169060289061976f565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156145e557600080fd5b505af11580156145f9573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507fbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c90614647908a908990602890619791565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156146dd57600080fd5b505af11580156146f1573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac91506147399089908890602890619791565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561479a57600080fd5b505af11580156147ae573d6000803e3d6000fd5b50506023546021546040517fafd2dce40000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063afd2dce4935061480992909116908a9089908b906028906004016196af565b600060405180830381600087803b15801561482357600080fd5b505af1158015614837573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015614889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148ad9190619609565b90506148b98188614da9565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061492d9190619609565b90506115cf8185614da9565b60606015805480602002602001604051908101604052809291908181526020018280548015610b41576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b23575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156149f257600080fd5b505af1158015614a06573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614af1919060040161969c565b600060405180830381600087803b158015614b0b57600080fd5b505af1158015614b1f573d6000803e3d6000fd5b50506023546040517f6f8b44b000000000000000000000000000000000000000000000000000000000815261271060048201526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015614b8357600080fd5b505af1158015614b97573d6000803e3d6000fd5b50505050565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614bfe57600080fd5b505af1158015614c12573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614cfd919060040161969c565b600060405180830381600087803b158015614d1757600080fd5b505af1158015614d2b573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401610dc9565b6000614d94618ed3565b614d9f848483614e28565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614e1457600080fd5b505afa158015610df7573d6000803e3d6000fd5b600080614e358584614ea3565b9050614e986040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614e839291906197bc565b60405160208183030381529060405285614eaf565b9150505b9392505050565b6000614e9c8383614edd565b60c08101515160009015614ed357614ecc84848460c00151614ef8565b9050614e9c565b614ecc848461509e565b6000614ee98383615189565b614e9c83836020015184614eaf565b600080614f03615199565b90506000614f11868361526c565b90506000614f288260600151836020015185615712565b90506000614f3883838989615924565b90506000614f45826167a1565b602081015181519192509060030b15614fb857898260400151604051602001614f6f9291906197de565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614faf9160040161969c565b60405180910390fd5b6000614ffb6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616970565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061504e90849060040161969c565b602060405180830381865afa15801561506b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061508f919061985f565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906150f390879060040161969c565b600060405180830381865afa158015615110573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526151389190810190619941565b905060006151668285604051602001615152929190619976565b604051602081830303815290604052616b70565b90506001600160a01b038116614d9f578484604051602001614f6f9291906199a5565b61519582826000616b83565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90615220908490600401619a50565b600060405180830381865afa15801561523d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152659190810190619a97565b9250505090565b61529e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506152e96040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6152f285616c86565b602082015260006153028661706b565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615344573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261536c9190810190619a97565b868385602001516040516020016153869493929190619ae0565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906153de90859060040161969c565b600060405180830381865afa1580156153fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154239190810190619a97565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061546b908490600401619be4565b602060405180830381865afa158015615488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906154ac9190619c36565b6154c15781604051602001614f6f9190619c58565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615506908490600401619cea565b600060405180830381865afa158015615523573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261554b9190810190619a97565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615592908490600401619d3c565b602060405180830381865afa1580156155af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155d39190619c36565b15615668576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061561d908490600401619d3c565b600060405180830381865afa15801561563a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156629190810190619a97565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161568d9190619d8e565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016156b9929190619dfa565b600060405180830381865afa1580156156d6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156fe9190810190619a97565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161572e5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061578e5761578e619e1f565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106157e2576157e2619e1f565b6020026020010181905250846040516020016157fe9190619e4e565b6040516020818303038152906040528160028151811061582057615820619e1f565b60200260200101819052508260405160200161583c9190619eba565b6040516020818303038152906040528160038151811061585e5761585e619e1f565b60200260200101819052506000615874826167a1565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061590590604080518082018252600080825260209182015281518083019092528451825280850190820152906172ee565b61591a5785604051602001614f6f9190619efb565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615974565b511590565b615ae857826020015115615a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614faf565b8260c0015115615ae8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614faf565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615b0157905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615b5c90619f8c565b935060ff1681518110615b7157615b71619e1f565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615bc29190619fab565b604051602081830303815290604052828280615bdd90619f8c565b935060ff1681518110615bf257615bf2619e1f565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615c3f90619f8c565b935060ff1681518110615c5457615c54619e1f565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615ca190619f8c565b935060ff1681518110615cb657615cb6619e1f565b60200260200101819052508760200151828280615cd290619f8c565b935060ff1681518110615ce757615ce7619e1f565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615d3490619f8c565b935060ff1681518110615d4957615d49619e1f565b602090810291909101015287518282615d6181619f8c565b935060ff1681518110615d7657615d76619e1f565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615dc390619f8c565b935060ff1681518110615dd857615dd8619e1f565b6020026020010181905250615dec4661734f565b8282615df781619f8c565b935060ff1681518110615e0c57615e0c619e1f565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615e5990619f8c565b935060ff1681518110615e6e57615e6e619e1f565b602002602001018190525086828280615e8690619f8c565b935060ff1681518110615e9b57615e9b619e1f565b6020908102919091010152855115615fc25760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615eec81619f8c565b935060ff1681518110615f0157615f01619e1f565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615f5190899060040161969c565b600060405180830381865afa158015615f6e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615f969190810190619a97565b8282615fa181619f8c565b935060ff1681518110615fb657615fb6619e1f565b60200260200101819052505b8460200151156160925760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261600b81619f8c565b935060ff168151811061602057616020619e1f565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061606d90619f8c565b935060ff168151811061608257616082619e1f565b6020026020010181905250616259565b6160ca61596f8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61615d5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261610d81619f8c565b935060ff168151811061612257616122619e1f565b60200260200101819052508460a001516040516020016161429190619e4e565b60405160208183030381529060405282828061606d90619f8c565b8460c001511580156161a057506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261619e90511590565b155b156162595760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826161e481619f8c565b935060ff16815181106161f9576161f9619e1f565b602002602001018190525061620d886173ef565b60405160200161621d9190619e4e565b60405160208183030381529060405282828061623890619f8c565b935060ff168151811061624d5761624d619e1f565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261628d90511590565b6163225760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826162d081619f8c565b935060ff16815181106162e5576162e5619e1f565b6020026020010181905250846040015182828061630190619f8c565b935060ff168151811061631657616316619e1f565b60200260200101819052505b6060850151156164435760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261636b81619f8c565b935060ff168151811061638057616380619e1f565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156163ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164179190810190619a97565b828261642281619f8c565b935060ff168151811061643757616437619e1f565b60200260200101819052505b60e085015151156164ea5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261648d81619f8c565b935060ff16815181106164a2576164a2619e1f565b60200260200101819052506164be8560e001516000015161734f565b82826164c981619f8c565b935060ff16815181106164de576164de619e1f565b60200260200101819052505b60e085015160200151156165945760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261653781619f8c565b935060ff168151811061654c5761654c619e1f565b60200260200101819052506165688560e001516020015161734f565b828261657381619f8c565b935060ff168151811061658857616588619e1f565b60200260200101819052505b60e0850151604001511561663e5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826165e181619f8c565b935060ff16815181106165f6576165f6619e1f565b60200260200101819052506166128560e001516040015161734f565b828261661d81619f8c565b935060ff168151811061663257616632619e1f565b60200260200101819052505b60e085015160600151156166e85760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261668b81619f8c565b935060ff16815181106166a0576166a0619e1f565b60200260200101819052506166bc8560e001516060015161734f565b82826166c781619f8c565b935060ff16815181106166dc576166dc619e1f565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156167065761670661933a565b60405190808252806020026020018201604052801561673957816020015b60608152602001906001900390816167245790505b50905060005b8260ff168160ff16101561679257838160ff168151811061676257616762619e1f565b6020026020010151828260ff168151811061677f5761677f619e1f565b602090810291909101015260010161673f565b5093505050505b949350505050565b6167c86040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161684e9186910161a016565b600060405180830381865afa15801561686b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168939190810190619a97565b905060006168a18683617ede565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016168d1919061922c565b6000604051808303816000875af11580156168f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616918919081019061a05d565b805190915060030b158015906169315750602081015151155b80156169405750604081015151155b1561591a578160008151811061695857616958619e1f565b6020026020010151604051602001614f6f919061a113565b606060006169a58560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506169dc9082905b90618033565b15616b39576000616a5982616a5384616a4d616a1f8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061805a565b906180bc565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616abd908290618033565b15616b2757604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b24905b8290618141565b90505b616b3081618167565b92505050614e9c565b8215616b52578484604051602001614f6f92919061a2ff565b5050604080516020810190915260008152614e9c565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616b9257505050565b6000616b9f8484846181d0565b90506000616bac826167a1565b602081015181519192509060030b158015616c485750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c48906040805180820182526000808252602091820152815180830190925284518252808501908201526169d6565b15616c5557505050505050565b60408201515115616c75578160400151604051602001614f6f919061a3a6565b80604051602001614f6f919061a404565b60606000616cbb8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616d20905b82906172ee565b15616d8f57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e9c90616d8a90839061876b565b618167565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616df1905b82906187f5565b600103616ebe57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e5790616b1d565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e9c90616d8a905b8390618141565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f1d90616d19565b1561705457604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616f8590839061888f565b905060008160018351616f98919061a46f565b81518110616fa857616fa8619e1f565b6020026020010151905061704b616d8a61701e6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061876b565b95945050505050565b82604051602001614f6f919061a482565b50919050565b606060006170a08360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061710290616d19565b1561711057614e9c81618167565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261716f90616dea565b6001036171d957604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e9c90616d8a90616eb7565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261723890616d19565b1561705457604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906172a090839061888f565b90506001815111156172dc5780600282516172bb919061a46f565b815181106172cb576172cb619e1f565b602002602001015192505050919050565b5082604051602001614f6f919061a482565b80518251600091111561730357506000614da3565b81518351602085015160009291617319916194eb565b617323919061a46f565b90508260200151810361733a576001915050614da3565b82516020840151819020912014905092915050565b6060600061735c83618934565b600101905060008167ffffffffffffffff81111561737c5761737c61933a565b6040519080825280601f01601f1916602001820160405280156173a6576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846173b057509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161747b905b8290618a16565b156174bb57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261751a90617474565b1561755a57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175b990617474565b156175f957505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261765890617474565b806176bd5750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176bd90617474565b156176fd57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261775c90617474565b806177c15750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177c190617474565b1561780157505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261786090617474565b806178c55750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178c590617474565b1561790557505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261796490617474565b806179c95750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179c990617474565b15617a0957505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a6890617474565b15617aa857505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b0790617474565b15617b4757505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ba690617474565b15617be657505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c4590617474565b15617c8557505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ce490617474565b15617d2457505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d8390617474565b80617de85750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617de890617474565b15617e2857505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e8790617474565b15617ec757505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614f6f929060200161a560565b60608060005b8451811015617f695781858281518110617f0057617f00619e1f565b6020026020010151604051602001617f19929190619976565b604051602081830303815290604052915060018551617f38919061a46f565b8114617f615781604051602001617f4f919061a6c9565b60405160208183030381529060405291505b600101617ee4565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617f825790505090508381600081518110617fad57617fad619e1f565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061800157618001619e1f565b6020026020010181905250818160028151811061802057618020619e1f565b6020908102919091010152949350505050565b60208083015183518351928401516000936180519291849190618a2a565b14159392505050565b6040805180820190915260008082526020820152600061808c8460000151856020015185600001518660200151618b3b565b905083602001518161809e919061a46f565b845185906180ad90839061a46f565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156180e1575081614da3565b60208083015190840151600191146181085750815160208481015190840151829020919020145b80156181395782518451859061811f90839061a46f565b90525082516020850180516181359083906194eb565b9052505b509192915050565b6040805180820190915260008082526020820152618160838383618c5b565b5092915050565b60606000826000015167ffffffffffffffff8111156181885761818861933a565b6040519080825280601f01601f1916602001820160405280156181b2576020820181803683370190505b50905060006020820190506181608185602001518660000151618d06565b606060006181dc615199565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816181f957905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061825490619f8c565b935060ff168151811061826957618269619e1f565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016182ba919061a70a565b6040516020818303038152906040528282806182d590619f8c565b935060ff16815181106182ea576182ea619e1f565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061833790619f8c565b935060ff168151811061834c5761834c619e1f565b6020026020010181905250826040516020016183689190619eba565b60405160208183030381529060405282828061838390619f8c565b935060ff168151811061839857618398619e1f565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806183e590619f8c565b935060ff16815181106183fa576183fa619e1f565b602002602001018190525061840f8784618d80565b828261841a81619f8c565b935060ff168151811061842f5761842f619e1f565b6020908102919091010152855151156184db5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261848181619f8c565b935060ff168151811061849657618496619e1f565b60200260200101819052506184af866000015184618d80565b82826184ba81619f8c565b935060ff16815181106184cf576184cf619e1f565b60200260200101819052505b8560800151156185495760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261852481619f8c565b935060ff168151811061853957618539619e1f565b60200260200101819052506185af565b84156185af5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261858e81619f8c565b935060ff16815181106185a3576185a3619e1f565b60200260200101819052505b6040860151511561864b5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826185f981619f8c565b935060ff168151811061860e5761860e619e1f565b6020026020010181905250856040015182828061862a90619f8c565b935060ff168151811061863f5761863f619e1f565b60200260200101819052505b8560600151156186b55760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261869481619f8c565b935060ff16815181106186a9576186a9619e1f565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156186d3576186d361933a565b60405190808252806020026020018201604052801561870657816020015b60608152602001906001900390816186f15790505b50905060005b8260ff168160ff16101561875f57838160ff168151811061872f5761872f619e1f565b6020026020010151828260ff168151811061874c5761874c619e1f565b602090810291909101015260010161870c565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618790575081614da3565b815183516020850151600092916187a6916194eb565b6187b0919061a46f565b602084015190915060019082146187d1575082516020840151819020908220145b80156187ec578351855186906187e890839061a46f565b9052505b50929392505050565b60008082600001516188198560000151866020015186600001518760200151618b3b565b61882391906194eb565b90505b8351602085015161883791906194eb565b811161816057816188478161a74f565b925050826000015161887e856020015183618862919061a46f565b865161886e919061a46f565b8386600001518760200151618b3b565b61888891906194eb565b9050618826565b6060600061889d84846187f5565b6188a89060016194eb565b67ffffffffffffffff8111156188c0576188c061933a565b6040519080825280602002602001820160405280156188f357816020015b60608152602001906001900390816188de5790505b50905060005b8151811015616b685761890f616d8a8686618141565b82828151811061892157618921619e1f565b60209081029190910101526001016188f9565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061897d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106189a9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106189c757662386f26fc10000830492506010015b6305f5e10083106189df576305f5e100830492506008015b61271083106189f357612710830492506004015b60648310618a05576064830492506002015b600a8310614da35760010192915050565b6000618a228383618dc0565b159392505050565b600080858411618b315760208411618add5760008415618a75576001618a5186602061a46f565b618a5c90600861a769565b618a6790600261a867565b618a71919061a46f565b1990505b8351811685618a8489896194eb565b618a8e919061a46f565b805190935082165b818114618ac857878411618ab05787945050505050616799565b83618aba8161a873565b945050828451169050618a96565b618ad287856194eb565b945050505050616799565b838320618aea858861a46f565b618af490876194eb565b91505b858210618b2f57848220808203618b1c57618b1286846194eb565b9350505050616799565b618b2760018461a46f565b925050618af7565b505b5092949350505050565b60008381868511618c465760208511618bf55760008515618b87576001618b6387602061a46f565b618b6e90600861a769565b618b7990600261a867565b618b83919061a46f565b1990505b84518116600087618b988b8b6194eb565b618ba2919061a46f565b855190915083165b828114618be757818610618bcf57618bc28b8b6194eb565b9650505050505050616799565b85618bd98161a74f565b965050838651169050618baa565b859650505050505050616799565b508383206000905b618c07868961a46f565b8211618c4457858320808203618c235783945050505050616799565b618c2e6001856194eb565b9350508180618c3c9061a74f565b925050618bfd565b505b618c5087876194eb565b979650505050505050565b60408051808201909152600080825260208201526000618c8d8560000151866020015186600001518760200151618b3b565b602080870180519186019190915251909150618ca9908261a46f565b835284516020860151618cbc91906194eb565b8103618ccb5760008552618cfd565b83518351618cd991906194eb565b85518690618ce890839061a46f565b9052508351618cf790826194eb565b60208601525b50909392505050565b60208110618d3e5781518352618d1d6020846194eb565b9250618d2a6020836194eb565b9150618d3760208261a46f565b9050618d06565b6000198115618d6d576001618d5483602061a46f565b618d609061010061a867565b618d6a919061a46f565b90505b9151835183169219169190911790915250565b60606000618d8e848461526c565b8051602080830151604051939450618da89390910161a88a565b60405160208183030381529060405291505092915050565b8151815160009190811115618dd3575081515b6020808501519084015160005b83811015618e8c5782518251808214618e5c576000196020871015618e3b57600184618e0d89602061a46f565b618e1791906194eb565b618e2290600861a769565b618e2d90600261a867565b618e37919061a46f565b1990505b8181168382168181039114618e59579750614da39650505050505050565b50505b618e676020866194eb565b9450618e746020856194eb565b93505050602081618e8591906194eb565b9050618de0565b508451865161591a919061a8e2565b6112a6806200a90383390190565b611de7806200bba983390190565b611993806200d99083390190565b610dc1806200f32383390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618f16618f1b565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618f166040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618fcd5783516001600160a01b0316835260209384019390920191600101618fa6565b509095945050505050565b60005b83811015618ff3578181015183820152602001618fdb565b50506000910152565b60008151808452619014816020860160208601618fd8565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619124577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561910a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526190f4848651618ffc565b60209586019590945092909201916001016190ba565b509197505050602094850194929092019150600101619050565b50929695505050505050565b600081518084526020840193506020830160005b828110156191845781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101619144565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619124577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526191fa6040880182618ffc565b90506020820151915086810360208801526192158183619130565b9650505060209384019391909101906001016191b6565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619124577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261928e858351618ffc565b94506020938401939190910190600101619254565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619124577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526193246040870182619130565b95505060209384019391909101906001016192cb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061937d57607f821691505b602082108103617065577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610ae457806000526020600020601f840160051c810160208510156193dd5750805b601f840160051c820191505b818110156121b157600081556001016193e9565b815167ffffffffffffffff8111156194175761941761933a565b61942b816194258454619369565b846193b6565b6020601f82116001811461945f57600083156194475750848201515b600019600385901b1c1916600184901b1784556121b1565b600084815260208120601f198516915b8281101561948f578785015182556020948501946001909201910161946f565b50848210156194ad5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614da357614da36194bc565b6001600160a01b03815416825260018101546020830152600060028201606060408501526000815461952f81619369565b806060880152600182166000811461954e5760018114619588576195bc565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b89010193506195bc565b84600052602060002060005b838110156195b35781548a820160800152600190910190602001619594565b89016080019450505b50919695505050505050565b6001600160a01b038516815283602082015260a0604082015260006195f060a0830185618ffc565b600060608401528281036080840152618c5081856194fe565b60006020828403121561961b57600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061704b6060830184618ffc565b8281526040602082015260006167996040830184618ffc565b6001600160a01b038516815283602082015260806040820152600061968b6080830185618ffc565b905082606083015295945050505050565b602081526000614e9c6020830184618ffc565b6001600160a01b038616815284602082015260a0604082015260006196d760a0830186618ffc565b84606084015282810360808401526196ef81856194fe565b98975050505050505050565b6001600160a01b03841681528260208201526080604082015260006197236080830184618ffc565b905060006060830152949350505050565b60008261976a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b038316815260406020820152600061679960408301846194fe565b8381526060602082015260006197aa6060830185618ffc565b828103604084015261591a81856194fe565b6001600160a01b03831681526040602082015260006167996040830184618ffc565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161981681601a850160208801618fd8565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161985381601c840160208801618fd8565b01601c01949350505050565b60006020828403121561987157600080fd5b81516001600160a01b0381168114614e9c57600080fd5b6040516060810167ffffffffffffffff811182821017156198ab576198ab61933a565b60405290565b60008067ffffffffffffffff8411156198cc576198cc61933a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156198fb576198fb61933a565b60405283815290508082840185101561991357600080fd5b616b68846020830185618fd8565b600082601f83011261993257600080fd5b614e9c838351602085016198b1565b60006020828403121561995357600080fd5b815167ffffffffffffffff81111561996a57600080fd5b614d9f84828501619921565b60008351619988818460208801618fd8565b83519083019061999c818360208801618fd8565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516199dd81601a850160208801618fd8565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351619a1a816033840160208801618fd8565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614e9c6080830184618ffc565b600060208284031215619aa957600080fd5b815167ffffffffffffffff811115619ac057600080fd5b8201601f81018413619ad157600080fd5b614d9f848251602084016198b1565b60008551619af2818460208a01618fd8565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619b2c816001840160208a01618fd8565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619b6a816002840160208901618fd8565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619bac816002840160208801618fd8565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619bf76040830184618ffc565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b600060208284031215619c4857600080fd5b81518015158114614e9c57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619c9081601f850160208701618fd8565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619cfd6040830184618ffc565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619d4f6040830184618ffc565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619dc6816014850160208701618fd8565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000619e0d6040830185618ffc565b8281036020840152614e988185618ffc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619e86816001850160208701618fd8565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619ecc818460208701618fd8565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619f7f81604b850160208701618fd8565b91909101604b0192915050565b600060ff821660ff8103619fa257619fa26194bc565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a009816029850160208701618fd8565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614e9c6080830184618ffc565b60006020828403121561a06f57600080fd5b815167ffffffffffffffff81111561a08657600080fd5b82016060818503121561a09857600080fd5b61a0a0619888565b81518060030b811461a0b157600080fd5b8152602082015167ffffffffffffffff81111561a0cd57600080fd5b61a0d986828501619921565b602083015250604082015167ffffffffffffffff81111561a0f957600080fd5b61a10586828501619921565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a171816021850160208701618fd8565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a35d816021850160208801618fd8565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a39a81602e840160208801618fd8565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a009816029850160208701618fd8565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a462816022850160208701618fd8565b9190910160220192915050565b81810381811115614da357614da36194bc565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a4ba81600e850160208701618fd8565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a598816018850160208801618fd8565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a5d581601c840160208801618fd8565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a6db818460208701618fd8565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a74281601c850160208701618fd8565b91909101601c0192915050565b6000600019820361a7625761a7626194bc565b5060010190565b8082028115828204841417614da357614da36194bc565b6001815b600184111561a7bb5780850481111561a79f5761a79f6194bc565b600184161561a7ad57908102905b60019390931c92800261a784565b935093915050565b60008261a7d257506001614da3565b8161a7df57506000614da3565b816001811461a7f5576002811461a7ff5761a81b565b6001915050614da3565b60ff84111561a8105761a8106194bc565b50506001821b614da3565b5060208310610133831016604e8410600b841016171561a83e575081810a614da3565b61a84b600019848461a780565b806000190482111561a85f5761a85f6194bc565b029392505050565b6000614e9c838361a7c3565b60008161a8825761a8826194bc565b506000190190565b6000835161a89c818460208801618fd8565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a8d6816001840160208801618fd8565b01600101949350505050565b8181036000831280158383131683831282161715618160576181606194bc56fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a003360a060405234801561001057600080fd5b50604051611de7380380611de783398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611dc78339815191528261014c565b50610143600080516020611dc78339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611b50610277600039600081816101d501528181610574015281816105c9015281816107e6015261083b0152611b506000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638456cb59116100ee578063a217fddf11610097578063d9caed1211610071578063d9caed12146103e0578063e609055e146103f3578063e63ab1e914610406578063eab103df1461042d57600080fd5b8063a217fddf146103a2578063d547741f146103aa578063d936547e146103bd57600080fd5b8063950837aa116100c8578063950837aa146103695780639a5904271461037c5780639b19251a1461038f57600080fd5b80638456cb591461030157806385f438c11461030957806391d148541461033057600080fd5b806336568abe116101505780635b1125911161012a5780635b112591146102d05780635c975abb146102e35780637ab697e7146102ee57600080fd5b806336568abe1461028e5780633f4ba83a146102a1578063570618e1146102a957600080fd5b8063248a9ca311610181578063248a9ca314610224578063252f07bf146102565780632f2ff15d1461027b57600080fd5b806301ffc9a7146101a8578063116191b6146101d057806321fc65f21461020f575b600080fd5b6101bb6101b636600461155e565b610440565b60405190151581526020015b60405180910390f35b6101f77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c7565b61022261021d3660046115fe565b6104d9565b005b610248610232366004611671565b6000908152600160208190526040909120015490565b6040519081526020016101c7565b6004546101bb9074010000000000000000000000000000000000000000900460ff1681565b61022261028936600461168a565b610699565b61022261029c36600461168a565b6106c5565b610222610716565b6102487f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101f7906001600160a01b031681565b60025460ff166101bb565b6102226102fc3660046116ba565b61074b565b610222610910565b6102487f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101bb61033e36600461168a565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61022261037736600461175d565b610942565b61022261038a36600461175d565b610ac0565b61022261039d36600461175d565b610b74565b610248600081565b6102226103b836600461168a565b610c2b565b6101bb6103cb36600461175d565b60036020526000908152604090205460ff1681565b6102226103ee36600461177a565b610c51565b6102226104013660046117bb565b610d49565b6102487f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61022261043b36600461185a565b610f75565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104e1610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461050b8161100e565b610513611018565b6001600160a01b03851660009081526003602052604090205460ff16610565576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105996001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086611057565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106069088908a908990899089906004016118c0565b600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161067f93929190611903565b60405180910390a3506106926001600055565b5050505050565b600082815260016020819052604090912001546106b58161100e565b6106bf83836110cb565b50505050565b6001600160a01b0381163314610707576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610711828261115e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107408161100e565b6107486111e5565b50565b610753610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461077d8161100e565b610785611018565b6001600160a01b03861660009081526003602052604090205460ff166107d7576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61080b6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087611057565b6040517fece697b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ece697b39061087a9089908b908a908a908a908a906004016119bf565b600060405180830381600087803b15801561089457600080fd5b505af11580156108a8573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640878787876040516108f59493929190611a16565b60405180910390a3506109086001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61093a8161100e565b610748611237565b600061094d8161100e565b6001600160a01b03821661098d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546109c4907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661115e565b506004546109fc907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661115e565b50610a277f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836110cb565b50610a527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a836110cb565b50600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527f086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba9060200160405180910390a15050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610aea8161100e565b6001600160a01b038216610b2a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610b9e8161100e565b6001600160a01b038216610bde576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610c478161100e565b6106bf838361115e565b610c59610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610c838161100e565b610c8b611018565b6001600160a01b03831660009081526003602052604090205460ff16610cdd576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf16001600160a01b0384168584611057565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610d3691815260200190565b60405180910390a3506107116001600055565b610d51610fcb565b610d59611018565b60045474010000000000000000000000000000000000000000900460ff16610dad576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610dff576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a42565b9050610e9a6001600160a01b038616333087611274565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f459190611a42565b610f4f9190611a5b565b8787604051610f62959493929190611a95565b60405180910390a2506109086001600055565b6000610f808161100e565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403611007576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61074881336112ad565b60025460ff1615611055576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611324565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166111565760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104d3565b5060006104d3565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16156111565760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104d3565b6111ed6113a0565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61123f611018565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861121a3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106bf9186918216906323b872dd90608401611084565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611320576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b60006113396001600160a01b038416836113dc565b9050805160001415801561135e57508080602001905181019061135c9190611ace565b155b15610711576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611317565b60025460ff16611055576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606113ea838360006113f1565b9392505050565b60608147101561142f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611317565b600080856001600160a01b0316848660405161144b9190611aeb565b60006040518083038185875af1925050503d8060008114611488576040519150601f19603f3d011682016040523d82523d6000602084013e61148d565b606091505b509150915061149d8683836114a7565b9695505050505050565b6060826114bc576114b78261151c565b6113ea565b81511580156114d357506001600160a01b0384163b155b15611515576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611317565b50806113ea565b80511561152c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561157057600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113ea57600080fd5b6001600160a01b038116811461074857600080fd5b60008083601f8401126115c757600080fd5b50813567ffffffffffffffff8111156115df57600080fd5b6020830191508360208285010111156115f757600080fd5b9250929050565b60008060008060006080868803121561161657600080fd5b8535611621816115a0565b94506020860135611631816115a0565b935060408601359250606086013567ffffffffffffffff81111561165457600080fd5b611660888289016115b5565b969995985093965092949392505050565b60006020828403121561168357600080fd5b5035919050565b6000806040838503121561169d57600080fd5b8235915060208301356116af816115a0565b809150509250929050565b60008060008060008060a087890312156116d357600080fd5b86356116de816115a0565b955060208701356116ee816115a0565b945060408701359350606087013567ffffffffffffffff81111561171157600080fd5b61171d89828a016115b5565b909450925050608087013567ffffffffffffffff81111561173d57600080fd5b87016060818a03121561174f57600080fd5b809150509295509295509295565b60006020828403121561176f57600080fd5b81356113ea816115a0565b60008060006060848603121561178f57600080fd5b833561179a816115a0565b925060208401356117aa816115a0565b929592945050506040919091013590565b600080600080600080608087890312156117d457600080fd5b863567ffffffffffffffff8111156117eb57600080fd5b6117f789828a016115b5565b909750955050602087013561180b816115a0565b935060408701359250606087013567ffffffffffffffff81111561182e57600080fd5b61183a89828a016115b5565b979a9699509497509295939492505050565b801515811461074857600080fd5b60006020828403121561186c57600080fd5b81356113ea8161184c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b03851660208201528360408201526080606082015260006118f8608083018486611877565b979650505050505050565b83815260406020820152600061191d604083018486611877565b95945050505050565b60008135611933816115a0565b6001600160a01b03168352602082810135908401526040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261197e57600080fd5b820160208101903567ffffffffffffffff81111561199b57600080fd5b8036038213156119aa57600080fd5b6060604086015261191d606086018284611877565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006119f760a083018587611877565b8281036080840152611a098185611926565b9998505050505050505050565b848152606060208201526000611a30606083018587611877565b82810360408401526118f88185611926565b600060208284031215611a5457600080fd5b5051919050565b818103818111156104d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611aa9606083018789611877565b8560208401528281036040840152611ac2818587611877565b98975050505050505050565b600060208284031215611ae057600080fd5b81516113ea8161184c565b6000825160005b81811015611b0c5760208186018101518583015201611af2565b50600092019182525091905056fea2646970667358221220a57d389b60850bdfffcd53692f80a9c416ca5b9b4d1b7d58052beba77fb7a96b64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960045534801561001657600080fd5b5060405161199338038061199383398101604081905261003591610238565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100dd60008261016c565b506101087f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361016c565b506101337f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361016c565b5061015e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261016c565b50505050505050505061028c565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166102125760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610216565b5060005b92915050565b80516001600160a01b038116811461023357600080fd5b919050565b6000806000806080858703121561024e57600080fd5b6102578561021c565b93506102656020860161021c565b92506102736040860161021c565b91506102816060860161021c565b905092959194509250565b60805160a0516116a36102f060003960008181610220015281816106d80152818161084a01528181610b6301528181610ce40152610e060152600081816101d401528181610648015281816106ab01528181610ad30152610b3601526116a36000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80636f8b44b0116100e3578063a217fddf1161008c578063d547741f11610066578063d547741f146103cf578063d5abeb01146103e2578063e63ab1e9146103eb57600080fd5b8063a217fddf1461038d578063a783c78914610395578063afd2dce4146103bc57600080fd5b806385f438c1116100bd57806385f438c11461030d57806391d1485414610334578063950837aa1461037a57600080fd5b80636f8b44b0146102df578063743e0c9b146102f25780638456cb591461030557600080fd5b80632f2ff15d116101455780635b1125911161011f5780635b112591146102a15780635c975abb146102c15780635e3e9fef146102cc57600080fd5b80632f2ff15d1461027357806336568abe146102865780633f4ba83a1461029957600080fd5b8063116191b611610176578063116191b6146101cf57806321e093b11461021b578063248a9ca31461024257600080fd5b806301ffc9a714610192578063106e6290146101ba575b600080fd5b6101a56101a03660046111c8565b610412565b60405190151581526020015b60405180910390f35b6101cd6101c836600461123a565b6104ab565b005b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b61026561025036600461126d565b60009081526002602052604090206001015490565b6040519081526020016101b1565b6101cd610281366004611286565b610550565b6101cd610294366004611286565b61057b565b6101cd6105d4565b6003546101f69073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff166101a5565b6101cd6102da3660046112fb565b610609565b6101cd6102ed36600461126d565b61079e565b6101cd61030036600461126d565b61080d565b6101cd6108b7565b6102657f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a5610342366004611286565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cd61038836600461135d565b6108e9565b610265600081565b6102657f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101cd6103ca366004611378565b610a94565b6101cd6103dd366004611286565b610c2e565b61026560045481565b6102657f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104a557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104b3610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104dd81610c96565b6104e5610ca0565b6104f0848484610cdf565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161053891815260200190565b60405180910390a25061054b6001600055565b505050565b60008281526002602052604090206001015461056b81610c96565b6105758383610e67565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146105ca576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61054b8282610f67565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fe81610c96565b610606611026565b50565b610611610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461063b81610c96565b610643610ca0565b61066e7f00000000000000000000000000000000000000000000000000000000000000008684610cdf565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610708907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611459565b600060405180830381600087803b15801561072257600080fd5b505af1158015610736573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610784939291906114b6565b60405180910390a2506107976001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c881610c96565b6107d0610ca0565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c906020015b60405180910390a15050565b610815610ca0565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156108a357600080fd5b505af1158015610797573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108e181610c96565b6106066110a3565b60006108f481610c96565b73ffffffffffffffffffffffffffffffffffffffff8216610941576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354610985907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e49073ffffffffffffffffffffffffffffffffffffffff16610f67565b506003546109ca907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb9073ffffffffffffffffffffffffffffffffffffffff16610f67565b506109f57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610e67565b50610a207f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610e67565b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f190602001610801565b610a9c610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ac681610c96565b610ace610ca0565b610af97f00000000000000000000000000000000000000000000000000000000000000008785610cdf565b6040517fece697b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ece697b390610b95907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161157d565b600060405180830381600087803b158015610baf57600080fd5b505af1158015610bc3573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac87878786604051610c1394939291906115ee565b60405180910390a250610c266001600055565b505050505050565b600082815260026020526040902060010154610c4981610c96565b6105758383610f67565b600260005403610c8f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61060681336110fc565b60015460ff1615610cdd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d71919061161a565b610d7b9084611633565b1115610db3576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610e4a57600080fd5b505af1158015610e5e573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610efd3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016104a5565b5060006104a5565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104a5565b61102e61118c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6110ab610ca0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611079565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611188576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610cdd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156111da57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461120a57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461123557600080fd5b919050565b60008060006060848603121561124f57600080fd5b61125884611211565b95602085013595506040909401359392505050565b60006020828403121561127f57600080fd5b5035919050565b6000806040838503121561129957600080fd5b823591506112a960208401611211565b90509250929050565b60008083601f8401126112c457600080fd5b50813567ffffffffffffffff8111156112dc57600080fd5b6020830191508360208285010111156112f457600080fd5b9250929050565b60008060008060006080868803121561131357600080fd5b61131c86611211565b945060208601359350604086013567ffffffffffffffff81111561133f57600080fd5b61134b888289016112b2565b96999598509660600135949350505050565b60006020828403121561136f57600080fd5b61120a82611211565b60008060008060008060a0878903121561139157600080fd5b61139a87611211565b955060208701359450604087013567ffffffffffffffff8111156113bd57600080fd5b6113c989828a016112b2565b90955093505060608701359150608087013567ffffffffffffffff8111156113f057600080fd5b87016060818a03121561140257600080fd5b809150509295509295509295565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114ab608083018486611410565b979650505050505050565b8381526040602082015260006114d0604083018486611410565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff6114f782611211565b1682526020818101359083015260006040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261153c57600080fd5b820160208101903567ffffffffffffffff81111561155957600080fd5b80360382131561156857600080fd5b606060408601526114d0606086018284611410565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a0606082015260006115cf60a083018587611410565b82810360808401526115e181856114d9565b9998505050505050505050565b848152606060208201526000611608606083018587611410565b82810360408401526114ab81856114d9565b60006020828403121561162c57600080fd5b5051919050565b808201808211156104a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206fa68043397322d1636dba3251c7e40948706562c8e08173e2df059302eb268d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d9d806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c578063a9b0a73c146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106f9565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7fcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e53382604051610210929190610a2f565b60405180910390a150565b61022361036f565b6000610230600285610b38565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610be1565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c6b565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d2e565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d4b565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610a6d83610694565b166040820152600080602084013590508060608401525060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ab957600080fd5b830160208101903567ffffffffffffffff811115610ad657600080fd5b803603821315610ae557600080fd5b606060808501528060a0850152808260c0860137600060c0828601015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509392505050565b600082610b6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b8e578181015183820152602001610b76565b50506000910152565b60008151808452610baf816020860160208601610b73565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c1660a0830186610b97565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c61578151865260209586019590910190600101610c43565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610cfe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610ce9858351610b97565b94506020938401939190910190600101610caf565b505050508281036040840152610d148186610c2f565b915050610d25606083018415159052565b95945050505050565b600060208284031215610d4057600080fd5b81516104f681610840565b60008251610d5d818460208701610b73565b919091019291505056fea264697066735822122098725982494f2e15151404f3fbfc80b0517e09c0b3e8ae0e6602ac62c5ba8d0d64736f6c634300081a0033a26469706673582212204178928ff8ecfe6f02e721f31dc1202641ecdd668a52be1716426c0bb7b1f67864736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testSexMaxSupplyFailsIfSenderIsNotTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061d5498061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063aaf7419211610104578063d509b16c116100a2578063e63ab1e911610071578063e63ab1e914610357578063fa7626d41461037e578063fdca90521461038b578063fe574f841461039357600080fd5b8063d509b16c14610337578063dcf7d0371461033f578063de1cb76c14610347578063e20c9f711461034f57600080fd5b8063b5508aa9116100de578063b5508aa914610307578063ba414fa61461030f578063c190997214610327578063ccb0e3f21461032f57600080fd5b8063aaf74192146102ef578063af298bb1146102f7578063b0464fdc146102ff57600080fd5b8063493465581161017c57806385226c811161014b57806385226c811461026957806385f438c11461027e578063916a17c6146102b3578063a783c789146102c857600080fd5b8063493465581461023c57806366d9a9a0146102445780637db20efb14610259578063828320141461026157600080fd5b80632ade3880116101b85780632ade38801461020f5780633cba0107146102245780633e5e3c231461022c5780633f7286f41461023457600080fd5b80630a9254e4146101df5780631ed7831c146101e95780632506ef0314610207575b600080fd5b6101e761039b565b005b6101f1610b80565b6040516101fe9190619a95565b60405180910390f35b6101e7610be2565b610217610e96565b6040516101fe9190619b31565b6101e7610fd8565b6101f16117af565b6101f161180f565b6101e761186f565b61024c611e4f565b6040516101fe9190619c97565b6101e7611fd1565b6101e7612270565b6102716124d0565b6040516101fe9190619d35565b6102a57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101fe565b6102bb6125a0565b6040516101fe9190619dac565b6102a57f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101e761269b565b6101e7612916565b6102bb612d60565b610271612e5b565b610317612f2b565b60405190151581526020016101fe565b6101e7612fff565b6101e761326f565b6101e7613d9c565b6101e76140ef565b6101e761472b565b6101f1614e58565b6102a57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f546103179060ff1681565b6101e7614eb8565b6101e76150b9565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580548216611234179055602680548216615678908117909155602780549092166198761790915560405181906103ff906199c2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610432573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260265460248054935191861690820152604481019390935292166064820152600091610524916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526152a9565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c00000000000000000000000000000000602082015260265460248054935194909604851695840195909552938316604483015290911660648201529192506105ca916084016104c7565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691909117909155604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c0000000000006020820152601f546023546026546024805495516101009094048716908401529085166044830152841660648201529190921660848201529192506106cf9160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e000000000000000000000000000000000000000000000000000000001790526152a9565b602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038381169190911790915560265460405163ca669fa760e01b815291166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561075a57600080fd5b505af115801561076e573d6000803e3d6000fd5b50506023546026546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152911692506315d57fd49150604401600060405180830381600087803b1580156107df57600080fd5b505af11580156107f3573d6000803e3d6000fd5b50505050604051610803906199cf565b604051809103906000f08015801561081f573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556026546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156108cb57600080fd5b505af11580156108df573d6000803e3d6000fd5b5050602480546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d93506306447d56925001600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b1580156109d357600080fd5b505af11580156109e7573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b158015610a5257600080fd5b505af1158015610a66573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ac857600080fd5b505af1158015610adc573d6000803e3d6000fd5b5050604080516060810182526023546001600160a01b039081168252600160208084019182528451908101855260008152938301849052825160288054925167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931691909316171781559093509150602990610b7a9082619f0b565b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610bd857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bba575b5050505050905090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610c7d57600080fd5b505af1158015610c91573d6000803e3d6000fd5b50506022546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610cf457600080fd5b505af1158015610d08573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015610e0257600080fd5b505af1158015610e16573d6000803e3d6000fd5b50506022546020546001600160a01b03918216935063057e0f25925016610e3e856001619ff9565b8460286040518563ffffffff1660e01b8152600401610e60949392919061a0e1565b600060405180830381600087803b158015610e7a57600080fd5b505af1158015610e8e573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610fcf57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610fb8578382906000526020600020018054610f2b90619e72565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5790619e72565b8015610fa45780601f10610f7957610100808354040283529160200191610fa4565b820191906000526020600020905b815481529060010190602001808311610f8757829003601f168201915b505050505081526020019060010190610f0c565b505050508152505081526020019060010190610eba565b50505050905090565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260235460255491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa1580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da919061a122565b90506110e78160006152c8565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c919061a122565b90506111698160006152c8565b601f546040516101009091046001600160a01b03166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611254916001600160a01b039190911690600090869060040161a13b565b600060405180830381600087803b15801561126e57600080fd5b505af1158015611282573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b5050601f54602354602554604080516101009094046001600160a01b039081168552602085018d9052928316908401521660608201527f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609250608001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561141c57600080fd5b505af1158015611430573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611475908990889061a163565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114d657600080fd5b505af11580156114ea573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061154292909116908a9089908b9060040161a17c565b600060405180830381600087803b15801561155c57600080fd5b505af1158015611570573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156115c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e7919061a122565b90506115f381886152c8565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611644573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611668919061a122565b90506116758160006152c8565b602354601f546020546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b0390811660048401529081166024830152600092169063dd62ed3e90604401602060405180830381865afa1580156116ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611711919061a122565b905061171e8160006152c8565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa158015611772573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611796919061a122565b90506117a38160006152c8565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610bd8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610bba575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610bd8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610bba575050505050905090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260235460255493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361191193921691016001600160a01b0391909116815260200190565b602060405180830381865afa15801561192e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611952919061a122565b905061195f8160006152c8565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156119b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d4919061a122565b90506119e18160006152c8565b601f546040516101009091046001600160a01b03166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611acc916001600160a01b039190911690600090869060040161a13b565b600060405180830381600087803b158015611ae657600080fd5b505af1158015611afa573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611b8c57600080fd5b505af1158015611ba0573d6000803e3d6000fd5b5050601f546040516101009091046001600160a01b031681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09250602001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611c7757600080fd5b505af1158015611c8b573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611cd0908990889061a163565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d3157600080fd5b505af1158015611d45573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611d9d92909116908a9089908b9060040161a17c565b600060405180830381600087803b158015611db757600080fd5b505af1158015611dcb573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611e1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e42919061a122565b90506115f38160006152c8565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610fcf5783829060005260206000209060020201604051806040016040529081600082018054611ea690619e72565b80601f0160208091040260200160405190810160405280929190818152602001828054611ed290619e72565b8015611f1f5780601f10611ef457610100808354040283529160200191611f1f565b820191906000526020600020905b815481529060010190602001808311611f0257829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611fb957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f665790505b50505050508152505081526020019060010190611e73565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561202f57600080fd5b505af1158015612043573d6000803e3d6000fd5b50506022546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b1580156120a657600080fd5b505af11580156120ba573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561211757600080fd5b505af115801561212b573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156121b457600080fd5b505af11580156121c8573d6000803e3d6000fd5b50506022546020546001600160a01b03918216935063106e62909250166121f0846001619ff9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260006044820152606401600060405180830381600087803b15801561225557600080fd5b505af1158015612269573d6000803e3d6000fd5b5050505050565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526024805463ca669fa760e01b84526001600160a01b03166004840152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b15801561230d57600080fd5b505af1158015612321573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612410919060040161a1b5565b600060405180830381600087803b15801561242a57600080fd5b505af115801561243e573d6000803e3d6000fd5b50506022546020546040517f057e0f250000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063057e0f259350612499929091169087908690889060289060040161a1c8565b600060405180830381600087803b1580156124b357600080fd5b505af11580156124c7573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610fcf57838290600052602060002001805461251390619e72565b80601f016020809104026020016040519081016040528092919081815260200182805461253f90619e72565b801561258c5780601f106125615761010080835404028352916020019161258c565b820191906000526020600020905b81548152906001019060200180831161256f57829003601f168201915b5050505050815260200190600101906124f4565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610fcf5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561268357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116126305790505b505050505081525050815260200190600101906125c4565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561273657600080fd5b505af115801561274a573d6000803e3d6000fd5b50506022546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b1580156127ad57600080fd5b505af11580156127c1573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561281e57600080fd5b505af1158015612832573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156128bb57600080fd5b505af11580156128cf573d6000803e3d6000fd5b50506022546020546001600160a01b039182169350635e3e9fef9250166128f7856001619ff9565b846040518463ffffffff1660e01b8152600401610e609392919061a214565b60225460408051606081019091526025808252612960926001600160a01b0316919061d4ef60208301396040805160208101909152600081526024546001600160a01b0316615347565b6022546023546025546040516370a0823160e01b81526001600160a01b03918216600482015292811692620186a09260009216906370a0823190602401602060405180830381865afa1580156129ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129de919061a122565b90506129eb8160006152c8565b6025546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612ad4916001600160a01b039190911690600090869060040161a13b565b600060405180830381600087803b158015612aee57600080fd5b505af1158015612b02573d6000803e3d6000fd5b50506040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0388166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612b9057600080fd5b505af1158015612ba4573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612c4357600080fd5b505af1158015612c57573d6000803e3d6000fd5b50506025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810188905260448101869052908816925063106e62909150606401600060405180830381600087803b158015612cc957600080fd5b505af1158015612cdd573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d54919061a122565b9050610e8e81866152c8565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610fcf5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e4357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612df05790505b50505050508152505081526020019060010190612d84565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610fcf578382906000526020600020018054612e9e90619e72565b80601f0160208091040260200160405190810160405280929190818152602001828054612eca90619e72565b8015612f175780601f10612eec57610100808354040283529160200191612f17565b820191906000526020600020905b815481529060010190602001808311612efa57829003601f168201915b505050505081526020019060010190612e7f565b60085460009060ff1615612f43575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff8919061a122565b1415905090565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260248054915163ca669fa760e01b81526001600160a01b039092166004830152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b1580156130e657600080fd5b505af11580156130fa573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506131e9919060040161a1b5565b600060405180830381600087803b15801561320357600080fd5b505af1158015613217573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350612499929091169087908690889060040161a17c565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156132d057600080fd5b505af11580156132e4573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506133cf919060040161a1b5565b600060405180830381600087803b1580156133e957600080fd5b505af11580156133fd573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561345157600080fd5b505af1158015613465573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156134c257600080fd5b505af11580156134d6573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506135c1919060040161a1b5565b600060405180830381600087803b1580156135db57600080fd5b505af11580156135ef573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561364357600080fd5b505af1158015613657573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156136b457600080fd5b505af11580156136c8573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561371c57600080fd5b505af1158015613730573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561382a57600080fd5b505af115801561383e573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b1580156138b257600080fd5b505af11580156138c6573d6000803e3d6000fd5b50506024805460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063ca669fa7925001600060405180830381600087803b15801561392257600080fd5b505af1158015613936573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561398a57600080fd5b505af115801561399e573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156139f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a15919061a122565b9050613a228160006152c8565b6025546040516001600160a01b039091166024820152604481018490526064810183905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613b09916001600160a01b039190911690600090869060040161a13b565b600060405180830381600087803b158015613b2357600080fd5b505af1158015613b37573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613bc957600080fd5b505af1158015613bdd573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c7c57600080fd5b505af1158015613c90573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e629091506064015b600060405180830381600087803b158015613d0557600080fd5b505af1158015613d19573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d90919061a122565b905061226981866152c8565b6023546025546040516370a0823160e01b81526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015613def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e13919061a122565b9050613e208160006152c8565b6025546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613f09916001600160a01b039190911690600090869060040161a13b565b600060405180830381600087803b158015613f2357600080fd5b505af1158015613f37573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613fc957600080fd5b505af1158015613fdd573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561407c57600080fd5b505af1158015614090573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401613ceb565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc51316910000000000000000000000000000000000000000000000000000000017905260235460255491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa1580156141cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f1919061a122565b90506141fe8160006152c8565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561424f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614273919061a122565b90506142808160006152c8565b601f546040516101009091046001600160a01b03166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161436b916001600160a01b039190911690600090869060040161a13b565b600060405180830381600087803b15801561438557600080fd5b505af1158015614399573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561442b57600080fd5b505af115801561443f573d6000803e3d6000fd5b5050601f547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60925061010090046001600160a01b0316905061448260028961a24d565b602354602554604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561454a57600080fd5b505af115801561455e573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d91506145a3908990889061a163565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561460457600080fd5b505af1158015614618573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061467092909116908a9089908b9060040161a17c565b600060405180830381600087803b15801561468a57600080fd5b505af115801561469e573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156146f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614715919061a122565b90506115f38161472660028a61a24d565b6152c8565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526023546020546370a0823160e01b84526001600160a01b0390811660048501529193506000929116906370a0823190602401602060405180830381865afa1580156147c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147e5919061a122565b90506147f28160006152c8565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614843573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614867919061a122565b601f54604080516001600160a01b036101009093048316602482015260448101899052606480820189905282518083039091018152608490910182526020810180517f1e458bee000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba39261494992911690600090869060040161a13b565b600060405180830381600087803b15801561496357600080fd5b505af1158015614977573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614a0957600080fd5b505af1158015614a1d573d6000803e3d6000fd5b505050507f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e601f60019054906101000a90046001600160a01b03166028604051614a6892919061a288565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614b0257600080fd5b505af1158015614b16573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143690614b64908a90899060289061a2aa565b60405180910390a36022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614bfa57600080fd5b505af1158015614c0e573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c9150614c56908990889060289061a2aa565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614cb757600080fd5b505af1158015614ccb573d6000803e3d6000fd5b50506022546020546040517f057e0f250000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063057e0f259350614d2692909116908a9089908b9060289060040161a1c8565b600060405180830381600087803b158015614d4057600080fd5b505af1158015614d54573d6000803e3d6000fd5b50506023546020546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dcb919061a122565b9050614dd781886152c8565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e4c919061a122565b905061167581856152c8565b60606015805480602002602001604051908101604052809291908181526020018280548015610bd8576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610bba575050505050905090565b6024805460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b158015614f1057600080fd5b505af1158015614f24573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615013919060040161a1b5565b600060405180830381600087803b15801561502d57600080fd5b505af1158015615041573d6000803e3d6000fd5b50506022546040517f6f8b44b000000000000000000000000000000000000000000000000000000000815261271060048201526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b1580156150a557600080fd5b505af1158015610b7a573d6000803e3d6000fd5b6024805460405163ca669fa760e01b81526001600160a01b039091166004820152620186a091600091737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b15801561511957600080fd5b505af115801561512d573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061521c919060040161a1b5565b600060405180830381600087803b15801561523657600080fd5b505af115801561524a573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401610e60565b60006152b36199dc565b6152be84848361535c565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561533357600080fd5b505afa158015610e8e573d6000803e3d6000fd5b61534f6199dc565b61226985858584866153d7565b60008061536985846154d7565b90506153cc6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016153b792919061a2d5565b604051602081830303815290604052856154e3565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b15801561544957600080fd5b505af192505050801561545a575060015b61546f5761546a87878787615511565b6124c7565b61547b87878787615511565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156154b657600080fd5b505af11580156154ca573d6000803e3d6000fd5b5050505050505050505050565b60006153d0838361552a565b60c081015151600090156155075761550084848460c00151615545565b90506153d0565b61550084846156eb565b600061551d84836157d6565b90506122698582856157e2565b60006155368383615bac565b6153d0838360200151846154e3565b600080615550615bbc565b9050600061555e8683615c8f565b905060006155758260600151836020015185616135565b9050600061558583838989616347565b90506000615592826171c4565b602081015181519192509060030b15615605578982604001516040516020016155bc92919061a2f7565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526155fc9160040161a1b5565b60405180910390fd5b60006156486040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617393565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061569b90849060040161a1b5565b602060405180830381865afa1580156156b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156dc919061a378565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061574090879060040161a1b5565b600060405180830381865afa15801561575d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615785919081019061a45a565b905060006157b3828560405160200161579f92919061a48f565b604051602081830303815290604052617593565b90506001600160a01b0381166152be5784846040516020016155bc92919061a4be565b600061553683836175a6565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa15801561587e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906158a2919061a122565b905080615a495760006158b4866175b2565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061593f905b604080518082018252600080825260209182015281518083019092528451825280850190820152906176aa565b8061594b575060008451115b156159ce576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef28690615997908890889060040161a2d5565b600060405180830381600087803b1580156159b157600080fd5b505af11580156159c5573d6000803e3d6000fd5b50505050615a43565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b158015615a2a57600080fd5b505af1158015615a3e573d6000803e3d6000fd5b505050505b50612269565b806000615a55826175b2565b604080518082018252600581527f352e302e3000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ab790615912565b80615ac3575060008551115b15615b48576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90615b11908a908a908a9060040161a569565b600060405180830381600087803b158015615b2b57600080fd5b505af1158015615b3f573d6000803e3d6000fd5b505050506124c7565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b1580156154b657600080fd5b615bb8828260006176be565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90615c4390849060040161a59a565b600060405180830381865afa158015615c60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615c88919081019061a5e1565b9250505090565b615cc16040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050615d0c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b615d15856177c1565b60208201526000615d2586617ba6565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615d67573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d8f919081019061a5e1565b86838560200151604051602001615da9949392919061a62a565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190615e0190859060040161a1b5565b600060405180830381865afa158015615e1e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e46919081019061a5e1565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615e8e90849060040161a72e565b602060405180830381865afa158015615eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615ecf919061a780565b615ee457816040516020016155bc919061a7a2565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615f2990849060040161a834565b600060405180830381865afa158015615f46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615f6e919081019061a5e1565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615fb590849060040161a886565b602060405180830381865afa158015615fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615ff6919061a780565b1561608b576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061604090849060040161a886565b600060405180830381865afa15801561605d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616085919081019061a5e1565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016160b0919061a8d8565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016160dc92919061a944565b600060405180830381865afa1580156160f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616121919081019061a5e1565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816161515790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106161b1576161b161a969565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106162055761620561a969565b602002602001018190525084604051602001616221919061a998565b604051602081830303815290604052816002815181106162435761624361a969565b60200260200101819052508260405160200161625f919061aa04565b604051602081830303815290604052816003815181106162815761628161a969565b60200260200101819052506000616297826171c4565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506163289060408051808201825260008082526020918201528151808301909252845182528085019082015290617e29565b61633d57856040516020016155bc919061aa45565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616397565b511590565b61650b57826020015115616453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016155fc565b8260c001511561650b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016155fc565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161652457905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061657f9061aad6565b935060ff16815181106165945761659461a969565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016165e5919061aaf5565b6040516020818303038152906040528282806166009061aad6565b935060ff16815181106166155761661561a969565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806166629061aad6565b935060ff16815181106166775761667761a969565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806166c49061aad6565b935060ff16815181106166d9576166d961a969565b602002602001018190525087602001518282806166f59061aad6565b935060ff168151811061670a5761670a61a969565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806167579061aad6565b935060ff168151811061676c5761676c61a969565b6020908102919091010152875182826167848161aad6565b935060ff16815181106167995761679961a969565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806167e69061aad6565b935060ff16815181106167fb576167fb61a969565b602002602001018190525061680f46617e8a565b828261681a8161aad6565b935060ff168151811061682f5761682f61a969565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061687c9061aad6565b935060ff16815181106168915761689161a969565b6020026020010181905250868282806168a99061aad6565b935060ff16815181106168be576168be61a969565b60209081029190910101528551156169e55760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261690f8161aad6565b935060ff16815181106169245761692461a969565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061697490899060040161a1b5565b600060405180830381865afa158015616991573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169b9919081019061a5e1565b82826169c48161aad6565b935060ff16815181106169d9576169d961a969565b60200260200101819052505b846020015115616ab55760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282616a2e8161aad6565b935060ff1681518110616a4357616a4361a969565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280616a909061aad6565b935060ff1681518110616aa557616aa561a969565b6020026020010181905250616c7c565b616aed6163928660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b616b805760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282616b308161aad6565b935060ff1681518110616b4557616b4561a969565b60200260200101819052508460a00151604051602001616b65919061a998565b604051602081830303815290604052828280616a909061aad6565b8460c00151158015616bc3575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152616bc190511590565b155b15616c7c5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282616c078161aad6565b935060ff1681518110616c1c57616c1c61a969565b6020026020010181905250616c3088617f2a565b604051602001616c40919061a998565b604051602081830303815290604052828280616c5b9061aad6565b935060ff1681518110616c7057616c7061a969565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152616cb090511590565b616d455760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282616cf38161aad6565b935060ff1681518110616d0857616d0861a969565b60200260200101819052508460400151828280616d249061aad6565b935060ff1681518110616d3957616d3961a969565b60200260200101819052505b606085015115616e665760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282616d8e8161aad6565b935060ff1681518110616da357616da361a969565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616e12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616e3a919081019061a5e1565b8282616e458161aad6565b935060ff1681518110616e5a57616e5a61a969565b60200260200101819052505b60e08501515115616f0d5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616eb08161aad6565b935060ff1681518110616ec557616ec561a969565b6020026020010181905250616ee18560e0015160000151617e8a565b8282616eec8161aad6565b935060ff1681518110616f0157616f0161a969565b60200260200101819052505b60e08501516020015115616fb75760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616f5a8161aad6565b935060ff1681518110616f6f57616f6f61a969565b6020026020010181905250616f8b8560e0015160200151617e8a565b8282616f968161aad6565b935060ff1681518110616fab57616fab61a969565b60200260200101819052505b60e085015160400151156170615760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826170048161aad6565b935060ff16815181106170195761701961a969565b60200260200101819052506170358560e0015160400151617e8a565b82826170408161aad6565b935060ff16815181106170555761705561a969565b60200260200101819052505b60e0850151606001511561710b5760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826170ae8161aad6565b935060ff16815181106170c3576170c361a969565b60200260200101819052506170df8560e0015160600151617e8a565b82826170ea8161aad6565b935060ff16815181106170ff576170ff61a969565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561712957617129619e43565b60405190808252806020026020018201604052801561715c57816020015b60608152602001906001900390816171475790505b50905060005b8260ff168160ff1610156171b557838160ff16815181106171855761718561a969565b6020026020010151828260ff16815181106171a2576171a261a969565b6020908102919091010152600101617162565b5093505050505b949350505050565b6171eb6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916172719186910161ab60565b600060405180830381865afa15801561728e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526172b6919081019061a5e1565b905060006172c48683618a19565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016172f49190619d35565b6000604051808303816000875af1158015617313573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261733b919081019061aba7565b805190915060030b158015906173545750602081015151155b80156173635750604081015151155b1561633d578160008151811061737b5761737b61a969565b60200260200101516040516020016155bc919061ac5d565b606060006173c88560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506173ff9082905b90618b6e565b1561755c57600061747c82617476846174706174428a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618b95565b90618bf7565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506174e0908290618b6e565b1561754a57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617547905b8290618c7c565b90505b61755381618ca2565b925050506153d0565b82156175755784846040516020016155bc92919061ae49565b50506040805160208101909152600081526153d0565b509392505050565b6000808251602084016000f09392505050565b615bb8828260016176be565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691617627919061aef0565b600060405180830381855afa9150503d8060008114617662576040519150601f19603f3d011682016040523d82523d6000602084013e617667565b606091505b509150915081801561767a575060208151115b1561769357808060200190518101906171bc919061a5e1565b505060408051602081019091526000815292915050565b60006176b68383618d0b565b159392505050565b8160a00151156176cd57505050565b60006176da848484618de6565b905060006176e7826171c4565b602081015181519192509060030b1580156177835750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617783906040805180820182526000808252602091820152815180830190925284518252808501908201526173f9565b1561779057505050505050565b604082015151156177b05781604001516040516020016155bc919061af0c565b806040516020016155bc919061af6a565b606060006177f68360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061785b905b8290617e29565b156178ca57604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526153d0906178c5908390619381565b618ca2565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261792c905b829061940b565b6001036179f957604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261799290617540565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526153d0906178c5905b8390618c7c565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a5890617854565b15617b8f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617ac09083906194a5565b905060008160018351617ad3919061afd5565b81518110617ae357617ae361a969565b60200260200101519050617b866178c5617b596040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290619381565b95945050505050565b826040516020016155bc919061afe8565b50919050565b60606000617bdb8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617c3d90617854565b15617c4b576153d081618ca2565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617caa90617925565b600103617d1457604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526153d0906178c5906179f2565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d7390617854565b15617b8f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617ddb9083906194a5565b9050600181511115617e17578060028251617df6919061afd5565b81518110617e0657617e0661a969565b602002602001015192505050919050565b50826040516020016155bc919061afe8565b805182516000911115617e3e575060006152c2565b81518351602085015160009291617e5491619ff9565b617e5e919061afd5565b905082602001518103617e755760019150506152c2565b82516020840151819020912014905092915050565b60606000617e978361954a565b600101905060008167ffffffffffffffff811115617eb757617eb7619e43565b6040519080825280601f01601f191660200182016040528015617ee1576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617eeb57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617fb6905b82906176aa565b15617ff657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261805590617faf565b1561809557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180f490617faf565b1561813457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261819390617faf565b806181f85750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526181f890617faf565b1561823857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261829790617faf565b806182fc5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182fc90617faf565b1561833c57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261839b90617faf565b806184005750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261840090617faf565b1561844057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261849f90617faf565b806185045750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261850490617faf565b1561854457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185a390617faf565b156185e357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261864290617faf565b1561868257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526186e190617faf565b1561872157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261878090617faf565b156187c057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261881f90617faf565b1561885f57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188be90617faf565b806189235750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261892390617faf565b1561896357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189c290617faf565b15618a0257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516155bc929060200161b0c6565b60608060005b8451811015618aa45781858281518110618a3b57618a3b61a969565b6020026020010151604051602001618a5492919061a48f565b604051602081830303815290604052915060018551618a73919061afd5565b8114618a9c5781604051602001618a8a919061b22f565b60405160208183030381529060405291505b600101618a1f565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081618abd5790505090508381600081518110618ae857618ae861a969565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110618b3c57618b3c61a969565b60200260200101819052508181600281518110618b5b57618b5b61a969565b6020908102919091010152949350505050565b6020808301518351835192840151600093618b8c929184919061962c565b14159392505050565b60408051808201909152600080825260208201526000618bc7846000015185602001518560000151866020015161973d565b9050836020015181618bd9919061afd5565b84518590618be890839061afd5565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015618c1c5750816152c2565b6020808301519084015160019114618c435750815160208481015190840151829020919020145b8015618c7457825184518590618c5a90839061afd5565b9052508251602085018051618c70908390619ff9565b9052505b509192915050565b6040805180820190915260008082526020820152618c9b83838361985d565b5092915050565b60606000826000015167ffffffffffffffff811115618cc357618cc3619e43565b6040519080825280601f01601f191660200182016040528015618ced576020820181803683370190505b5090506000602082019050618c9b8185602001518660000151619908565b8151815160009190811115618d1e575081515b6020808501519084015160005b83811015618dd75782518251808214618da7576000196020871015618d8657600184618d5889602061afd5565b618d629190619ff9565b618d6d90600861b270565b618d7890600261b36e565b618d82919061afd5565b1990505b8181168382168181039114618da45797506152c29650505050505050565b50505b618db2602086619ff9565b9450618dbf602085619ff9565b93505050602081618dd09190619ff9565b9050618d2b565b508451865161633d919061b37a565b60606000618df2615bbc565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081618e0f57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618e6a9061aad6565b935060ff1681518110618e7f57618e7f61a969565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618ed0919061b39a565b604051602081830303815290604052828280618eeb9061aad6565b935060ff1681518110618f0057618f0061a969565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618f4d9061aad6565b935060ff1681518110618f6257618f6261a969565b602002602001018190525082604051602001618f7e919061aa04565b604051602081830303815290604052828280618f999061aad6565b935060ff1681518110618fae57618fae61a969565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618ffb9061aad6565b935060ff16815181106190105761901061a969565b60200260200101819052506190258784619982565b82826190308161aad6565b935060ff16815181106190455761904561a969565b6020908102919091010152855151156190f15760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826190978161aad6565b935060ff16815181106190ac576190ac61a969565b60200260200101819052506190c5866000015184619982565b82826190d08161aad6565b935060ff16815181106190e5576190e561a969565b60200260200101819052505b85608001511561915f5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261913a8161aad6565b935060ff168151811061914f5761914f61a969565b60200260200101819052506191c5565b84156191c55760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826191a48161aad6565b935060ff16815181106191b9576191b961a969565b60200260200101819052505b604086015151156192615760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261920f8161aad6565b935060ff16815181106192245761922461a969565b602002602001018190525085604001518282806192409061aad6565b935060ff16815181106192555761925561a969565b60200260200101819052505b8560600151156192cb5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826192aa8161aad6565b935060ff16815181106192bf576192bf61a969565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156192e9576192e9619e43565b60405190808252806020026020018201604052801561931c57816020015b60608152602001906001900390816193075790505b50905060005b8260ff168160ff16101561937557838160ff16815181106193455761934561a969565b6020026020010151828260ff16815181106193625761936261a969565b6020908102919091010152600101619322565b50979650505050505050565b60408051808201909152600080825260208201528151835110156193a65750816152c2565b815183516020850151600092916193bc91619ff9565b6193c6919061afd5565b602084015190915060019082146193e7575082516020840151819020908220145b8015619402578351855186906193fe90839061afd5565b9052505b50929392505050565b600080826000015161942f856000015186602001518660000151876020015161973d565b6194399190619ff9565b90505b8351602085015161944d9190619ff9565b8111618c9b578161945d8161b3df565b9250508260000151619494856020015183619478919061afd5565b8651619484919061afd5565b838660000151876020015161973d565b61949e9190619ff9565b905061943c565b606060006194b3848461940b565b6194be906001619ff9565b67ffffffffffffffff8111156194d6576194d6619e43565b60405190808252806020026020018201604052801561950957816020015b60608152602001906001900390816194f45790505b50905060005b815181101561758b576195256178c58686618c7c565b8282815181106195375761953761a969565b602090810291909101015260010161950f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619593577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106195bf576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106195dd57662386f26fc10000830492506010015b6305f5e10083106195f5576305f5e100830492506008015b612710831061960957612710830492506004015b6064831061961b576064830492506002015b600a83106152c25760010192915050565b60008085841161973357602084116196df576000841561967757600161965386602061afd5565b61965e90600861b270565b61966990600261b36e565b619673919061afd5565b1990505b83518116856196868989619ff9565b619690919061afd5565b805190935082165b8181146196ca578784116196b257879450505050506171bc565b836196bc8161b3f9565b945050828451169050619698565b6196d48785619ff9565b9450505050506171bc565b8383206196ec858861afd5565b6196f69087619ff9565b91505b8582106197315784822080820361971e576197148684619ff9565b93505050506171bc565b61972960018461afd5565b9250506196f9565b505b5092949350505050565b6000838186851161984857602085116197f7576000851561978957600161976587602061afd5565b61977090600861b270565b61977b90600261b36e565b619785919061afd5565b1990505b8451811660008761979a8b8b619ff9565b6197a4919061afd5565b855190915083165b8281146197e9578186106197d1576197c48b8b619ff9565b96505050505050506171bc565b856197db8161b3df565b9650508386511690506197ac565b8596505050505050506171bc565b508383206000905b619809868961afd5565b82116198465785832080820361982557839450505050506171bc565b619830600185619ff9565b935050818061983e9061b3df565b9250506197ff565b505b6198528787619ff9565b979650505050505050565b6040805180820190915260008082526020820152600061988f856000015186602001518660000151876020015161973d565b6020808701805191860191909152519091506198ab908261afd5565b8352845160208601516198be9190619ff9565b81036198cd57600085526198ff565b835183516198db9190619ff9565b855186906198ea90839061afd5565b90525083516198f99082619ff9565b60208601525b50909392505050565b60208110619940578151835261991f602084619ff9565b925061992c602083619ff9565b915061993960208261afd5565b9050619908565b600019811561996f57600161995683602061afd5565b6199629061010061b36e565b61996c919061afd5565b90505b9151835183169219169190911790915250565b606060006199908484615c8f565b80516020808301516040519394506199aa9390910161b410565b60405160208183030381529060405291505092915050565b6112a68061b46983390190565b610de08061c70f83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001619a1f619a24565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001619a1f6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015619ad65783516001600160a01b0316835260209384019390920191600101619aaf565b509095945050505050565b60005b83811015619afc578181015183820152602001619ae4565b50506000910152565b60008151808452619b1d816020860160208601619ae1565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619c2d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015619c13577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352619bfd848651619b05565b6020958601959094509290920191600101619bc3565b509197505050602094850194929092019150600101619b59565b50929695505050505050565b600081518084526020840193506020830160005b82811015619c8d5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101619c4d565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619c2d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752619d036040880182619b05565b9050602082015191508681036020880152619d1e8183619c39565b965050506020938401939190910190600101619cbf565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619c2d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619d97858351619b05565b94506020938401939190910190600101619d5d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619c2d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152619e2d6040870182619c39565b9550506020938401939190910190600101619dd4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c90821680619e8657607f821691505b602082108103617ba0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115619f0657806000526020600020601f840160051c81016020851015619ee65750805b601f840160051c820191505b818110156122695760008155600101619ef2565b505050565b815167ffffffffffffffff811115619f2557619f25619e43565b619f3981619f338454619e72565b84619ebf565b6020601f821160018114619f6d5760008315619f555750848201515b600019600385901b1c1916600184901b178455612269565b600084815260208120601f198516915b82811015619f9d5787850151825560209485019460019092019101619f7d565b5084821015619fbb5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156152c2576152c2619fca565b600081546001600160a01b038116845267ffffffffffffffff8160a01c1660208501525060018201606060408501526000815461a04881619e72565b806060880152600182166000811461a067576001811461a0a15761a0d5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b890101935061a0d5565b84600052602060002060005b8381101561a0cc5781548a82016080015260019091019060200161a0ad565b89016080019450505b50919695505050505050565b6001600160a01b038516815283602082015260a06040820152600061a10960a0830185619b05565b600060608401528281036080840152619852818561a00c565b60006020828403121561a13457600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000617b866060830184619b05565b8281526040602082015260006171bc6040830184619b05565b6001600160a01b038516815283602082015260806040820152600061a1a46080830185619b05565b905082606083015295945050505050565b6020815260006153d06020830184619b05565b6001600160a01b038616815284602082015260a06040820152600061a1f060a0830186619b05565b846060840152828103608084015261a208818561a00c565b98975050505050505050565b6001600160a01b038416815282602082015260806040820152600061a23c6080830184619b05565b905060006060830152949350505050565b60008261a283577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006171bc604083018461a00c565b83815260606020820152600061a2c36060830185619b05565b828103604084015261633d818561a00c565b6001600160a01b03831681526040602082015260006171bc6040830184619b05565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a32f81601a850160208801619ae1565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a36c81601c840160208801619ae1565b01601c01949350505050565b60006020828403121561a38a57600080fd5b81516001600160a01b03811681146153d057600080fd5b6040516060810167ffffffffffffffff8111828210171561a3c45761a3c4619e43565b60405290565b60008067ffffffffffffffff84111561a3e55761a3e5619e43565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a4145761a414619e43565b60405283815290508082840185101561a42c57600080fd5b61758b846020830185619ae1565b600082601f83011261a44b57600080fd5b6153d08383516020850161a3ca565b60006020828403121561a46c57600080fd5b815167ffffffffffffffff81111561a48357600080fd5b6152be8482850161a43a565b6000835161a4a1818460208801619ae1565b83519083019061a4b5818360208801619ae1565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a4f681601a850160208801619ae1565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a533816033840160208801619ae1565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b0383166020820152606060408201526000617b866060830184619b05565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006153d06080830184619b05565b60006020828403121561a5f357600080fd5b815167ffffffffffffffff81111561a60a57600080fd5b8201601f8101841361a61b57600080fd5b6152be8482516020840161a3ca565b6000855161a63c818460208a01619ae1565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a676816001840160208a01619ae1565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a6b4816002840160208901619ae1565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a6f6816002840160208801619ae1565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a7416040830184619b05565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b60006020828403121561a79257600080fd5b815180151581146153d057600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a7da81601f850160208701619ae1565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a8476040830184619b05565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a8996040830184619b05565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a910816014850160208701619ae1565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061a9576040830185619b05565b82810360208401526153cc8185619b05565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a9d0816001850160208701619ae1565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161aa16818460208701619ae1565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161aac981604b850160208701619ae1565b91909101604b0192915050565b600060ff821660ff810361aaec5761aaec619fca565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161ab53816029850160208701619ae1565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006153d06080830184619b05565b60006020828403121561abb957600080fd5b815167ffffffffffffffff81111561abd057600080fd5b82016060818503121561abe257600080fd5b61abea61a3a1565b81518060030b811461abfb57600080fd5b8152602082015167ffffffffffffffff81111561ac1757600080fd5b61ac238682850161a43a565b602083015250604082015167ffffffffffffffff81111561ac4357600080fd5b61ac4f8682850161a43a565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161acbb816021850160208701619ae1565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161aea7816021850160208801619ae1565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161aee481602e840160208801619ae1565b01602e01949350505050565b6000825161af02818460208701619ae1565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161ab53816029850160208701619ae1565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161afc8816022850160208701619ae1565b9190910160220192915050565b818103818111156152c2576152c2619fca565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b02081600e850160208701619ae1565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b0fe816018850160208801619ae1565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b13b81601c840160208801619ae1565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161b241818460208701619ae1565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b80820281158282048414176152c2576152c2619fca565b6001815b600184111561b2c25780850481111561b2a65761b2a6619fca565b600184161561b2b457908102905b60019390931c92800261b28b565b935093915050565b60008261b2d9575060016152c2565b8161b2e6575060006152c2565b816001811461b2fc576002811461b3065761b322565b60019150506152c2565b60ff84111561b3175761b317619fca565b50506001821b6152c2565b5060208310610133831016604e8410600b841016171561b345575081810a6152c2565b61b352600019848461b287565b806000190482111561b3665761b366619fca565b029392505050565b60006153d0838361b2ca565b8181036000831280158383131683831282161715618c9b57618c9b619fca565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b3d281601c850160208701619ae1565b91909101601c0192915050565b6000600019820361b3f25761b3f2619fca565b5060010190565b60008161b4085761b408619fca565b506000190190565b6000835161b422818460208801619ae1565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161b45c816001840160208801619ae1565b0160010194935050505056fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610dbc806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c578063660b9de01461008c5780636ed70169146100ac57005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6100a73660046106f9565b6101aa565b3480156100b857600080fd5b5061006a6101e6565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e33826040516101db929190610a78565b60405180910390a150565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61022361036f565b6000610230600285610b57565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610c00565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c8a565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d4d565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d6a565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610ab683610694565b1660408201526000602083013567ffffffffffffffff8116808214610ada57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610b1657600080fd5b830160208101903567ffffffffffffffff811115610b3357600080fd5b803603821315610b4257600080fd5b606060808501526105b660a085018284610a2f565b600082610b8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610bad578181015183820152602001610b95565b50506000910152565b60008151808452610bce816020860160208601610b92565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c3560a0830186610bb6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c80578151865260209586019590910190600101610c62565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610d1d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610d08858351610bb6565b94506020938401939190910190600101610cce565b505050508281036040840152610d338186610c4e565b915050610d44606083018415159052565b95945050505050565b600060208284031215610d5f57600080fd5b81516104f681610840565b60008251610d7c818460208701610b92565b919091019291505056fea2646970667358221220084d92a79207d5024a4431b52d5d0038017908edb40aae1ce1d94a5ec3de914064736f6c634300081a00335a657461436f6e6e6563746f724e6f6e4e617469766555706772616465546573742e736f6ca2646970667358221220678e64ea7f6ea37937d76fb0b9b1266ae3bfbdac52416bd66f336ebfc4862feb64736f6c634300081a0033", } // ZetaConnectorNonNativeTestABI is the input ABI used to generate the binding from. @@ -743,6 +743,27 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) return _ZetaConnectorNonNativeTest.Contract.TestSexMaxSupplyFailsIfSenderIsNotTss(&_ZetaConnectorNonNativeTest.TransactOpts) } +// TestUpgradeAndWithdraw is a paid mutator transaction binding the contract method 0xaf298bb1. +// +// Solidity: function testUpgradeAndWithdraw() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactor) TestUpgradeAndWithdraw(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.contract.Transact(opts, "testUpgradeAndWithdraw") +} + +// TestUpgradeAndWithdraw is a paid mutator transaction binding the contract method 0xaf298bb1. +// +// Solidity: function testUpgradeAndWithdraw() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TestUpgradeAndWithdraw() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestUpgradeAndWithdraw(&_ZetaConnectorNonNativeTest.TransactOpts) +} + +// TestUpgradeAndWithdraw is a paid mutator transaction binding the contract method 0xaf298bb1. +// +// Solidity: function testUpgradeAndWithdraw() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) TestUpgradeAndWithdraw() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestUpgradeAndWithdraw(&_ZetaConnectorNonNativeTest.TransactOpts) +} + // TestWithdraw is a paid mutator transaction binding the contract method 0xd509b16c. // // Solidity: function testWithdraw() returns() @@ -2228,9 +2249,9 @@ type ZetaConnectorNonNativeTestReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*ZetaConnectorNonNativeTestReceivedRevertIterator, error) { logs, sub, err := _ZetaConnectorNonNativeTest.contract.FilterLogs(opts, "ReceivedRevert") @@ -2240,9 +2261,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterRec return &ZetaConnectorNonNativeTestReceivedRevertIterator{contract: _ZetaConnectorNonNativeTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeTestReceivedRevert) (event.Subscription, error) { logs, sub, err := _ZetaConnectorNonNativeTest.contract.WatchLogs(opts, "ReceivedRevert") @@ -2277,9 +2298,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchRece }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0xcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e5. +// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. // -// Solidity: event ReceivedRevert(address sender, (address,uint256,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) ParseReceivedRevert(log types.Log) (*ZetaConnectorNonNativeTestReceivedRevert, error) { event := new(ZetaConnectorNonNativeTestReceivedRevert) if err := _ZetaConnectorNonNativeTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { @@ -2366,9 +2387,9 @@ type ZetaConnectorNonNativeTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ZetaConnectorNonNativeTestRevertedIterator, error) { var toRule []interface{} @@ -2387,9 +2408,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterRev return &ZetaConnectorNonNativeTestRevertedIterator{contract: _ZetaConnectorNonNativeTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2433,9 +2454,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchReve }), nil } -// ParseReverted is a log parse operation binding the contract event 0xbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c. +// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) ParseReverted(log types.Log) (*ZetaConnectorNonNativeTestReverted, error) { event := new(ZetaConnectorNonNativeTestReverted) if err := _ZetaConnectorNonNativeTest.contract.UnpackLog(event, "Reverted", log); err != nil { @@ -2514,13 +2535,14 @@ func (it *ZetaConnectorNonNativeTestUpdatedGatewayTSSAddressIterator) Close() er // ZetaConnectorNonNativeTestUpdatedGatewayTSSAddress represents a UpdatedGatewayTSSAddress event raised by the ZetaConnectorNonNativeTest contract. type ZetaConnectorNonNativeTestUpdatedGatewayTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// FilterUpdatedGatewayTSSAddress is a free log retrieval operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterUpdatedGatewayTSSAddress(opts *bind.FilterOpts) (*ZetaConnectorNonNativeTestUpdatedGatewayTSSAddressIterator, error) { logs, sub, err := _ZetaConnectorNonNativeTest.contract.FilterLogs(opts, "UpdatedGatewayTSSAddress") @@ -2530,9 +2552,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterUpd return &ZetaConnectorNonNativeTestUpdatedGatewayTSSAddressIterator{contract: _ZetaConnectorNonNativeTest.contract, event: "UpdatedGatewayTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// WatchUpdatedGatewayTSSAddress is a free log subscription operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchUpdatedGatewayTSSAddress(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeTestUpdatedGatewayTSSAddress) (event.Subscription, error) { logs, sub, err := _ZetaConnectorNonNativeTest.contract.WatchLogs(opts, "UpdatedGatewayTSSAddress") @@ -2567,9 +2589,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchUpda }), nil } -// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a05. +// ParseUpdatedGatewayTSSAddress is a log parse operation binding the contract event 0x3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579. // -// Solidity: event UpdatedGatewayTSSAddress(address newTSSAddress) +// Solidity: event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) ParseUpdatedGatewayTSSAddress(log types.Log) (*ZetaConnectorNonNativeTestUpdatedGatewayTSSAddress, error) { event := new(ZetaConnectorNonNativeTestUpdatedGatewayTSSAddress) if err := _ZetaConnectorNonNativeTest.contract.UnpackLog(event, "UpdatedGatewayTSSAddress", log); err != nil { @@ -2648,13 +2670,14 @@ func (it *ZetaConnectorNonNativeTestUpdatedZetaConnectorTSSAddressIterator) Clos // ZetaConnectorNonNativeTestUpdatedZetaConnectorTSSAddress represents a UpdatedZetaConnectorTSSAddress event raised by the ZetaConnectorNonNativeTest contract. type ZetaConnectorNonNativeTestUpdatedZetaConnectorTSSAddress struct { + OldTSSAddress common.Address NewTSSAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterUpdatedZetaConnectorTSSAddress is a free log retrieval operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// FilterUpdatedZetaConnectorTSSAddress is a free log retrieval operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterUpdatedZetaConnectorTSSAddress(opts *bind.FilterOpts) (*ZetaConnectorNonNativeTestUpdatedZetaConnectorTSSAddressIterator, error) { logs, sub, err := _ZetaConnectorNonNativeTest.contract.FilterLogs(opts, "UpdatedZetaConnectorTSSAddress") @@ -2664,9 +2687,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterUpd return &ZetaConnectorNonNativeTestUpdatedZetaConnectorTSSAddressIterator{contract: _ZetaConnectorNonNativeTest.contract, event: "UpdatedZetaConnectorTSSAddress", logs: logs, sub: sub}, nil } -// WatchUpdatedZetaConnectorTSSAddress is a free log subscription operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// WatchUpdatedZetaConnectorTSSAddress is a free log subscription operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchUpdatedZetaConnectorTSSAddress(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeTestUpdatedZetaConnectorTSSAddress) (event.Subscription, error) { logs, sub, err := _ZetaConnectorNonNativeTest.contract.WatchLogs(opts, "UpdatedZetaConnectorTSSAddress") @@ -2701,9 +2724,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchUpda }), nil } -// ParseUpdatedZetaConnectorTSSAddress is a log parse operation binding the contract event 0xa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f1. +// ParseUpdatedZetaConnectorTSSAddress is a log parse operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. // -// Solidity: event UpdatedZetaConnectorTSSAddress(address newTSSAddress) +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) ParseUpdatedZetaConnectorTSSAddress(log types.Log) (*ZetaConnectorNonNativeTestUpdatedZetaConnectorTSSAddress, error) { event := new(ZetaConnectorNonNativeTestUpdatedZetaConnectorTSSAddress) if err := _ZetaConnectorNonNativeTest.contract.UnpackLog(event, "UpdatedZetaConnectorTSSAddress", log); err != nil { @@ -3080,9 +3103,9 @@ type ZetaConnectorNonNativeTestWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNonNativeTestWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -3097,9 +3120,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterWit return &ZetaConnectorNonNativeTestWithdrawnAndRevertedIterator{contract: _ZetaConnectorNonNativeTest.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeTestWithdrawnAndReverted, to []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -3139,9 +3162,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchWith }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint256,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) ParseWithdrawnAndReverted(log types.Log) (*ZetaConnectorNonNativeTestWithdrawnAndReverted, error) { event := new(ZetaConnectorNonNativeTestWithdrawnAndReverted) if err := _ZetaConnectorNonNativeTest.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { @@ -3151,6 +3174,151 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) ParseWith return event, nil } +// ZetaConnectorNonNativeTestWithdrawnV2Iterator is returned from FilterWithdrawnV2 and is used to iterate over the raw logs and unpacked data for WithdrawnV2 events raised by the ZetaConnectorNonNativeTest contract. +type ZetaConnectorNonNativeTestWithdrawnV2Iterator struct { + Event *ZetaConnectorNonNativeTestWithdrawnV2 // 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 *ZetaConnectorNonNativeTestWithdrawnV2Iterator) 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(ZetaConnectorNonNativeTestWithdrawnV2) + 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(ZetaConnectorNonNativeTestWithdrawnV2) + 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 *ZetaConnectorNonNativeTestWithdrawnV2Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeTestWithdrawnV2Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeTestWithdrawnV2 represents a WithdrawnV2 event raised by the ZetaConnectorNonNativeTest contract. +type ZetaConnectorNonNativeTestWithdrawnV2 struct { + To common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnV2 is a free log retrieval operation binding the contract event 0x3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9. +// +// Solidity: event WithdrawnV2(address indexed to, uint256 amount) +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterWithdrawnV2(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNonNativeTestWithdrawnV2Iterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNonNativeTest.contract.FilterLogs(opts, "WithdrawnV2", toRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeTestWithdrawnV2Iterator{contract: _ZetaConnectorNonNativeTest.contract, event: "WithdrawnV2", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnV2 is a free log subscription operation binding the contract event 0x3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9. +// +// Solidity: event WithdrawnV2(address indexed to, uint256 amount) +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchWithdrawnV2(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeTestWithdrawnV2, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNonNativeTest.contract.WatchLogs(opts, "WithdrawnV2", 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(ZetaConnectorNonNativeTestWithdrawnV2) + if err := _ZetaConnectorNonNativeTest.contract.UnpackLog(event, "WithdrawnV2", 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 +} + +// ParseWithdrawnV2 is a log parse operation binding the contract event 0x3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9. +// +// Solidity: event WithdrawnV2(address indexed to, uint256 amount) +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) ParseWithdrawnV2(log types.Log) (*ZetaConnectorNonNativeTestWithdrawnV2, error) { + event := new(ZetaConnectorNonNativeTestWithdrawnV2) + if err := _ZetaConnectorNonNativeTest.contract.UnpackLog(event, "WithdrawnV2", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ZetaConnectorNonNativeTestLogIterator is returned from FilterLog and is used to iterate over the raw logs and unpacked data for Log events raised by the ZetaConnectorNonNativeTest contract. type ZetaConnectorNonNativeTestLogIterator struct { Event *ZetaConnectorNonNativeTestLog // Event containing the contract specifics and raw log diff --git a/v2/pkg/zetaconnectornonnativeupgradetest.sol/zetaconnectornonnativeupgradetest.go b/v2/pkg/zetaconnectornonnativeupgradetest.sol/zetaconnectornonnativeupgradetest.go new file mode 100644 index 000000000..d22eddd61 --- /dev/null +++ b/v2/pkg/zetaconnectornonnativeupgradetest.sol/zetaconnectornonnativeupgradetest.go @@ -0,0 +1,2801 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package zetaconnectornonnativeupgradetest + +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 + _ = abi.ConvertType +) + +// RevertContext is an auto generated low-level Go binding around an user-defined struct. +type RevertContext struct { + Asset common.Address + Amount uint64 + RevertMessage []byte +} + +// ZetaConnectorNonNativeUpgradeTestMetaData contains all meta data concerning the ZetaConnectorNonNativeUpgradeTest contract. +var ZetaConnectorNonNativeUpgradeTestMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxSupply\",\"inputs\":[{\"name\":\"maxSupply_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxSupplyUpdated\",\"inputs\":[{\"name\":\"maxSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052348015601357600080fd5b5060805161251761003d6000396000818161145701528181611480015261165601526125176000f3fe6080604052600436106101ac5760003560e01c80635e3e9fef116100ec578063a217fddf1161008a578063d547741f11610064578063d547741f1461057e578063d5abeb011461059e578063e63ab1e9146105b4578063f8c8765e146105e857600080fd5b8063a217fddf146104df578063a783c789146104f4578063ad3cb1cc1461052857600080fd5b80638456cb59116100c65780638456cb591461041157806385f438c11461042657806391d148541461045a578063950837aa146104bf57600080fd5b80635e3e9fef146103b15780636f8b44b0146103d1578063743e0c9b146103f157600080fd5b80632f2ff15d116101595780634f1ef286116101335780634f1ef2861461033257806352d1902d146103455780635b1125911461035a5780635c975abb1461037a57600080fd5b80632f2ff15d146102dd57806336568abe146102fd5780633f4ba83a1461031d57600080fd5b8063116191b61161018a578063116191b61461022857806321e093b114610260578063248a9ca31461028057600080fd5b806301ffc9a7146101b1578063057e0f25146101e6578063106e629014610208575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611e67565b610608565b60405190151581526020015b60405180910390f35b3480156101f257600080fd5b50610206610201366004611f0e565b6106a1565b005b34801561021457600080fd5b50610206610223366004611fa6565b6107f4565b34801561023457600080fd5b50600054610248906001600160a01b031681565b6040516001600160a01b0390911681526020016101dd565b34801561026c57600080fd5b50600154610248906001600160a01b031681565b34801561028c57600080fd5b506102cf61029b366004611fd9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101dd565b3480156102e957600080fd5b506102066102f8366004611ff2565b6108ab565b34801561030957600080fd5b50610206610318366004611ff2565b6108f5565b34801561032957600080fd5b50610206610941565b61020661034036600461204d565b610976565b34801561035157600080fd5b506102cf610995565b34801561036657600080fd5b50600254610248906001600160a01b031681565b34801561038657600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101d1565b3480156103bd57600080fd5b506102066103cc366004612154565b6109c4565b3480156103dd57600080fd5b506102066103ec366004611fd9565b610b12565b3480156103fd57600080fd5b5061020661040c366004611fd9565b610b80565b34801561041d57600080fd5b50610206610c01565b34801561043257600080fd5b506102cf7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561046657600080fd5b506101d1610475366004611ff2565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb57600080fd5b506102066104da3660046121b6565b610c33565b3480156104eb57600080fd5b506102cf600081565b34801561050057600080fd5b506102cf7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561053457600080fd5b506105716040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101dd91906121f5565b34801561058a57600080fd5b50610206610599366004611ff2565b610dc6565b3480156105aa57600080fd5b506102cf60035481565b3480156105c057600080fd5b506102cf7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105f457600080fd5b50610206610603366004612246565b610e0a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061069b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6106a9610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106d381611036565b6106db611040565b6000546106f2906001600160a01b0316878561109e565b6000546001546040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263d0b492c392610749929116908b908b908b908b908a90600401612392565b600060405180830381600087803b15801561076357600080fd5b505af1158015610777573d6000803e3d6000fd5b50505050866001600160a01b03167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516107ba94939291906123e9565b60405180910390a2506107ec60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6107fc610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461082681611036565b61082e611040565b61083984848461109e565b836001600160a01b03167f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee98460405161087491815260200190565b60405180910390a2506108a660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546108e581611036565b6108ef838361120b565b50505050565b6001600160a01b0381163314610937576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108a682826112f8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61096b81611036565b6109736113bc565b50565b61097e61144c565b6109878261151c565b6109918282611527565b5050565b600061099f61164b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6109cc610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109f681611036565b6109fe611040565b600054610a15906001600160a01b0316868461109e565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab5992610a6a929116908a908a908a908a90600401612420565b600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610ad993929190612458565b60405180910390a250610b0b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b3c81611036565b610b44611040565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610b88611040565b6001546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610bed57600080fd5b505af1158015610b0b573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c2b81611036565b6109736116ad565b6000610c3e81611036565b6001600160a01b038216610c7e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610cb5907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166112f8565b50600254610ced907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166112f8565b50610d187f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361120b565b50610d437f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361120b565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e0081611036565b6108ef83836112f8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610eb7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f185784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610f2489898989611726565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003558315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611030576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109738133611a31565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561109c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600354600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612472565b611122908461248b565b111561115a576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f1e458bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526044820184905290911690631e458bee90606401600060405180830381600087803b1580156111c857600080fd5b505af11580156111dc573d6000803e3d6000fd5b50505050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166112ee576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112a43390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061069b565b600091505061069b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156112ee576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061069b565b6113c4611abe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114e557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114d97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061099181611036565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561159f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261159c91810190612472565b60015b6115e5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611641576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016115dc565b6108a68383611b19565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b5611040565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361142e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117715750825b905060008267ffffffffffffffff16600114801561178e5750303b155b90508115801561179c575080155b156117d3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118345784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061185157506001600160a01b038816155b8061186357506001600160a01b038716155b8061187557506001600160a01b038616155b156118ac576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118b4611b6f565b6118bc611b77565b6118c4611b6f565b6118cc611b87565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b1691909216179055611927908761120b565b506119527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48861120b565b5061197d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8861120b565b506119a87f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761120b565b506119d37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8861120b565b508315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610fa1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610991576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016115dc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661109c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b2282611b97565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b67576108a68282611c3f565b610991611cb5565b61109c611ced565b611b7f611ced565b61109c611d54565b611b8f611ced565b61109c611d5c565b806001600160a01b03163b600003611be6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016115dc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611c5c91906124c5565b600060405180830381855af49150503d8060008114611c97576040519150601f19603f3d011682016040523d82523d6000602084013e611c9c565b606091505b5091509150611cac858383611dad565b95945050505050565b341561109c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661109c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111e5611ced565b611d64611ced565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606082611dc257611dbd82611e25565b611e1e565b8151158015611dd957506001600160a01b0384163b155b15611e1b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016115dc565b50805b9392505050565b805115611e355780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611e7957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611e1e57600080fd5b80356001600160a01b0381168114611ec057600080fd5b919050565b60008083601f840112611ed757600080fd5b50813567ffffffffffffffff811115611eef57600080fd5b602083019150836020828501011115611f0757600080fd5b9250929050565b60008060008060008060a08789031215611f2757600080fd5b611f3087611ea9565b955060208701359450604087013567ffffffffffffffff811115611f5357600080fd5b611f5f89828a01611ec5565b90955093505060608701359150608087013567ffffffffffffffff811115611f8657600080fd5b87016060818a031215611f9857600080fd5b809150509295509295509295565b600080600060608486031215611fbb57600080fd5b611fc484611ea9565b95602085013595506040909401359392505050565b600060208284031215611feb57600080fd5b5035919050565b6000806040838503121561200557600080fd5b8235915061201560208401611ea9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561206057600080fd5b61206983611ea9565b9150602083013567ffffffffffffffff81111561208557600080fd5b8301601f8101851361209657600080fd5b803567ffffffffffffffff8111156120b0576120b061201e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561211c5761211c61201e565b60405281815282820160200187101561213457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561216c57600080fd5b61217586611ea9565b945060208601359350604086013567ffffffffffffffff81111561219857600080fd5b6121a488828901611ec5565b96999598509660600135949350505050565b6000602082840312156121c857600080fd5b611e1e82611ea9565b60005b838110156121ec5781810151838201526020016121d4565b50506000910152565b60208152600082518060208401526122148160408501602087016121d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561225c57600080fd5b61226585611ea9565b935061227360208601611ea9565b925061228160408601611ea9565b915061228f60608601611ea9565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b036122f482611ea9565b1682526000602082013567ffffffffffffffff811680821461231557600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261235157600080fd5b820160208101903567ffffffffffffffff81111561236e57600080fd5b80360382131561237d57600080fd5b60606040860152611cac60608601828461229a565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006123ca60a08301858761229a565b82810360808401526123dc81856122e3565b9998505050505050505050565b84815260606020820152600061240360608301858761229a565b828103604084015261241581856122e3565b979650505050505050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061241560808301848661229a565b838152604060208201526000611cac60408301848661229a565b60006020828403121561248457600080fd5b5051919050565b8082018082111561069b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082516124d78184602087016121d1565b919091019291505056fea2646970667358221220eb5f504ed403a8398e7050b33437ff957a84b998c9ce21be698308cae4eb131c64736f6c634300081a0033", +} + +// ZetaConnectorNonNativeUpgradeTestABI is the input ABI used to generate the binding from. +// Deprecated: Use ZetaConnectorNonNativeUpgradeTestMetaData.ABI instead. +var ZetaConnectorNonNativeUpgradeTestABI = ZetaConnectorNonNativeUpgradeTestMetaData.ABI + +// ZetaConnectorNonNativeUpgradeTestBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ZetaConnectorNonNativeUpgradeTestMetaData.Bin instead. +var ZetaConnectorNonNativeUpgradeTestBin = ZetaConnectorNonNativeUpgradeTestMetaData.Bin + +// DeployZetaConnectorNonNativeUpgradeTest deploys a new Ethereum contract, binding an instance of ZetaConnectorNonNativeUpgradeTest to it. +func DeployZetaConnectorNonNativeUpgradeTest(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ZetaConnectorNonNativeUpgradeTest, error) { + parsed, err := ZetaConnectorNonNativeUpgradeTestMetaData.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(ZetaConnectorNonNativeUpgradeTestBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ZetaConnectorNonNativeUpgradeTest{ZetaConnectorNonNativeUpgradeTestCaller: ZetaConnectorNonNativeUpgradeTestCaller{contract: contract}, ZetaConnectorNonNativeUpgradeTestTransactor: ZetaConnectorNonNativeUpgradeTestTransactor{contract: contract}, ZetaConnectorNonNativeUpgradeTestFilterer: ZetaConnectorNonNativeUpgradeTestFilterer{contract: contract}}, nil +} + +// ZetaConnectorNonNativeUpgradeTest is an auto generated Go binding around an Ethereum contract. +type ZetaConnectorNonNativeUpgradeTest struct { + ZetaConnectorNonNativeUpgradeTestCaller // Read-only binding to the contract + ZetaConnectorNonNativeUpgradeTestTransactor // Write-only binding to the contract + ZetaConnectorNonNativeUpgradeTestFilterer // Log filterer for contract events +} + +// ZetaConnectorNonNativeUpgradeTestCaller is an auto generated read-only Go binding around an Ethereum contract. +type ZetaConnectorNonNativeUpgradeTestCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZetaConnectorNonNativeUpgradeTestTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ZetaConnectorNonNativeUpgradeTestTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZetaConnectorNonNativeUpgradeTestFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ZetaConnectorNonNativeUpgradeTestFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZetaConnectorNonNativeUpgradeTestSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ZetaConnectorNonNativeUpgradeTestSession struct { + Contract *ZetaConnectorNonNativeUpgradeTest // 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 +} + +// ZetaConnectorNonNativeUpgradeTestCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ZetaConnectorNonNativeUpgradeTestCallerSession struct { + Contract *ZetaConnectorNonNativeUpgradeTestCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ZetaConnectorNonNativeUpgradeTestTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ZetaConnectorNonNativeUpgradeTestTransactorSession struct { + Contract *ZetaConnectorNonNativeUpgradeTestTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ZetaConnectorNonNativeUpgradeTestRaw is an auto generated low-level Go binding around an Ethereum contract. +type ZetaConnectorNonNativeUpgradeTestRaw struct { + Contract *ZetaConnectorNonNativeUpgradeTest // Generic contract binding to access the raw methods on +} + +// ZetaConnectorNonNativeUpgradeTestCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ZetaConnectorNonNativeUpgradeTestCallerRaw struct { + Contract *ZetaConnectorNonNativeUpgradeTestCaller // Generic read-only contract binding to access the raw methods on +} + +// ZetaConnectorNonNativeUpgradeTestTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ZetaConnectorNonNativeUpgradeTestTransactorRaw struct { + Contract *ZetaConnectorNonNativeUpgradeTestTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewZetaConnectorNonNativeUpgradeTest creates a new instance of ZetaConnectorNonNativeUpgradeTest, bound to a specific deployed contract. +func NewZetaConnectorNonNativeUpgradeTest(address common.Address, backend bind.ContractBackend) (*ZetaConnectorNonNativeUpgradeTest, error) { + contract, err := bindZetaConnectorNonNativeUpgradeTest(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTest{ZetaConnectorNonNativeUpgradeTestCaller: ZetaConnectorNonNativeUpgradeTestCaller{contract: contract}, ZetaConnectorNonNativeUpgradeTestTransactor: ZetaConnectorNonNativeUpgradeTestTransactor{contract: contract}, ZetaConnectorNonNativeUpgradeTestFilterer: ZetaConnectorNonNativeUpgradeTestFilterer{contract: contract}}, nil +} + +// NewZetaConnectorNonNativeUpgradeTestCaller creates a new read-only instance of ZetaConnectorNonNativeUpgradeTest, bound to a specific deployed contract. +func NewZetaConnectorNonNativeUpgradeTestCaller(address common.Address, caller bind.ContractCaller) (*ZetaConnectorNonNativeUpgradeTestCaller, error) { + contract, err := bindZetaConnectorNonNativeUpgradeTest(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestCaller{contract: contract}, nil +} + +// NewZetaConnectorNonNativeUpgradeTestTransactor creates a new write-only instance of ZetaConnectorNonNativeUpgradeTest, bound to a specific deployed contract. +func NewZetaConnectorNonNativeUpgradeTestTransactor(address common.Address, transactor bind.ContractTransactor) (*ZetaConnectorNonNativeUpgradeTestTransactor, error) { + contract, err := bindZetaConnectorNonNativeUpgradeTest(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestTransactor{contract: contract}, nil +} + +// NewZetaConnectorNonNativeUpgradeTestFilterer creates a new log filterer instance of ZetaConnectorNonNativeUpgradeTest, bound to a specific deployed contract. +func NewZetaConnectorNonNativeUpgradeTestFilterer(address common.Address, filterer bind.ContractFilterer) (*ZetaConnectorNonNativeUpgradeTestFilterer, error) { + contract, err := bindZetaConnectorNonNativeUpgradeTest(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestFilterer{contract: contract}, nil +} + +// bindZetaConnectorNonNativeUpgradeTest binds a generic wrapper to an already deployed contract. +func bindZetaConnectorNonNativeUpgradeTest(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ZetaConnectorNonNativeUpgradeTestMetaData.GetAbi() + 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 (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ZetaConnectorNonNativeUpgradeTest.Contract.ZetaConnectorNonNativeUpgradeTestCaller.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 (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.ZetaConnectorNonNativeUpgradeTestTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.ZetaConnectorNonNativeUpgradeTestTransactor.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 (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ZetaConnectorNonNativeUpgradeTest.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 (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.contract.Transact(opts, method, params...) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNonNativeUpgradeTest.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) DEFAULTADMINROLE() ([32]byte, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.DEFAULTADMINROLE(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.DEFAULTADMINROLE(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNonNativeUpgradeTest.contract.Call(opts, &out, "PAUSER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) PAUSERROLE() ([32]byte, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.PAUSERROLE(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerSession) PAUSERROLE() ([32]byte, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.PAUSERROLE(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCaller) TSSROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNonNativeUpgradeTest.contract.Call(opts, &out, "TSS_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) TSSROLE() ([32]byte, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.TSSROLE(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// TSSROLE is a free data retrieval call binding the contract method 0xa783c789. +// +// Solidity: function TSS_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerSession) TSSROLE() ([32]byte, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.TSSROLE(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ZetaConnectorNonNativeUpgradeTest.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.UPGRADEINTERFACEVERSION(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerSession) UPGRADEINTERFACEVERSION() (string, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.UPGRADEINTERFACEVERSION(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCaller) WITHDRAWERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNonNativeUpgradeTest.contract.Call(opts, &out, "WITHDRAWER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) WITHDRAWERROLE() ([32]byte, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.WITHDRAWERROLE(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// WITHDRAWERROLE is a free data retrieval call binding the contract method 0x85f438c1. +// +// Solidity: function WITHDRAWER_ROLE() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerSession) WITHDRAWERROLE() ([32]byte, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.WITHDRAWERROLE(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// Gateway is a free data retrieval call binding the contract method 0x116191b6. +// +// Solidity: function gateway() view returns(address) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCaller) Gateway(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZetaConnectorNonNativeUpgradeTest.contract.Call(opts, &out, "gateway") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Gateway is a free data retrieval call binding the contract method 0x116191b6. +// +// Solidity: function gateway() view returns(address) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) Gateway() (common.Address, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.Gateway(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// Gateway is a free data retrieval call binding the contract method 0x116191b6. +// +// Solidity: function gateway() view returns(address) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerSession) Gateway() (common.Address, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.Gateway(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNonNativeUpgradeTest.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.GetRoleAdmin(&_ZetaConnectorNonNativeUpgradeTest.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.GetRoleAdmin(&_ZetaConnectorNonNativeUpgradeTest.CallOpts, role) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _ZetaConnectorNonNativeUpgradeTest.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.HasRole(&_ZetaConnectorNonNativeUpgradeTest.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.HasRole(&_ZetaConnectorNonNativeUpgradeTest.CallOpts, role, account) +} + +// MaxSupply is a free data retrieval call binding the contract method 0xd5abeb01. +// +// Solidity: function maxSupply() view returns(uint256) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCaller) MaxSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZetaConnectorNonNativeUpgradeTest.contract.Call(opts, &out, "maxSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MaxSupply is a free data retrieval call binding the contract method 0xd5abeb01. +// +// Solidity: function maxSupply() view returns(uint256) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) MaxSupply() (*big.Int, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.MaxSupply(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// MaxSupply is a free data retrieval call binding the contract method 0xd5abeb01. +// +// Solidity: function maxSupply() view returns(uint256) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerSession) MaxSupply() (*big.Int, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.MaxSupply(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ZetaConnectorNonNativeUpgradeTest.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 (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) Paused() (bool, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.Paused(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerSession) Paused() (bool, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.Paused(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZetaConnectorNonNativeUpgradeTest.contract.Call(opts, &out, "proxiableUUID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) ProxiableUUID() ([32]byte, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.ProxiableUUID(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerSession) ProxiableUUID() ([32]byte, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.ProxiableUUID(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _ZetaConnectorNonNativeUpgradeTest.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.SupportsInterface(&_ZetaConnectorNonNativeUpgradeTest.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.SupportsInterface(&_ZetaConnectorNonNativeUpgradeTest.CallOpts, interfaceId) +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCaller) TssAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZetaConnectorNonNativeUpgradeTest.contract.Call(opts, &out, "tssAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) TssAddress() (common.Address, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.TssAddress(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerSession) TssAddress() (common.Address, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.TssAddress(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. +// +// Solidity: function zetaToken() view returns(address) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCaller) ZetaToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZetaConnectorNonNativeUpgradeTest.contract.Call(opts, &out, "zetaToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. +// +// Solidity: function zetaToken() view returns(address) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) ZetaToken() (common.Address, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.ZetaToken(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. +// +// Solidity: function zetaToken() view returns(address) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestCallerSession) ZetaToken() (common.Address, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.ZetaToken(&_ZetaConnectorNonNativeUpgradeTest.CallOpts) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.GrantRole(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.GrantRole(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, role, account) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) Initialize(opts *bind.TransactOpts, gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "initialize", gateway_, zetaToken_, tssAddress_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) Initialize(gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.Initialize(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, gateway_, zetaToken_, tssAddress_, admin_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address gateway_, address zetaToken_, address tssAddress_, address admin_) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) Initialize(gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.Initialize(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, gateway_, zetaToken_, tssAddress_, admin_) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) Pause() (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.Pause(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) Pause() (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.Pause(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts) +} + +// ReceiveTokens is a paid mutator transaction binding the contract method 0x743e0c9b. +// +// Solidity: function receiveTokens(uint256 amount) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) ReceiveTokens(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "receiveTokens", amount) +} + +// ReceiveTokens is a paid mutator transaction binding the contract method 0x743e0c9b. +// +// Solidity: function receiveTokens(uint256 amount) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) ReceiveTokens(amount *big.Int) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.ReceiveTokens(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, amount) +} + +// ReceiveTokens is a paid mutator transaction binding the contract method 0x743e0c9b. +// +// Solidity: function receiveTokens(uint256 amount) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) ReceiveTokens(amount *big.Int) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.ReceiveTokens(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, amount) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "renounceRole", role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.RenounceRole(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.RenounceRole(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, role, callerConfirmation) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.RevokeRole(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.RevokeRole(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, role, account) +} + +// SetMaxSupply is a paid mutator transaction binding the contract method 0x6f8b44b0. +// +// Solidity: function setMaxSupply(uint256 maxSupply_) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) SetMaxSupply(opts *bind.TransactOpts, maxSupply_ *big.Int) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "setMaxSupply", maxSupply_) +} + +// SetMaxSupply is a paid mutator transaction binding the contract method 0x6f8b44b0. +// +// Solidity: function setMaxSupply(uint256 maxSupply_) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) SetMaxSupply(maxSupply_ *big.Int) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.SetMaxSupply(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, maxSupply_) +} + +// SetMaxSupply is a paid mutator transaction binding the contract method 0x6f8b44b0. +// +// Solidity: function setMaxSupply(uint256 maxSupply_) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) SetMaxSupply(maxSupply_ *big.Int) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.SetMaxSupply(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, maxSupply_) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) Unpause() (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.Unpause(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) Unpause() (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.Unpause(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts) +} + +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) UpdateTSSAddress(opts *bind.TransactOpts, newTSSAddress common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "updateTSSAddress", newTSSAddress) +} + +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) UpdateTSSAddress(newTSSAddress common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.UpdateTSSAddress(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, newTSSAddress) +} + +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) UpdateTSSAddress(newTSSAddress common.Address) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.UpdateTSSAddress(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, newTSSAddress) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.UpgradeToAndCall(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.UpgradeToAndCall(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, newImplementation, data) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x106e6290. +// +// Solidity: function withdraw(address to, uint256 amount, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) Withdraw(opts *bind.TransactOpts, to common.Address, amount *big.Int, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "withdraw", to, amount, internalSendHash) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x106e6290. +// +// Solidity: function withdraw(address to, uint256 amount, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) Withdraw(to common.Address, amount *big.Int, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.Withdraw(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, to, amount, internalSendHash) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x106e6290. +// +// Solidity: function withdraw(address to, uint256 amount, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) Withdraw(to common.Address, amount *big.Int, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.Withdraw(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, to, amount, internalSendHash) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// +// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) WithdrawAndCall(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "withdrawAndCall", to, amount, data, internalSendHash) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// +// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) WithdrawAndCall(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.WithdrawAndCall(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, to, amount, data, internalSendHash) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// +// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) WithdrawAndCall(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.WithdrawAndCall(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, to, amount, data, internalSendHash) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "withdrawAndRevert", to, amount, data, internalSendHash, revertContext) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.WithdrawAndRevert(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, to, amount, data, internalSendHash, revertContext) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.WithdrawAndRevert(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, to, amount, data, internalSendHash, revertContext) +} + +// ZetaConnectorNonNativeUpgradeTestInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestInitializedIterator struct { + Event *ZetaConnectorNonNativeUpgradeTestInitialized // 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 *ZetaConnectorNonNativeUpgradeTestInitializedIterator) 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(ZetaConnectorNonNativeUpgradeTestInitialized) + 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(ZetaConnectorNonNativeUpgradeTestInitialized) + 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 *ZetaConnectorNonNativeUpgradeTestInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeUpgradeTestInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeUpgradeTestInitialized represents a Initialized event raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) FilterInitialized(opts *bind.FilterOpts) (*ZetaConnectorNonNativeUpgradeTestInitializedIterator, error) { + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestInitializedIterator{contract: _ZetaConnectorNonNativeUpgradeTest.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpgradeTestInitialized) (event.Subscription, error) { + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.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(ZetaConnectorNonNativeUpgradeTestInitialized) + if err := _ZetaConnectorNonNativeUpgradeTest.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 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) ParseInitialized(log types.Log) (*ZetaConnectorNonNativeUpgradeTestInitialized, error) { + event := new(ZetaConnectorNonNativeUpgradeTestInitialized) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdatedIterator is returned from FilterMaxSupplyUpdated and is used to iterate over the raw logs and unpacked data for MaxSupplyUpdated events raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdatedIterator struct { + Event *ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdated // 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 *ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdatedIterator) 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(ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdated) + 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(ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdated) + 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 *ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdated represents a MaxSupplyUpdated event raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdated struct { + MaxSupply *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMaxSupplyUpdated is a free log retrieval operation binding the contract event 0x7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c. +// +// Solidity: event MaxSupplyUpdated(uint256 maxSupply) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) FilterMaxSupplyUpdated(opts *bind.FilterOpts) (*ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdatedIterator, error) { + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.FilterLogs(opts, "MaxSupplyUpdated") + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdatedIterator{contract: _ZetaConnectorNonNativeUpgradeTest.contract, event: "MaxSupplyUpdated", logs: logs, sub: sub}, nil +} + +// WatchMaxSupplyUpdated is a free log subscription operation binding the contract event 0x7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c. +// +// Solidity: event MaxSupplyUpdated(uint256 maxSupply) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) WatchMaxSupplyUpdated(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdated) (event.Subscription, error) { + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.WatchLogs(opts, "MaxSupplyUpdated") + 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(ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdated) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "MaxSupplyUpdated", 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 +} + +// ParseMaxSupplyUpdated is a log parse operation binding the contract event 0x7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c. +// +// Solidity: event MaxSupplyUpdated(uint256 maxSupply) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) ParseMaxSupplyUpdated(log types.Log) (*ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdated, error) { + event := new(ZetaConnectorNonNativeUpgradeTestMaxSupplyUpdated) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "MaxSupplyUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNonNativeUpgradeTestPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestPausedIterator struct { + Event *ZetaConnectorNonNativeUpgradeTestPaused // 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 *ZetaConnectorNonNativeUpgradeTestPausedIterator) 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(ZetaConnectorNonNativeUpgradeTestPaused) + 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(ZetaConnectorNonNativeUpgradeTestPaused) + 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 *ZetaConnectorNonNativeUpgradeTestPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeUpgradeTestPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeUpgradeTestPaused represents a Paused event raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestPaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) FilterPaused(opts *bind.FilterOpts) (*ZetaConnectorNonNativeUpgradeTestPausedIterator, error) { + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestPausedIterator{contract: _ZetaConnectorNonNativeUpgradeTest.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpgradeTestPaused) (event.Subscription, error) { + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.WatchLogs(opts, "Paused") + 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(ZetaConnectorNonNativeUpgradeTestPaused) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "Paused", 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 +} + +// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) ParsePaused(log types.Log) (*ZetaConnectorNonNativeUpgradeTestPaused, error) { + event := new(ZetaConnectorNonNativeUpgradeTestPaused) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNonNativeUpgradeTestRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestRoleAdminChangedIterator struct { + Event *ZetaConnectorNonNativeUpgradeTestRoleAdminChanged // 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 *ZetaConnectorNonNativeUpgradeTestRoleAdminChangedIterator) 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(ZetaConnectorNonNativeUpgradeTestRoleAdminChanged) + 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(ZetaConnectorNonNativeUpgradeTestRoleAdminChanged) + 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 *ZetaConnectorNonNativeUpgradeTestRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeUpgradeTestRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeUpgradeTestRoleAdminChanged represents a RoleAdminChanged event raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*ZetaConnectorNonNativeUpgradeTestRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestRoleAdminChangedIterator{contract: _ZetaConnectorNonNativeUpgradeTest.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpgradeTestRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(ZetaConnectorNonNativeUpgradeTestRoleAdminChanged) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "RoleAdminChanged", 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 +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) ParseRoleAdminChanged(log types.Log) (*ZetaConnectorNonNativeUpgradeTestRoleAdminChanged, error) { + event := new(ZetaConnectorNonNativeUpgradeTestRoleAdminChanged) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNonNativeUpgradeTestRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestRoleGrantedIterator struct { + Event *ZetaConnectorNonNativeUpgradeTestRoleGranted // 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 *ZetaConnectorNonNativeUpgradeTestRoleGrantedIterator) 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(ZetaConnectorNonNativeUpgradeTestRoleGranted) + 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(ZetaConnectorNonNativeUpgradeTestRoleGranted) + 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 *ZetaConnectorNonNativeUpgradeTestRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeUpgradeTestRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeUpgradeTestRoleGranted represents a RoleGranted event raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ZetaConnectorNonNativeUpgradeTestRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestRoleGrantedIterator{contract: _ZetaConnectorNonNativeUpgradeTest.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpgradeTestRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + 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(ZetaConnectorNonNativeUpgradeTestRoleGranted) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "RoleGranted", 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 +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) ParseRoleGranted(log types.Log) (*ZetaConnectorNonNativeUpgradeTestRoleGranted, error) { + event := new(ZetaConnectorNonNativeUpgradeTestRoleGranted) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNonNativeUpgradeTestRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestRoleRevokedIterator struct { + Event *ZetaConnectorNonNativeUpgradeTestRoleRevoked // 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 *ZetaConnectorNonNativeUpgradeTestRoleRevokedIterator) 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(ZetaConnectorNonNativeUpgradeTestRoleRevoked) + 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(ZetaConnectorNonNativeUpgradeTestRoleRevoked) + 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 *ZetaConnectorNonNativeUpgradeTestRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeUpgradeTestRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeUpgradeTestRoleRevoked represents a RoleRevoked event raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ZetaConnectorNonNativeUpgradeTestRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestRoleRevokedIterator{contract: _ZetaConnectorNonNativeUpgradeTest.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpgradeTestRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + 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(ZetaConnectorNonNativeUpgradeTestRoleRevoked) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "RoleRevoked", 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 +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) ParseRoleRevoked(log types.Log) (*ZetaConnectorNonNativeUpgradeTestRoleRevoked, error) { + event := new(ZetaConnectorNonNativeUpgradeTestRoleRevoked) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNonNativeUpgradeTestUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestUnpausedIterator struct { + Event *ZetaConnectorNonNativeUpgradeTestUnpaused // 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 *ZetaConnectorNonNativeUpgradeTestUnpausedIterator) 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(ZetaConnectorNonNativeUpgradeTestUnpaused) + 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(ZetaConnectorNonNativeUpgradeTestUnpaused) + 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 *ZetaConnectorNonNativeUpgradeTestUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeUpgradeTestUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeUpgradeTestUnpaused represents a Unpaused event raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestUnpaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) FilterUnpaused(opts *bind.FilterOpts) (*ZetaConnectorNonNativeUpgradeTestUnpausedIterator, error) { + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestUnpausedIterator{contract: _ZetaConnectorNonNativeUpgradeTest.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpgradeTestUnpaused) (event.Subscription, error) { + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.WatchLogs(opts, "Unpaused") + 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(ZetaConnectorNonNativeUpgradeTestUnpaused) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "Unpaused", 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 +} + +// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) ParseUnpaused(log types.Log) (*ZetaConnectorNonNativeUpgradeTestUnpaused, error) { + event := new(ZetaConnectorNonNativeUpgradeTestUnpaused) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddressIterator is returned from FilterUpdatedZetaConnectorTSSAddress and is used to iterate over the raw logs and unpacked data for UpdatedZetaConnectorTSSAddress events raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddressIterator struct { + Event *ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddress // 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 *ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddressIterator) 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(ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddress) + 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(ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddress) + 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 *ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddressIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddressIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddress represents a UpdatedZetaConnectorTSSAddress event raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddress struct { + OldTSSAddress common.Address + NewTSSAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedZetaConnectorTSSAddress is a free log retrieval operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. +// +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) FilterUpdatedZetaConnectorTSSAddress(opts *bind.FilterOpts) (*ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddressIterator, error) { + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.FilterLogs(opts, "UpdatedZetaConnectorTSSAddress") + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddressIterator{contract: _ZetaConnectorNonNativeUpgradeTest.contract, event: "UpdatedZetaConnectorTSSAddress", logs: logs, sub: sub}, nil +} + +// WatchUpdatedZetaConnectorTSSAddress is a free log subscription operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. +// +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) WatchUpdatedZetaConnectorTSSAddress(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddress) (event.Subscription, error) { + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.WatchLogs(opts, "UpdatedZetaConnectorTSSAddress") + 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(ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddress) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "UpdatedZetaConnectorTSSAddress", 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 +} + +// ParseUpdatedZetaConnectorTSSAddress is a log parse operation binding the contract event 0x33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e. +// +// Solidity: event UpdatedZetaConnectorTSSAddress(address oldTSSAddress, address newTSSAddress) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) ParseUpdatedZetaConnectorTSSAddress(log types.Log) (*ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddress, error) { + event := new(ZetaConnectorNonNativeUpgradeTestUpdatedZetaConnectorTSSAddress) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "UpdatedZetaConnectorTSSAddress", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNonNativeUpgradeTestUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestUpgradedIterator struct { + Event *ZetaConnectorNonNativeUpgradeTestUpgraded // 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 *ZetaConnectorNonNativeUpgradeTestUpgradedIterator) 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(ZetaConnectorNonNativeUpgradeTestUpgraded) + 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(ZetaConnectorNonNativeUpgradeTestUpgraded) + 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 *ZetaConnectorNonNativeUpgradeTestUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeUpgradeTestUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeUpgradeTestUpgraded represents a Upgraded event raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*ZetaConnectorNonNativeUpgradeTestUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestUpgradedIterator{contract: _ZetaConnectorNonNativeUpgradeTest.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpgradeTestUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.WatchLogs(opts, "Upgraded", implementationRule) + 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(ZetaConnectorNonNativeUpgradeTestUpgraded) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "Upgraded", 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 +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) ParseUpgraded(log types.Log) (*ZetaConnectorNonNativeUpgradeTestUpgraded, error) { + event := new(ZetaConnectorNonNativeUpgradeTestUpgraded) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNonNativeUpgradeTestWithdrawnIterator is returned from FilterWithdrawn and is used to iterate over the raw logs and unpacked data for Withdrawn events raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestWithdrawnIterator struct { + Event *ZetaConnectorNonNativeUpgradeTestWithdrawn // 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 *ZetaConnectorNonNativeUpgradeTestWithdrawnIterator) 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(ZetaConnectorNonNativeUpgradeTestWithdrawn) + 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(ZetaConnectorNonNativeUpgradeTestWithdrawn) + 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 *ZetaConnectorNonNativeUpgradeTestWithdrawnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeUpgradeTestWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeUpgradeTestWithdrawn represents a Withdrawn event raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestWithdrawn struct { + To common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawn is a free log retrieval operation binding the contract event 0x7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5. +// +// Solidity: event Withdrawn(address indexed to, uint256 amount) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) FilterWithdrawn(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNonNativeUpgradeTestWithdrawnIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.FilterLogs(opts, "Withdrawn", toRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestWithdrawnIterator{contract: _ZetaConnectorNonNativeUpgradeTest.contract, event: "Withdrawn", logs: logs, sub: sub}, nil +} + +// WatchWithdrawn is a free log subscription operation binding the contract event 0x7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5. +// +// Solidity: event Withdrawn(address indexed to, uint256 amount) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) WatchWithdrawn(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpgradeTestWithdrawn, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.WatchLogs(opts, "Withdrawn", 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(ZetaConnectorNonNativeUpgradeTestWithdrawn) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "Withdrawn", 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 +} + +// ParseWithdrawn is a log parse operation binding the contract event 0x7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5. +// +// Solidity: event Withdrawn(address indexed to, uint256 amount) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) ParseWithdrawn(log types.Log) (*ZetaConnectorNonNativeUpgradeTestWithdrawn, error) { + event := new(ZetaConnectorNonNativeUpgradeTestWithdrawn) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "Withdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalledIterator is returned from FilterWithdrawnAndCalled and is used to iterate over the raw logs and unpacked data for WithdrawnAndCalled events raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalledIterator struct { + Event *ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalled // 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 *ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalledIterator) 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(ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalled) + 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(ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalled) + 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 *ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalledIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalled represents a WithdrawnAndCalled event raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalled struct { + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnAndCalled is a free log retrieval operation binding the contract event 0x23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d. +// +// Solidity: event WithdrawnAndCalled(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) FilterWithdrawnAndCalled(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalledIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.FilterLogs(opts, "WithdrawnAndCalled", toRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalledIterator{contract: _ZetaConnectorNonNativeUpgradeTest.contract, event: "WithdrawnAndCalled", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnAndCalled is a free log subscription operation binding the contract event 0x23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d. +// +// Solidity: event WithdrawnAndCalled(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) WatchWithdrawnAndCalled(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalled, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.WatchLogs(opts, "WithdrawnAndCalled", 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(ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalled) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "WithdrawnAndCalled", 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 +} + +// ParseWithdrawnAndCalled is a log parse operation binding the contract event 0x23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d. +// +// Solidity: event WithdrawnAndCalled(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) ParseWithdrawnAndCalled(log types.Log) (*ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalled, error) { + event := new(ZetaConnectorNonNativeUpgradeTestWithdrawnAndCalled) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "WithdrawnAndCalled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNonNativeUpgradeTestWithdrawnAndRevertedIterator is returned from FilterWithdrawnAndReverted and is used to iterate over the raw logs and unpacked data for WithdrawnAndReverted events raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestWithdrawnAndRevertedIterator struct { + Event *ZetaConnectorNonNativeUpgradeTestWithdrawnAndReverted // 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 *ZetaConnectorNonNativeUpgradeTestWithdrawnAndRevertedIterator) 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(ZetaConnectorNonNativeUpgradeTestWithdrawnAndReverted) + 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(ZetaConnectorNonNativeUpgradeTestWithdrawnAndReverted) + 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 *ZetaConnectorNonNativeUpgradeTestWithdrawnAndRevertedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeUpgradeTestWithdrawnAndRevertedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeUpgradeTestWithdrawnAndReverted represents a WithdrawnAndReverted event raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestWithdrawnAndReverted struct { + To common.Address + Amount *big.Int + Data []byte + RevertContext RevertContext + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNonNativeUpgradeTestWithdrawnAndRevertedIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.FilterLogs(opts, "WithdrawnAndReverted", toRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestWithdrawnAndRevertedIterator{contract: _ZetaConnectorNonNativeUpgradeTest.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpgradeTestWithdrawnAndReverted, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.WatchLogs(opts, "WithdrawnAndReverted", 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(ZetaConnectorNonNativeUpgradeTestWithdrawnAndReverted) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "WithdrawnAndReverted", 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 +} + +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) ParseWithdrawnAndReverted(log types.Log) (*ZetaConnectorNonNativeUpgradeTestWithdrawnAndReverted, error) { + event := new(ZetaConnectorNonNativeUpgradeTestWithdrawnAndReverted) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZetaConnectorNonNativeUpgradeTestWithdrawnV2Iterator is returned from FilterWithdrawnV2 and is used to iterate over the raw logs and unpacked data for WithdrawnV2 events raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestWithdrawnV2Iterator struct { + Event *ZetaConnectorNonNativeUpgradeTestWithdrawnV2 // 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 *ZetaConnectorNonNativeUpgradeTestWithdrawnV2Iterator) 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(ZetaConnectorNonNativeUpgradeTestWithdrawnV2) + 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(ZetaConnectorNonNativeUpgradeTestWithdrawnV2) + 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 *ZetaConnectorNonNativeUpgradeTestWithdrawnV2Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeUpgradeTestWithdrawnV2Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeUpgradeTestWithdrawnV2 represents a WithdrawnV2 event raised by the ZetaConnectorNonNativeUpgradeTest contract. +type ZetaConnectorNonNativeUpgradeTestWithdrawnV2 struct { + To common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnV2 is a free log retrieval operation binding the contract event 0x3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9. +// +// Solidity: event WithdrawnV2(address indexed to, uint256 amount) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) FilterWithdrawnV2(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNonNativeUpgradeTestWithdrawnV2Iterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.FilterLogs(opts, "WithdrawnV2", toRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeUpgradeTestWithdrawnV2Iterator{contract: _ZetaConnectorNonNativeUpgradeTest.contract, event: "WithdrawnV2", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnV2 is a free log subscription operation binding the contract event 0x3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9. +// +// Solidity: event WithdrawnV2(address indexed to, uint256 amount) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) WatchWithdrawnV2(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeUpgradeTestWithdrawnV2, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNonNativeUpgradeTest.contract.WatchLogs(opts, "WithdrawnV2", 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(ZetaConnectorNonNativeUpgradeTestWithdrawnV2) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "WithdrawnV2", 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 +} + +// ParseWithdrawnV2 is a log parse operation binding the contract event 0x3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9. +// +// Solidity: event WithdrawnV2(address indexed to, uint256 amount) +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestFilterer) ParseWithdrawnV2(log types.Log) (*ZetaConnectorNonNativeUpgradeTestWithdrawnV2, error) { + event := new(ZetaConnectorNonNativeUpgradeTestWithdrawnV2) + if err := _ZetaConnectorNonNativeUpgradeTest.contract.UnpackLog(event, "WithdrawnV2", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/v2/pkg/zrc20.t.sol/zrc20test.go b/v2/pkg/zrc20.t.sol/zrc20test.go index af0a46c13..cd09d6d98 100644 --- a/v2/pkg/zrc20.t.sol/zrc20test.go +++ b/v2/pkg/zrc20.t.sol/zrc20test.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZRC20TestMetaData contains all meta data concerning the ZRC20Test contract. var ZRC20TestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testApproveFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurn\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurnFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderIsNotGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFrom\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfSenderIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimitFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateNameAndSymbol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateNameAndSymbolFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFeeFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasCoinNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasPriceNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testZRC20BasicInfo\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowAllowance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasCoin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasPrice\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061eb078061003c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80638ce7ef051161019c578063d27b0427116100ee578063e02beae611610097578063f1f87f4011610071578063f1f87f40146104c3578063f2413096146104cb578063fa7626d4146104d357600080fd5b8063e02beae6146104ab578063e13aba48146104b3578063e20c9f71146104bb57600080fd5b8063d97136a2116100c8578063d97136a214610493578063dcba486a1461049b578063dfbdf600146104a357600080fd5b8063d27b04271461047b578063d509b16c14610483578063d591221f1461048b57600080fd5b8063b549984c11610150578063ba414fa61161012a578063ba414fa614610453578063d04cda981461046b578063d1fd32911461047357600080fd5b8063b549984c1461043b578063b5508aa914610443578063b79cad091461044b57600080fd5b8063a4aa6c7c11610181578063a4aa6c7c14610423578063ae9687dc1461042b578063b0464fdc1461043357600080fd5b80638ce7ef0514610406578063916a17c61461040e57600080fd5b80634b629509116102605780636ff45850116102095780637f924c4e116101e35780637f924c4e146103e157806380326680146103e957806385226c81146103f157600080fd5b80636ff45850146103c957806370557298146103d15780637ee68316146103d957600080fd5b806358fdbbe01161023a57806358fdbbe0146103a45780635f01db7e146103ac57806366d9a9a0146103b457600080fd5b80634b6295091461038c5780634cfc0aaa14610394578063513999621461039c57600080fd5b806328438826116102c25780633be9ec801161029c5780633be9ec80146103745780633e5e3c231461037c5780633f7286f41461038457600080fd5b8063284388261461034f5780632ade3880146103575780632f6254fc1461036c57600080fd5b80630a9254e4116102f35780630a9254e4146103215780631142744e146103295780631ed7831c1461033157600080fd5b80630393998b1461030f5780630809dfef14610319575b600080fd5b6103176104e0565b005b6103176105e2565b610317610770565b610317610e52565b610339610f36565b6040516103469190619737565b60405180910390f35b610317610f98565b61035f6111e3565b60405161034691906197d3565b610317611325565b610317611496565b610339611683565b6103396116e3565b610317611743565b610317611816565b6103176118ef565b610317611c6c565b610317611d3f565b6103bc611eac565b6040516103469190619939565b61031761202e565b61031761223e565b61031761248e565b61031761291f565b610317612b43565b6103f9612c17565b60405161034691906199d7565b610317612ce7565b610416612ee7565b6040516103469190619a4e565b610317612fe2565b610317613197565b610416613424565b61031761351f565b6103f96135f1565b6103176136c1565b61045b613a53565b6040519015158152602001610346565b610317613b27565b610317613c6b565b610317613dae565b610317613ef1565b610317614585565b610317614669565b6103176147ef565b610317614a72565b610317614bb5565b610317614de2565b61033961508c565b6103176150ec565b610317615232565b601f5461045b9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561054c57600080fd5b505af1158015610560573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105c857600080fd5b505af11580156105dc573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561063b57600080fd5b505af115801561064f573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156106bf57600080fd5b505af11580156106d3573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076d9190619ae5565b50565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580549091166112341790556040516107b690619657565b604051809103906000f0801580156107d2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054925190810193909352921660448201526108b6919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc9550000000000000000000000000000000000000000000000000000000017905261548e565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190619b23565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610a1157600080fd5b505af1158015610a25573d6000803e3d6000fd5b505050506000806000604051610a3a90619664565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a76573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610acc90619671565b610adb96959493929190619b3e565b604051809103906000f080158015610af7573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b9757600080fd5b505af1158015610bab573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610c1557600080fd5b505af1158015610c29573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610ca957600080fd5b505af1158015610cbd573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d3d57600080fd5b505af1158015610d51573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df39190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105c857600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610ebe57600080fd5b505af1158015610ed2573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef24915060440161072a565b60606016805480602002602001604051908101604052809291908181526020018280548015610f8e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f70575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110119190619c33565b905061101e6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ba9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561112757600080fd5b505af115801561113b573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af11580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190619ae5565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561131c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561130557838290600052602060002001805461127890619c4c565b80601f01602080910402602001604051908101604052809291908181526020018280546112a490619c4c565b80156112f15780601f106112c6576101008083540402835291602001916112f1565b820191906000526020600020905b8154815290600101906020018083116112d457829003601f168201915b505050505081526020019060010190611259565b505050508152505081526020019060010190611207565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561137e57600080fd5b505af1158015611392573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113fa57600080fd5b505af115801561140e573d6000803e3d6000fd5b50505050611494601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190619b23565b613211615535565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114ef57600080fd5b505af1158015611503573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561156d57600080fd5b505af1158015611581573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115f257600080fd5b505af1158015611606573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561165f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190619c99565b60606018805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc7759991506024016105ae565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b3915060440161072a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561194d57600080fd5b505af1158015611961573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119c857600080fd5b505af11580156119dc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a3957600080fd5b505af1158015611a4d573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5f9190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bbe57600080fd5b505af1158015611bd2573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119b9190600190603801619cc5565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cd857600080fd5b505af1158015611cec573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc91506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d9857600080fd5b505af1158015611dac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611e1357600080fd5b505af1158015611e27573d6000803e3d6000fd5b50505050611494600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea79190619c33565b6154ad565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561131c5783829060005260206000209060020201604051806040016040529081600082018054611f0390619c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2f90619c4c565b8015611f7c5780601f10611f5157610100808354040283529160200191611f7c565b820191906000526020600020905b815481529060010190602001808311611f5f57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561201657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611fc35790505b50505050508152505081526020019060010190611ed0565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a79190619c33565b90506120b46000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561212c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121509190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156121bd57600080fd5b505af11580156121d1573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd915060640161119b565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b79190619c33565b90506122c46000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561233b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235f9190619ae5565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124089190619ae5565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561245e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124829190619c33565b90506111de82826154ad565b6125476040518060400160405280600581526020017f544f4b454e000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125429190810190619daf565b615596565b6125d36040518060400160405280600381526020017f544b4e0000000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561262c57600080fd5b505af1158015612640573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b1580156126d457600080fd5b505af11580156126e8573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561274557600080fd5b505af1158015612759573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c82469150606401600060405180830381600087803b1580156127ef57600080fd5b505af1158015612803573d6000803e3d6000fd5b505050506128936040518060400160405280600681526020017f544f4b454e320000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b6114946040518060400160405280600481526020017f544b4e3200000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129989190619c33565b90506129a7620186a0826154ad565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a0057600080fd5b505af1158015612a14573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015612a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab69190619ae5565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b309190619c33565b9050612b3f62030d40826154ad565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612baf57600080fd5b505af1158015612bc3573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c68915060240161072a565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561131c578382906000526020600020018054612c5a90619c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054612c8690619c4c565b8015612cd35780601f10612ca857610100808354040283529160200191612cd3565b820191906000526020600020905b815481529060010190602001808311612cb657829003601f168201915b505050505081526020019060010190612c3b565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d609190619c33565b9050612d6d6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e099190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612e7657600080fd5b505af1158015612e8a573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb915060440161119b565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561131c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612fca57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f775790505b50505050508152505081526020019060010190612f0b565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561305a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307e9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130eb57600080fd5b505af11580156130ff573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015613173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3f9190619ae5565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156131ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132149190810190619daf565b90506132556040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156132aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132d29190810190619daf565b90506133136040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338c9190619df8565b905061339c60128260ff166154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134159190619c33565b90506105dc620186a0826154ad565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561131c5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561350757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116134b45790505b50505050508152505081526020019060010190613448565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561358b57600080fd5b505af115801561359f573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a91506024016105ae565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561131c57838290600052602060002001805461363490619c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461366090619c4c565b80156136ad5780601f10613682576101008083540402835291602001916136ad565b820191906000526020600020905b81548152906001019060200180831161369057829003601f168201915b505050505081526020019060010190613615565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561372357600080fd5b505af1158015613737573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b15801561379e57600080fd5b505af11580156137b2573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561380f57600080fd5b505af1158015613823573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561388a57600080fd5b505af115801561389e573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af1158015613914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139389190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156139a557600080fd5b505af11580156139b9573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119b9190606490603801619cc5565b60085460009060ff1615613a6b575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b209190619c33565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b8057600080fd5b505af1158015613b94573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bfb57600080fd5b505af1158015613c0f573d6000803e3d6000fd5b50505050611494600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613cc457600080fd5b505af1158015613cd8573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613d4857600080fd5b505af1158015613d5c573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc7759991506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e0757600080fd5b505af1158015613e1b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613e8b57600080fd5b505af1158015613e9f573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc91506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f4f57600080fd5b505af1158015613f63573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561403b57600080fd5b505af115801561404f573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156140b657600080fd5b505af11580156140ca573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015614121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141459190619c33565b9050614154620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141cd9190619c33565b90506141dc620186a0826154ad565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142559190619c33565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af11580156142c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142eb9190619ae5565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691614383919061c35090603801619cc5565b6020604051808303816000875af11580156143a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143c69190619ae5565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561441c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144409190619c33565b9050614460856144508885619e4a565b61445a9190619e4a565b826154ad565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156144b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d89190619c33565b90506144f4866144ea8961c350619e5d565b61445a9190619e5d565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061456d9190619c33565b905061457b61c350826154ad565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa1580156145da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145fe9190619c33565b905061460b6000826154ad565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb906044016123c5565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af11580156146e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147059190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561477257600080fd5b505af1158015614786573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401613154565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561484857600080fd5b505af115801561485c573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b1580156148c857600080fd5b505af11580156148dc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561493957600080fd5b505af115801561494d573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156149b457600080fd5b505af11580156149c8573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015614a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a459190619c99565b601f549193509150614a659061010090046001600160a01b031683615535565b6105dc61445a8486619e4a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614acb57600080fd5b505af1158015614adf573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b158015614b4757600080fd5b505af1158015614b5b573d6000803e3d6000fd5b50505050611494601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611468573d6000803e3d6000fd5b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614c2157600080fd5b505af1158015614c35573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b158015614cc957600080fd5b505af1158015614cdd573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614d4d57600080fd5b505af1158015614d61573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c824691506064016105ae565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e5a9190619c33565b9050614e69620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ee29190619c33565b9050614ef1620186a0826154ad565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f7e9190619ae5565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ff79190619c33565b905061500561c350826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561505a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061507e9190619c33565b90506105dc61c350826154ad565b60606015805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561514557600080fd5b505af1158015615159573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b1580156151c357600080fd5b505af11580156151d7573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115d8565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015615287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152ab9190619c33565b90506152b86000826154ad565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa15801561532e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153529190619c33565b905061535f6000826154ad565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156153cf57600080fd5b505af11580156153e3573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af115801561546a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190619ae5565b600061549861967e565b6154a38484836155e8565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b15801561551957600080fd5b505afa15801561552d573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401615501565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d963906155019085908590600401619e70565b6000806155f58584615663565b90506156586040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615643929190619e95565b6040516020818303038152906040528561566f565b9150505b9392505050565b600061565c838361569d565b60c081015151600090156156935761568c84848460c001516156b8565b905061565c565b61568c848461585e565b60006156a98383615949565b61565c8383602001518461566f565b6000806156c3615955565b905060006156d18683615a28565b905060006156e88260600151836020015185615ece565b905060006156f8838389896160e0565b9050600061570582616f5d565b602081015181519192509060030b156157785789826040015160405160200161572f929190619eb7565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261576f91600401619f38565b60405180910390fd5b60006157bb6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161712c565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061580e908490600401619f38565b602060405180830381865afa15801561582b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061584f9190619b23565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906158b3908790600401619f38565b600060405180830381865afa1580156158d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158f89190810190619f6b565b905060006159268285604051602001615912929190619fa0565b60405160208183030381529060405261732c565b90506001600160a01b0381166154a357848460405160200161572f929190619fcf565b612b3f8282600061733f565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906159dc90849060040161a07a565b600060405180830381865afa1580156159f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a219190810190619daf565b9250505090565b615a5a6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050615aa56040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b615aae85617442565b60208201526000615abe86617827565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615b00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b289190810190619daf565b86838560200151604051602001615b42949392919061a0c1565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190615b9a908590600401619f38565b600060405180830381865afa158015615bb7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615bdf9190810190619daf565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615c2790849060040161a1c5565b602060405180830381865afa158015615c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c689190619ae5565b615c7d578160405160200161572f919061a217565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615cc290849060040161a2a9565b600060405180830381865afa158015615cdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d079190810190619daf565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615d4e90849060040161a2fb565b602060405180830381865afa158015615d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615d8f9190619ae5565b15615e24576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615dd990849060040161a2fb565b600060405180830381865afa158015615df6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e1e9190810190619daf565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615e49919061a34d565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615e75929190619e70565b600060405180830381865afa158015615e92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615eba9190810190619daf565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615eea5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615f4a57615f4a61a3b9565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615f9e57615f9e61a3b9565b602002602001018190525084604051602001615fba919061a3e8565b60405160208183030381529060405281600281518110615fdc57615fdc61a3b9565b602002602001018190525082604051602001615ff8919061a454565b6040516020818303038152906040528160038151811061601a5761601a61a3b9565b6020026020010181905250600061603082616f5d565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506160c19060408051808201825260008082526020918201528151808301909252845182528085019082015290617aaa565b6160d6578560405160200161572f919061a495565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616130565b511590565b6162a4578260200151156161ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161576f565b8260c00151156162a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161576f565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816162bd57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806163189061a526565b935060ff168151811061632d5761632d61a3b9565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161637e919061a545565b6040516020818303038152906040528282806163999061a526565b935060ff16815181106163ae576163ae61a3b9565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806163fb9061a526565b935060ff16815181106164105761641061a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061645d9061a526565b935060ff16815181106164725761647261a3b9565b6020026020010181905250876020015182828061648e9061a526565b935060ff16815181106164a3576164a361a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806164f09061a526565b935060ff16815181106165055761650561a3b9565b60209081029190910101528751828261651d8161a526565b935060ff16815181106165325761653261a3b9565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061657f9061a526565b935060ff16815181106165945761659461a3b9565b60200260200101819052506165a846617b0b565b82826165b38161a526565b935060ff16815181106165c8576165c861a3b9565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806166159061a526565b935060ff168151811061662a5761662a61a3b9565b6020026020010181905250868282806166429061a526565b935060ff16815181106166575761665761a3b9565b602090810291909101015285511561677e5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826166a88161a526565b935060ff16815181106166bd576166bd61a3b9565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061670d908990600401619f38565b600060405180830381865afa15801561672a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167529190810190619daf565b828261675d8161a526565b935060ff16815181106167725761677261a3b9565b60200260200101819052505b84602001511561684e5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826167c78161a526565b935060ff16815181106167dc576167dc61a3b9565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806168299061a526565b935060ff168151811061683e5761683e61a3b9565b6020026020010181905250616a15565b61688661612b8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6169195760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826168c98161a526565b935060ff16815181106168de576168de61a3b9565b60200260200101819052508460a001516040516020016168fe919061a3e8565b6040516020818303038152906040528282806168299061a526565b8460c0015115801561695c57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261695a90511590565b155b15616a155760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826169a08161a526565b935060ff16815181106169b5576169b561a3b9565b60200260200101819052506169c988617bab565b6040516020016169d9919061a3e8565b6040516020818303038152906040528282806169f49061a526565b935060ff1681518110616a0957616a0961a3b9565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152616a4990511590565b616ade5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282616a8c8161a526565b935060ff1681518110616aa157616aa161a3b9565b60200260200101819052508460400151828280616abd9061a526565b935060ff1681518110616ad257616ad261a3b9565b60200260200101819052505b606085015115616bff5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282616b278161a526565b935060ff1681518110616b3c57616b3c61a3b9565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616bab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616bd39190810190619daf565b8282616bde8161a526565b935060ff1681518110616bf357616bf361a3b9565b60200260200101819052505b60e08501515115616ca65760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616c498161a526565b935060ff1681518110616c5e57616c5e61a3b9565b6020026020010181905250616c7a8560e0015160000151617b0b565b8282616c858161a526565b935060ff1681518110616c9a57616c9a61a3b9565b60200260200101819052505b60e08501516020015115616d505760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616cf38161a526565b935060ff1681518110616d0857616d0861a3b9565b6020026020010181905250616d248560e0015160200151617b0b565b8282616d2f8161a526565b935060ff1681518110616d4457616d4461a3b9565b60200260200101819052505b60e08501516040015115616dfa5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282616d9d8161a526565b935060ff1681518110616db257616db261a3b9565b6020026020010181905250616dce8560e0015160400151617b0b565b8282616dd98161a526565b935060ff1681518110616dee57616dee61a3b9565b60200260200101819052505b60e08501516060015115616ea45760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616e478161a526565b935060ff1681518110616e5c57616e5c61a3b9565b6020026020010181905250616e788560e0015160600151617b0b565b8282616e838161a526565b935060ff1681518110616e9857616e9861a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616ec257616ec2619ce7565b604051908082528060200260200182016040528015616ef557816020015b6060815260200190600190039081616ee05790505b50905060005b8260ff168160ff161015616f4e57838160ff1681518110616f1e57616f1e61a3b9565b6020026020010151828260ff1681518110616f3b57616f3b61a3b9565b6020908102919091010152600101616efb565b5093505050505b949350505050565b616f846040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161700a9186910161a5b0565b600060405180830381865afa158015617027573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261704f9190810190619daf565b9050600061705d868361869a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161708d91906199d7565b6000604051808303816000875af11580156170ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526170d4919081019061a5f7565b805190915060030b158015906170ed5750602081015151155b80156170fc5750604081015151155b156160d657816000815181106171145761711461a3b9565b602002602001015160405160200161572f919061a6ad565b606060006171618560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506171989082905b906187ef565b156172f55760006172158261720f846172096171db8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618816565b90618878565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506172799082906187ef565b156172e357604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172e0905b82906188fd565b90505b6172ec81618923565b9250505061565c565b821561730e57848460405160200161572f92919061a899565b505060408051602081019091526000815261565c565b509392505050565b6000808251602084016000f09392505050565b8160a001511561734e57505050565b600061735b84848461898c565b9050600061736882616f5d565b602081015181519192509060030b1580156174045750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261740490604080518082018252600080825260209182015281518083019092528451825280850190820152617192565b1561741157505050505050565b6040820151511561743157816040015160405160200161572f919061a940565b8060405160200161572f919061a99e565b606060006174778360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506174dc905b8290617aaa565b1561754b57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546908390618f27565b618923565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ad905b8290618fb1565b60010361767a57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617613906172d9565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546905b83906188fd565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176d9906174d5565b1561781057604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061774190839061904b565b9050600081600183516177549190619e5d565b815181106177645761776461a3b9565b602002602001015190506178076175466177da6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618f27565b95945050505050565b8260405160200161572f919061aa09565b50919050565b6060600061785c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506178be906174d5565b156178cc5761565c81618923565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261792b906175a6565b60010361799557604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c9061754690617673565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179f4906174d5565b1561781057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617a5c90839061904b565b9050600181511115617a98578060028251617a779190619e5d565b81518110617a8757617a8761a3b9565b602002602001015192505050919050565b508260405160200161572f919061aa09565b805182516000911115617abf575060006154a7565b81518351602085015160009291617ad591619e4a565b617adf9190619e5d565b905082602001518103617af65760019150506154a7565b82516020840151819020912014905092915050565b60606000617b18836190f0565b600101905060008167ffffffffffffffff811115617b3857617b38619ce7565b6040519080825280601f01601f191660200182016040528015617b62576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617b6c57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617c37905b82906191d2565b15617c7757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cd690617c30565b15617d1657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d7590617c30565b15617db557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e1490617c30565b80617e795750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e7990617c30565b15617eb957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f1890617c30565b80617f7d5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f7d90617c30565b15617fbd57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261801c90617c30565b806180815750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261808190617c30565b156180c157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261812090617c30565b806181855750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261818590617c30565b156181c557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261822490617c30565b1561826457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182c390617c30565b1561830357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261836290617c30565b156183a257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261840190617c30565b1561844157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184a090617c30565b156184e057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261853f90617c30565b806185a45750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185a490617c30565b156185e457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261864390617c30565b1561868357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161572f929060200161aae7565b60608060005b845181101561872557818582815181106186bc576186bc61a3b9565b60200260200101516040516020016186d5929190619fa0565b6040516020818303038152906040529150600185516186f49190619e5d565b811461871d578160405160200161870b919061ac50565b60405160208183030381529060405291505b6001016186a0565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161873e57905050905083816000815181106187695761876961a3b9565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106187bd576187bd61a3b9565b602002602001018190525081816002815181106187dc576187dc61a3b9565b6020908102919091010152949350505050565b602080830151835183519284015160009361880d92918491906191e6565b14159392505050565b6040805180820190915260008082526020820152600061884884600001518560200151856000015186602001516192f7565b905083602001518161885a9190619e5d565b84518590618869908390619e5d565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561889d5750816154a7565b60208083015190840151600191146188c45750815160208481015190840151829020919020145b80156188f5578251845185906188db908390619e5d565b90525082516020850180516188f1908390619e4a565b9052505b509192915050565b604080518082019091526000808252602082015261891c838383619417565b5092915050565b60606000826000015167ffffffffffffffff81111561894457618944619ce7565b6040519080825280601f01601f19166020018201604052801561896e576020820181803683370190505b509050600060208201905061891c81856020015186600001516194c2565b60606000618998615955565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816189b557905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618a109061a526565b935060ff1681518110618a2557618a2561a3b9565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618a76919061ac91565b604051602081830303815290604052828280618a919061a526565b935060ff1681518110618aa657618aa661a3b9565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618af39061a526565b935060ff1681518110618b0857618b0861a3b9565b602002602001018190525082604051602001618b24919061a454565b604051602081830303815290604052828280618b3f9061a526565b935060ff1681518110618b5457618b5461a3b9565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618ba19061a526565b935060ff1681518110618bb657618bb661a3b9565b6020026020010181905250618bcb878461953c565b8282618bd68161a526565b935060ff1681518110618beb57618beb61a3b9565b602090810291909101015285515115618c975760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282618c3d8161a526565b935060ff1681518110618c5257618c5261a3b9565b6020026020010181905250618c6b86600001518461953c565b8282618c768161a526565b935060ff1681518110618c8b57618c8b61a3b9565b60200260200101819052505b856080015115618d055760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282618ce08161a526565b935060ff1681518110618cf557618cf561a3b9565b6020026020010181905250618d6b565b8415618d6b5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282618d4a8161a526565b935060ff1681518110618d5f57618d5f61a3b9565b60200260200101819052505b60408601515115618e075760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618db58161a526565b935060ff1681518110618dca57618dca61a3b9565b60200260200101819052508560400151828280618de69061a526565b935060ff1681518110618dfb57618dfb61a3b9565b60200260200101819052505b856060015115618e715760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618e508161a526565b935060ff1681518110618e6557618e6561a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618e8f57618e8f619ce7565b604051908082528060200260200182016040528015618ec257816020015b6060815260200190600190039081618ead5790505b50905060005b8260ff168160ff161015618f1b57838160ff1681518110618eeb57618eeb61a3b9565b6020026020010151828260ff1681518110618f0857618f0861a3b9565b6020908102919091010152600101618ec8565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618f4c5750816154a7565b81518351602085015160009291618f6291619e4a565b618f6c9190619e5d565b60208401519091506001908214618f8d575082516020840151819020908220145b8015618fa857835185518690618fa4908390619e5d565b9052505b50929392505050565b6000808260000151618fd585600001518660200151866000015187602001516192f7565b618fdf9190619e4a565b90505b83516020850151618ff39190619e4a565b811161891c57816190038161acd6565b925050826000015161903a85602001518361901e9190619e5d565b865161902a9190619e5d565b83866000015187602001516192f7565b6190449190619e4a565b9050618fe2565b606060006190598484618fb1565b619064906001619e4a565b67ffffffffffffffff81111561907c5761907c619ce7565b6040519080825280602002602001820160405280156190af57816020015b606081526020019060019003908161909a5790505b50905060005b8151811015617324576190cb61754686866188fd565b8282815181106190dd576190dd61a3b9565b60209081029190910101526001016190b5565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619139577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619165576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061918357662386f26fc10000830492506010015b6305f5e100831061919b576305f5e100830492506008015b61271083106191af57612710830492506004015b606483106191c1576064830492506002015b600a83106154a75760010192915050565b60006191de838361957c565b159392505050565b6000808584116192ed5760208411619299576000841561923157600161920d866020619e5d565b61921890600861acf0565b61922390600261adee565b61922d9190619e5d565b1990505b83518116856192408989619e4a565b61924a9190619e5d565b805190935082165b8181146192845787841161926c5787945050505050616f55565b836192768161adfa565b945050828451169050619252565b61928e8785619e4a565b945050505050616f55565b8383206192a68588619e5d565b6192b09087619e4a565b91505b8582106192eb578482208082036192d8576192ce8684619e4a565b9350505050616f55565b6192e3600184619e5d565b9250506192b3565b505b5092949350505050565b6000838186851161940257602085116193b1576000851561934357600161931f876020619e5d565b61932a90600861acf0565b61933590600261adee565b61933f9190619e5d565b1990505b845181166000876193548b8b619e4a565b61935e9190619e5d565b855190915083165b8281146193a35781861061938b5761937e8b8b619e4a565b9650505050505050616f55565b856193958161acd6565b965050838651169050619366565b859650505050505050616f55565b508383206000905b6193c38689619e5d565b8211619400578583208082036193df5783945050505050616f55565b6193ea600185619e4a565b93505081806193f89061acd6565b9250506193b9565b505b61940c8787619e4a565b979650505050505050565b6040805180820190915260008082526020820152600061944985600001518660200151866000015187602001516192f7565b6020808701805191860191909152519091506194659082619e5d565b8352845160208601516194789190619e4a565b810361948757600085526194b9565b835183516194959190619e4a565b855186906194a4908390619e5d565b90525083516194b39082619e4a565b60208601525b50909392505050565b602081106194fa57815183526194d9602084619e4a565b92506194e6602083619e4a565b91506194f3602082619e5d565b90506194c2565b6000198115619529576001619510836020619e5d565b61951c9061010061adee565b6195269190619e5d565b90505b9151835183169219169190911790915250565b6060600061954a8484615a28565b80516020808301516040519394506195649390910161ae11565b60405160208183030381529060405291505092915050565b815181516000919081111561958f575081515b6020808501519084015160005b8381101561964857825182518082146196185760001960208710156195f7576001846195c9896020619e5d565b6195d39190619e4a565b6195de90600861acf0565b6195e990600261adee565b6195f39190619e5d565b1990505b81811683821681810391146196155797506154a79650505050505050565b50505b619623602086619e4a565b9450619630602085619e4a565b935050506020816196419190619e4a565b905061959c565b50845186516160d6919061ae69565b610b678061ae8a83390190565b61106f8061b9f183390190565b6120728061ca6083390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016196c16196c6565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016196c16040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156197785783516001600160a01b0316835260209384019390920191600101619751565b509095945050505050565b60005b8381101561979e578181015183820152602001619786565b50506000910152565b600081518084526197bf816020860160208601619783565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156198b5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261989f8486516197a7565b6020958601959094509290920191600101619865565b5091975050506020948501949290920191506001016197fb565b50929695505050505050565b600081518084526020840193506020830160005b8281101561992f5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016198ef565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526199a560408801826197a7565b90506020820151915086810360208801526199c081836198db565b965050506020938401939190910190600101619961565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619a398583516197a7565b945060209384019391909101906001016199ff565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152619acf60408701826198db565b9550506020938401939190910190600101619a76565b600060208284031215619af757600080fd5b8151801515811461565c57600080fd5b80516001600160a01b0381168114619b1e57600080fd5b919050565b600060208284031215619b3557600080fd5b61565c82619b07565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619bf8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152619c1960c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215619c4557600080fd5b5051919050565b600181811c90821680619c6057607f821691505b602082108103617821577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008060408385031215619cac57600080fd5b619cb583619b07565b6020939093015192949293505050565b604081526000619cd860408301856197a7565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619d3957619d39619ce7565b60405290565b60008067ffffffffffffffff841115619d5a57619d5a619ce7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619d8957619d89619ce7565b604052838152905080828401851015619da157600080fd5b617324846020830185619783565b600060208284031215619dc157600080fd5b815167ffffffffffffffff811115619dd857600080fd5b8201601f81018413619de957600080fd5b6154a384825160208401619d3f565b600060208284031215619e0a57600080fd5b815160ff8116811461565c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156154a7576154a7619e1b565b818103818111156154a7576154a7619e1b565b604081526000619e8360408301856197a7565b828103602084015261565881856197a7565b6001600160a01b0383168152604060208201526000616f5560408301846197a7565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619eef81601a850160208801619783565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351619f2c81601c840160208801619783565b01601c01949350505050565b60208152600061565c60208301846197a7565b600082601f830112619f5c57600080fd5b61565c83835160208501619d3f565b600060208284031215619f7d57600080fd5b815167ffffffffffffffff811115619f9457600080fd5b6154a384828501619f4b565b60008351619fb2818460208801619783565b835190830190619fc6818360208801619783565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a00781601a850160208801619783565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a044816033840160208801619783565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061565c60808301846197a7565b6000855161a0d3818460208a01619783565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a10d816001840160208a01619783565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a14b816002840160208901619783565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a18d816002840160208801619783565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a1d860408301846197a7565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a24f81601f850160208701619783565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a2bc60408301846197a7565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a30e60408301846197a7565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a385816014850160208701619783565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a420816001850160208701619783565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a466818460208701619783565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a51981604b850160208701619783565b91909101604b0192915050565b600060ff821660ff810361a53c5761a53c619e1b565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061565c60808301846197a7565b60006020828403121561a60957600080fd5b815167ffffffffffffffff81111561a62057600080fd5b82016060818503121561a63257600080fd5b61a63a619d16565b81518060030b811461a64b57600080fd5b8152602082015167ffffffffffffffff81111561a66757600080fd5b61a67386828501619f4b565b602083015250604082015167ffffffffffffffff81111561a69357600080fd5b61a69f86828501619f4b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a70b816021850160208701619783565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a8f7816021850160208801619783565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a93481602e840160208801619783565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a9fc816022850160208701619783565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161aa4181600e850160208701619783565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161ab1f816018850160208801619783565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161ab5c81601c840160208801619783565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ac62818460208701619783565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161acc981601c850160208701619783565b91909101601c0192915050565b6000600019820361ace95761ace9619e1b565b5060010190565b80820281158282048414176154a7576154a7619e1b565b6001815b600184111561ad425780850481111561ad265761ad26619e1b565b600184161561ad3457908102905b60019390931c92800261ad0b565b935093915050565b60008261ad59575060016154a7565b8161ad66575060006154a7565b816001811461ad7c576002811461ad865761ada2565b60019150506154a7565b60ff84111561ad975761ad97619e1b565b50506001821b6154a7565b5060208310610133831016604e8410600b841016171561adc5575081810a6154a7565b61add2600019848461ad07565b806000190482111561ade65761ade6619e1b565b029392505050565b600061565c838361ad4a565b60008161ae095761ae09619e1b565b506000190190565b6000835161ae23818460208801619783565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161ae5d816001840160208801619783565b01600101949350505050565b818103600083128015838313168383128216171561891c5761891c619e1b56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212203b8a61523cf0636d20451911ef652f516b2b6dc27f59d12ba2a96c4c5f1861dc64736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220484c916d7a7367a2f9e9a10a2c44c5966d761b7567a8f4656cf2c2bc1d5dcd6464736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061eb078061003c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80638ce7ef051161019c578063d27b0427116100ee578063e02beae611610097578063f1f87f4011610071578063f1f87f40146104c3578063f2413096146104cb578063fa7626d4146104d357600080fd5b8063e02beae6146104ab578063e13aba48146104b3578063e20c9f71146104bb57600080fd5b8063d97136a2116100c8578063d97136a214610493578063dcba486a1461049b578063dfbdf600146104a357600080fd5b8063d27b04271461047b578063d509b16c14610483578063d591221f1461048b57600080fd5b8063b549984c11610150578063ba414fa61161012a578063ba414fa614610453578063d04cda981461046b578063d1fd32911461047357600080fd5b8063b549984c1461043b578063b5508aa914610443578063b79cad091461044b57600080fd5b8063a4aa6c7c11610181578063a4aa6c7c14610423578063ae9687dc1461042b578063b0464fdc1461043357600080fd5b80638ce7ef0514610406578063916a17c61461040e57600080fd5b80634b629509116102605780636ff45850116102095780637f924c4e116101e35780637f924c4e146103e157806380326680146103e957806385226c81146103f157600080fd5b80636ff45850146103c957806370557298146103d15780637ee68316146103d957600080fd5b806358fdbbe01161023a57806358fdbbe0146103a45780635f01db7e146103ac57806366d9a9a0146103b457600080fd5b80634b6295091461038c5780634cfc0aaa14610394578063513999621461039c57600080fd5b806328438826116102c25780633be9ec801161029c5780633be9ec80146103745780633e5e3c231461037c5780633f7286f41461038457600080fd5b8063284388261461034f5780632ade3880146103575780632f6254fc1461036c57600080fd5b80630a9254e4116102f35780630a9254e4146103215780631142744e146103295780631ed7831c1461033157600080fd5b80630393998b1461030f5780630809dfef14610319575b600080fd5b6103176104e0565b005b6103176105e2565b610317610770565b610317610e52565b610339610f36565b6040516103469190619737565b60405180910390f35b610317610f98565b61035f6111e3565b60405161034691906197d3565b610317611325565b610317611496565b610339611683565b6103396116e3565b610317611743565b610317611816565b6103176118ef565b610317611c6c565b610317611d3f565b6103bc611eac565b6040516103469190619939565b61031761202e565b61031761223e565b61031761248e565b61031761291f565b610317612b43565b6103f9612c17565b60405161034691906199d7565b610317612ce7565b610416612ee7565b6040516103469190619a4e565b610317612fe2565b610317613197565b610416613424565b61031761351f565b6103f96135f1565b6103176136c1565b61045b613a53565b6040519015158152602001610346565b610317613b27565b610317613c6b565b610317613dae565b610317613ef1565b610317614585565b610317614669565b6103176147ef565b610317614a72565b610317614bb5565b610317614de2565b61033961508c565b6103176150ec565b610317615232565b601f5461045b9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561054c57600080fd5b505af1158015610560573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105c857600080fd5b505af11580156105dc573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561063b57600080fd5b505af115801561064f573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156106bf57600080fd5b505af11580156106d3573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076d9190619ae5565b50565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580549091166112341790556040516107b690619657565b604051809103906000f0801580156107d2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054925190810193909352921660448201526108b6919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc9550000000000000000000000000000000000000000000000000000000017905261548e565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190619b23565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610a1157600080fd5b505af1158015610a25573d6000803e3d6000fd5b505050506000806000604051610a3a90619664565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a76573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610acc90619671565b610adb96959493929190619b3e565b604051809103906000f080158015610af7573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b9757600080fd5b505af1158015610bab573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610c1557600080fd5b505af1158015610c29573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610ca957600080fd5b505af1158015610cbd573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d3d57600080fd5b505af1158015610d51573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df39190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105c857600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610ebe57600080fd5b505af1158015610ed2573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef24915060440161072a565b60606016805480602002602001604051908101604052809291908181526020018280548015610f8e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f70575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110119190619c33565b905061101e6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ba9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561112757600080fd5b505af115801561113b573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af11580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190619ae5565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561131c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561130557838290600052602060002001805461127890619c4c565b80601f01602080910402602001604051908101604052809291908181526020018280546112a490619c4c565b80156112f15780601f106112c6576101008083540402835291602001916112f1565b820191906000526020600020905b8154815290600101906020018083116112d457829003601f168201915b505050505081526020019060010190611259565b505050508152505081526020019060010190611207565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561137e57600080fd5b505af1158015611392573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113fa57600080fd5b505af115801561140e573d6000803e3d6000fd5b50505050611494601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190619b23565b613211615535565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114ef57600080fd5b505af1158015611503573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561156d57600080fd5b505af1158015611581573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115f257600080fd5b505af1158015611606573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561165f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190619c99565b60606018805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc7759991506024016105ae565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b3915060440161072a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561194d57600080fd5b505af1158015611961573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119c857600080fd5b505af11580156119dc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a3957600080fd5b505af1158015611a4d573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5f9190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bbe57600080fd5b505af1158015611bd2573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119b9190600190603801619cc5565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cd857600080fd5b505af1158015611cec573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc91506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d9857600080fd5b505af1158015611dac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611e1357600080fd5b505af1158015611e27573d6000803e3d6000fd5b50505050611494600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea79190619c33565b6154ad565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561131c5783829060005260206000209060020201604051806040016040529081600082018054611f0390619c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2f90619c4c565b8015611f7c5780601f10611f5157610100808354040283529160200191611f7c565b820191906000526020600020905b815481529060010190602001808311611f5f57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561201657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611fc35790505b50505050508152505081526020019060010190611ed0565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a79190619c33565b90506120b46000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561212c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121509190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156121bd57600080fd5b505af11580156121d1573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd915060640161119b565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b79190619c33565b90506122c46000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561233b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235f9190619ae5565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124089190619ae5565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561245e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124829190619c33565b90506111de82826154ad565b6125476040518060400160405280600581526020017f544f4b454e000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125429190810190619daf565b615596565b6125d36040518060400160405280600381526020017f544b4e0000000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561262c57600080fd5b505af1158015612640573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b1580156126d457600080fd5b505af11580156126e8573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561274557600080fd5b505af1158015612759573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c82469150606401600060405180830381600087803b1580156127ef57600080fd5b505af1158015612803573d6000803e3d6000fd5b505050506128936040518060400160405280600681526020017f544f4b454e320000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b6114946040518060400160405280600481526020017f544b4e3200000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129989190619c33565b90506129a7620186a0826154ad565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a0057600080fd5b505af1158015612a14573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015612a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab69190619ae5565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b309190619c33565b9050612b3f62030d40826154ad565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612baf57600080fd5b505af1158015612bc3573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c68915060240161072a565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561131c578382906000526020600020018054612c5a90619c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054612c8690619c4c565b8015612cd35780601f10612ca857610100808354040283529160200191612cd3565b820191906000526020600020905b815481529060010190602001808311612cb657829003601f168201915b505050505081526020019060010190612c3b565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d609190619c33565b9050612d6d6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e099190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612e7657600080fd5b505af1158015612e8a573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb915060440161119b565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561131c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612fca57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f775790505b50505050508152505081526020019060010190612f0b565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561305a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307e9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130eb57600080fd5b505af11580156130ff573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015613173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3f9190619ae5565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156131ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132149190810190619daf565b90506132556040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156132aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132d29190810190619daf565b90506133136040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338c9190619df8565b905061339c60128260ff166154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134159190619c33565b90506105dc620186a0826154ad565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561131c5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561350757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116134b45790505b50505050508152505081526020019060010190613448565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561358b57600080fd5b505af115801561359f573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a91506024016105ae565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561131c57838290600052602060002001805461363490619c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461366090619c4c565b80156136ad5780601f10613682576101008083540402835291602001916136ad565b820191906000526020600020905b81548152906001019060200180831161369057829003601f168201915b505050505081526020019060010190613615565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561372357600080fd5b505af1158015613737573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b15801561379e57600080fd5b505af11580156137b2573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561380f57600080fd5b505af1158015613823573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561388a57600080fd5b505af115801561389e573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af1158015613914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139389190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156139a557600080fd5b505af11580156139b9573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119b9190606490603801619cc5565b60085460009060ff1615613a6b575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b209190619c33565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b8057600080fd5b505af1158015613b94573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bfb57600080fd5b505af1158015613c0f573d6000803e3d6000fd5b50505050611494600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613cc457600080fd5b505af1158015613cd8573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613d4857600080fd5b505af1158015613d5c573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc7759991506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e0757600080fd5b505af1158015613e1b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613e8b57600080fd5b505af1158015613e9f573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc91506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f4f57600080fd5b505af1158015613f63573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561403b57600080fd5b505af115801561404f573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156140b657600080fd5b505af11580156140ca573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015614121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141459190619c33565b9050614154620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141cd9190619c33565b90506141dc620186a0826154ad565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142559190619c33565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af11580156142c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142eb9190619ae5565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691614383919061c35090603801619cc5565b6020604051808303816000875af11580156143a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143c69190619ae5565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561441c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144409190619c33565b9050614460856144508885619e4a565b61445a9190619e4a565b826154ad565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156144b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d89190619c33565b90506144f4866144ea8961c350619e5d565b61445a9190619e5d565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061456d9190619c33565b905061457b61c350826154ad565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa1580156145da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145fe9190619c33565b905061460b6000826154ad565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb906044016123c5565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af11580156146e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147059190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561477257600080fd5b505af1158015614786573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401613154565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561484857600080fd5b505af115801561485c573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b1580156148c857600080fd5b505af11580156148dc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561493957600080fd5b505af115801561494d573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156149b457600080fd5b505af11580156149c8573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015614a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a459190619c99565b601f549193509150614a659061010090046001600160a01b031683615535565b6105dc61445a8486619e4a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614acb57600080fd5b505af1158015614adf573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b158015614b4757600080fd5b505af1158015614b5b573d6000803e3d6000fd5b50505050611494601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611468573d6000803e3d6000fd5b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614c2157600080fd5b505af1158015614c35573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b158015614cc957600080fd5b505af1158015614cdd573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614d4d57600080fd5b505af1158015614d61573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c824691506064016105ae565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e5a9190619c33565b9050614e69620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ee29190619c33565b9050614ef1620186a0826154ad565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f7e9190619ae5565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ff79190619c33565b905061500561c350826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561505a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061507e9190619c33565b90506105dc61c350826154ad565b60606015805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561514557600080fd5b505af1158015615159573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b1580156151c357600080fd5b505af11580156151d7573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115d8565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015615287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152ab9190619c33565b90506152b86000826154ad565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa15801561532e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153529190619c33565b905061535f6000826154ad565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156153cf57600080fd5b505af11580156153e3573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af115801561546a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190619ae5565b600061549861967e565b6154a38484836155e8565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b15801561551957600080fd5b505afa15801561552d573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401615501565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d963906155019085908590600401619e70565b6000806155f58584615663565b90506156586040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615643929190619e95565b6040516020818303038152906040528561566f565b9150505b9392505050565b600061565c838361569d565b60c081015151600090156156935761568c84848460c001516156b8565b905061565c565b61568c848461585e565b60006156a98383615949565b61565c8383602001518461566f565b6000806156c3615955565b905060006156d18683615a28565b905060006156e88260600151836020015185615ece565b905060006156f8838389896160e0565b9050600061570582616f5d565b602081015181519192509060030b156157785789826040015160405160200161572f929190619eb7565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261576f91600401619f38565b60405180910390fd5b60006157bb6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161712c565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061580e908490600401619f38565b602060405180830381865afa15801561582b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061584f9190619b23565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906158b3908790600401619f38565b600060405180830381865afa1580156158d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158f89190810190619f6b565b905060006159268285604051602001615912929190619fa0565b60405160208183030381529060405261732c565b90506001600160a01b0381166154a357848460405160200161572f929190619fcf565b612b3f8282600061733f565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906159dc90849060040161a07a565b600060405180830381865afa1580156159f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a219190810190619daf565b9250505090565b615a5a6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050615aa56040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b615aae85617442565b60208201526000615abe86617827565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615b00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b289190810190619daf565b86838560200151604051602001615b42949392919061a0c1565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190615b9a908590600401619f38565b600060405180830381865afa158015615bb7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615bdf9190810190619daf565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615c2790849060040161a1c5565b602060405180830381865afa158015615c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c689190619ae5565b615c7d578160405160200161572f919061a217565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615cc290849060040161a2a9565b600060405180830381865afa158015615cdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d079190810190619daf565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615d4e90849060040161a2fb565b602060405180830381865afa158015615d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615d8f9190619ae5565b15615e24576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615dd990849060040161a2fb565b600060405180830381865afa158015615df6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e1e9190810190619daf565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615e49919061a34d565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615e75929190619e70565b600060405180830381865afa158015615e92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615eba9190810190619daf565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615eea5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615f4a57615f4a61a3b9565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615f9e57615f9e61a3b9565b602002602001018190525084604051602001615fba919061a3e8565b60405160208183030381529060405281600281518110615fdc57615fdc61a3b9565b602002602001018190525082604051602001615ff8919061a454565b6040516020818303038152906040528160038151811061601a5761601a61a3b9565b6020026020010181905250600061603082616f5d565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506160c19060408051808201825260008082526020918201528151808301909252845182528085019082015290617aaa565b6160d6578560405160200161572f919061a495565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616130565b511590565b6162a4578260200151156161ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161576f565b8260c00151156162a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161576f565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816162bd57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806163189061a526565b935060ff168151811061632d5761632d61a3b9565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161637e919061a545565b6040516020818303038152906040528282806163999061a526565b935060ff16815181106163ae576163ae61a3b9565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806163fb9061a526565b935060ff16815181106164105761641061a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061645d9061a526565b935060ff16815181106164725761647261a3b9565b6020026020010181905250876020015182828061648e9061a526565b935060ff16815181106164a3576164a361a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806164f09061a526565b935060ff16815181106165055761650561a3b9565b60209081029190910101528751828261651d8161a526565b935060ff16815181106165325761653261a3b9565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061657f9061a526565b935060ff16815181106165945761659461a3b9565b60200260200101819052506165a846617b0b565b82826165b38161a526565b935060ff16815181106165c8576165c861a3b9565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806166159061a526565b935060ff168151811061662a5761662a61a3b9565b6020026020010181905250868282806166429061a526565b935060ff16815181106166575761665761a3b9565b602090810291909101015285511561677e5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826166a88161a526565b935060ff16815181106166bd576166bd61a3b9565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061670d908990600401619f38565b600060405180830381865afa15801561672a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167529190810190619daf565b828261675d8161a526565b935060ff16815181106167725761677261a3b9565b60200260200101819052505b84602001511561684e5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826167c78161a526565b935060ff16815181106167dc576167dc61a3b9565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806168299061a526565b935060ff168151811061683e5761683e61a3b9565b6020026020010181905250616a15565b61688661612b8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6169195760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826168c98161a526565b935060ff16815181106168de576168de61a3b9565b60200260200101819052508460a001516040516020016168fe919061a3e8565b6040516020818303038152906040528282806168299061a526565b8460c0015115801561695c57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261695a90511590565b155b15616a155760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826169a08161a526565b935060ff16815181106169b5576169b561a3b9565b60200260200101819052506169c988617bab565b6040516020016169d9919061a3e8565b6040516020818303038152906040528282806169f49061a526565b935060ff1681518110616a0957616a0961a3b9565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152616a4990511590565b616ade5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282616a8c8161a526565b935060ff1681518110616aa157616aa161a3b9565b60200260200101819052508460400151828280616abd9061a526565b935060ff1681518110616ad257616ad261a3b9565b60200260200101819052505b606085015115616bff5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282616b278161a526565b935060ff1681518110616b3c57616b3c61a3b9565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616bab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616bd39190810190619daf565b8282616bde8161a526565b935060ff1681518110616bf357616bf361a3b9565b60200260200101819052505b60e08501515115616ca65760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616c498161a526565b935060ff1681518110616c5e57616c5e61a3b9565b6020026020010181905250616c7a8560e0015160000151617b0b565b8282616c858161a526565b935060ff1681518110616c9a57616c9a61a3b9565b60200260200101819052505b60e08501516020015115616d505760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616cf38161a526565b935060ff1681518110616d0857616d0861a3b9565b6020026020010181905250616d248560e0015160200151617b0b565b8282616d2f8161a526565b935060ff1681518110616d4457616d4461a3b9565b60200260200101819052505b60e08501516040015115616dfa5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282616d9d8161a526565b935060ff1681518110616db257616db261a3b9565b6020026020010181905250616dce8560e0015160400151617b0b565b8282616dd98161a526565b935060ff1681518110616dee57616dee61a3b9565b60200260200101819052505b60e08501516060015115616ea45760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616e478161a526565b935060ff1681518110616e5c57616e5c61a3b9565b6020026020010181905250616e788560e0015160600151617b0b565b8282616e838161a526565b935060ff1681518110616e9857616e9861a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616ec257616ec2619ce7565b604051908082528060200260200182016040528015616ef557816020015b6060815260200190600190039081616ee05790505b50905060005b8260ff168160ff161015616f4e57838160ff1681518110616f1e57616f1e61a3b9565b6020026020010151828260ff1681518110616f3b57616f3b61a3b9565b6020908102919091010152600101616efb565b5093505050505b949350505050565b616f846040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161700a9186910161a5b0565b600060405180830381865afa158015617027573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261704f9190810190619daf565b9050600061705d868361869a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161708d91906199d7565b6000604051808303816000875af11580156170ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526170d4919081019061a5f7565b805190915060030b158015906170ed5750602081015151155b80156170fc5750604081015151155b156160d657816000815181106171145761711461a3b9565b602002602001015160405160200161572f919061a6ad565b606060006171618560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506171989082905b906187ef565b156172f55760006172158261720f846172096171db8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618816565b90618878565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506172799082906187ef565b156172e357604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172e0905b82906188fd565b90505b6172ec81618923565b9250505061565c565b821561730e57848460405160200161572f92919061a899565b505060408051602081019091526000815261565c565b509392505050565b6000808251602084016000f09392505050565b8160a001511561734e57505050565b600061735b84848461898c565b9050600061736882616f5d565b602081015181519192509060030b1580156174045750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261740490604080518082018252600080825260209182015281518083019092528451825280850190820152617192565b1561741157505050505050565b6040820151511561743157816040015160405160200161572f919061a940565b8060405160200161572f919061a99e565b606060006174778360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506174dc905b8290617aaa565b1561754b57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546908390618f27565b618923565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ad905b8290618fb1565b60010361767a57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617613906172d9565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546905b83906188fd565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176d9906174d5565b1561781057604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061774190839061904b565b9050600081600183516177549190619e5d565b815181106177645761776461a3b9565b602002602001015190506178076175466177da6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618f27565b95945050505050565b8260405160200161572f919061aa09565b50919050565b6060600061785c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506178be906174d5565b156178cc5761565c81618923565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261792b906175a6565b60010361799557604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c9061754690617673565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179f4906174d5565b1561781057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617a5c90839061904b565b9050600181511115617a98578060028251617a779190619e5d565b81518110617a8757617a8761a3b9565b602002602001015192505050919050565b508260405160200161572f919061aa09565b805182516000911115617abf575060006154a7565b81518351602085015160009291617ad591619e4a565b617adf9190619e5d565b905082602001518103617af65760019150506154a7565b82516020840151819020912014905092915050565b60606000617b18836190f0565b600101905060008167ffffffffffffffff811115617b3857617b38619ce7565b6040519080825280601f01601f191660200182016040528015617b62576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617b6c57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617c37905b82906191d2565b15617c7757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cd690617c30565b15617d1657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d7590617c30565b15617db557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e1490617c30565b80617e795750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e7990617c30565b15617eb957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f1890617c30565b80617f7d5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f7d90617c30565b15617fbd57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261801c90617c30565b806180815750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261808190617c30565b156180c157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261812090617c30565b806181855750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261818590617c30565b156181c557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261822490617c30565b1561826457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182c390617c30565b1561830357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261836290617c30565b156183a257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261840190617c30565b1561844157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184a090617c30565b156184e057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261853f90617c30565b806185a45750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185a490617c30565b156185e457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261864390617c30565b1561868357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161572f929060200161aae7565b60608060005b845181101561872557818582815181106186bc576186bc61a3b9565b60200260200101516040516020016186d5929190619fa0565b6040516020818303038152906040529150600185516186f49190619e5d565b811461871d578160405160200161870b919061ac50565b60405160208183030381529060405291505b6001016186a0565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161873e57905050905083816000815181106187695761876961a3b9565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106187bd576187bd61a3b9565b602002602001018190525081816002815181106187dc576187dc61a3b9565b6020908102919091010152949350505050565b602080830151835183519284015160009361880d92918491906191e6565b14159392505050565b6040805180820190915260008082526020820152600061884884600001518560200151856000015186602001516192f7565b905083602001518161885a9190619e5d565b84518590618869908390619e5d565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561889d5750816154a7565b60208083015190840151600191146188c45750815160208481015190840151829020919020145b80156188f5578251845185906188db908390619e5d565b90525082516020850180516188f1908390619e4a565b9052505b509192915050565b604080518082019091526000808252602082015261891c838383619417565b5092915050565b60606000826000015167ffffffffffffffff81111561894457618944619ce7565b6040519080825280601f01601f19166020018201604052801561896e576020820181803683370190505b509050600060208201905061891c81856020015186600001516194c2565b60606000618998615955565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816189b557905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618a109061a526565b935060ff1681518110618a2557618a2561a3b9565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618a76919061ac91565b604051602081830303815290604052828280618a919061a526565b935060ff1681518110618aa657618aa661a3b9565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618af39061a526565b935060ff1681518110618b0857618b0861a3b9565b602002602001018190525082604051602001618b24919061a454565b604051602081830303815290604052828280618b3f9061a526565b935060ff1681518110618b5457618b5461a3b9565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618ba19061a526565b935060ff1681518110618bb657618bb661a3b9565b6020026020010181905250618bcb878461953c565b8282618bd68161a526565b935060ff1681518110618beb57618beb61a3b9565b602090810291909101015285515115618c975760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282618c3d8161a526565b935060ff1681518110618c5257618c5261a3b9565b6020026020010181905250618c6b86600001518461953c565b8282618c768161a526565b935060ff1681518110618c8b57618c8b61a3b9565b60200260200101819052505b856080015115618d055760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282618ce08161a526565b935060ff1681518110618cf557618cf561a3b9565b6020026020010181905250618d6b565b8415618d6b5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282618d4a8161a526565b935060ff1681518110618d5f57618d5f61a3b9565b60200260200101819052505b60408601515115618e075760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618db58161a526565b935060ff1681518110618dca57618dca61a3b9565b60200260200101819052508560400151828280618de69061a526565b935060ff1681518110618dfb57618dfb61a3b9565b60200260200101819052505b856060015115618e715760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618e508161a526565b935060ff1681518110618e6557618e6561a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618e8f57618e8f619ce7565b604051908082528060200260200182016040528015618ec257816020015b6060815260200190600190039081618ead5790505b50905060005b8260ff168160ff161015618f1b57838160ff1681518110618eeb57618eeb61a3b9565b6020026020010151828260ff1681518110618f0857618f0861a3b9565b6020908102919091010152600101618ec8565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618f4c5750816154a7565b81518351602085015160009291618f6291619e4a565b618f6c9190619e5d565b60208401519091506001908214618f8d575082516020840151819020908220145b8015618fa857835185518690618fa4908390619e5d565b9052505b50929392505050565b6000808260000151618fd585600001518660200151866000015187602001516192f7565b618fdf9190619e4a565b90505b83516020850151618ff39190619e4a565b811161891c57816190038161acd6565b925050826000015161903a85602001518361901e9190619e5d565b865161902a9190619e5d565b83866000015187602001516192f7565b6190449190619e4a565b9050618fe2565b606060006190598484618fb1565b619064906001619e4a565b67ffffffffffffffff81111561907c5761907c619ce7565b6040519080825280602002602001820160405280156190af57816020015b606081526020019060019003908161909a5790505b50905060005b8151811015617324576190cb61754686866188fd565b8282815181106190dd576190dd61a3b9565b60209081029190910101526001016190b5565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619139577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619165576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061918357662386f26fc10000830492506010015b6305f5e100831061919b576305f5e100830492506008015b61271083106191af57612710830492506004015b606483106191c1576064830492506002015b600a83106154a75760010192915050565b60006191de838361957c565b159392505050565b6000808584116192ed5760208411619299576000841561923157600161920d866020619e5d565b61921890600861acf0565b61922390600261adee565b61922d9190619e5d565b1990505b83518116856192408989619e4a565b61924a9190619e5d565b805190935082165b8181146192845787841161926c5787945050505050616f55565b836192768161adfa565b945050828451169050619252565b61928e8785619e4a565b945050505050616f55565b8383206192a68588619e5d565b6192b09087619e4a565b91505b8582106192eb578482208082036192d8576192ce8684619e4a565b9350505050616f55565b6192e3600184619e5d565b9250506192b3565b505b5092949350505050565b6000838186851161940257602085116193b1576000851561934357600161931f876020619e5d565b61932a90600861acf0565b61933590600261adee565b61933f9190619e5d565b1990505b845181166000876193548b8b619e4a565b61935e9190619e5d565b855190915083165b8281146193a35781861061938b5761937e8b8b619e4a565b9650505050505050616f55565b856193958161acd6565b965050838651169050619366565b859650505050505050616f55565b508383206000905b6193c38689619e5d565b8211619400578583208082036193df5783945050505050616f55565b6193ea600185619e4a565b93505081806193f89061acd6565b9250506193b9565b505b61940c8787619e4a565b979650505050505050565b6040805180820190915260008082526020820152600061944985600001518660200151866000015187602001516192f7565b6020808701805191860191909152519091506194659082619e5d565b8352845160208601516194789190619e4a565b810361948757600085526194b9565b835183516194959190619e4a565b855186906194a4908390619e5d565b90525083516194b39082619e4a565b60208601525b50909392505050565b602081106194fa57815183526194d9602084619e4a565b92506194e6602083619e4a565b91506194f3602082619e5d565b90506194c2565b6000198115619529576001619510836020619e5d565b61951c9061010061adee565b6195269190619e5d565b90505b9151835183169219169190911790915250565b6060600061954a8484615a28565b80516020808301516040519394506195649390910161ae11565b60405160208183030381529060405291505092915050565b815181516000919081111561958f575081515b6020808501519084015160005b8381101561964857825182518082146196185760001960208710156195f7576001846195c9896020619e5d565b6195d39190619e4a565b6195de90600861acf0565b6195e990600261adee565b6195f39190619e5d565b1990505b81811683821681810391146196155797506154a79650505050505050565b50505b619623602086619e4a565b9450619630602085619e4a565b935050506020816196419190619e4a565b905061959c565b50845186516160d6919061ae69565b610b678061ae8a83390190565b61106f8061b9f183390190565b6120728061ca6083390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016196c16196c6565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016196c16040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156197785783516001600160a01b0316835260209384019390920191600101619751565b509095945050505050565b60005b8381101561979e578181015183820152602001619786565b50506000910152565b600081518084526197bf816020860160208601619783565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156198b5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261989f8486516197a7565b6020958601959094509290920191600101619865565b5091975050506020948501949290920191506001016197fb565b50929695505050505050565b600081518084526020840193506020830160005b8281101561992f5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016198ef565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526199a560408801826197a7565b90506020820151915086810360208801526199c081836198db565b965050506020938401939190910190600101619961565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619a398583516197a7565b945060209384019391909101906001016199ff565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152619acf60408701826198db565b9550506020938401939190910190600101619a76565b600060208284031215619af757600080fd5b8151801515811461565c57600080fd5b80516001600160a01b0381168114619b1e57600080fd5b919050565b600060208284031215619b3557600080fd5b61565c82619b07565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619bf8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152619c1960c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215619c4557600080fd5b5051919050565b600181811c90821680619c6057607f821691505b602082108103617821577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008060408385031215619cac57600080fd5b619cb583619b07565b6020939093015192949293505050565b604081526000619cd860408301856197a7565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619d3957619d39619ce7565b60405290565b60008067ffffffffffffffff841115619d5a57619d5a619ce7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619d8957619d89619ce7565b604052838152905080828401851015619da157600080fd5b617324846020830185619783565b600060208284031215619dc157600080fd5b815167ffffffffffffffff811115619dd857600080fd5b8201601f81018413619de957600080fd5b6154a384825160208401619d3f565b600060208284031215619e0a57600080fd5b815160ff8116811461565c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156154a7576154a7619e1b565b818103818111156154a7576154a7619e1b565b604081526000619e8360408301856197a7565b828103602084015261565881856197a7565b6001600160a01b0383168152604060208201526000616f5560408301846197a7565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619eef81601a850160208801619783565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351619f2c81601c840160208801619783565b01601c01949350505050565b60208152600061565c60208301846197a7565b600082601f830112619f5c57600080fd5b61565c83835160208501619d3f565b600060208284031215619f7d57600080fd5b815167ffffffffffffffff811115619f9457600080fd5b6154a384828501619f4b565b60008351619fb2818460208801619783565b835190830190619fc6818360208801619783565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a00781601a850160208801619783565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a044816033840160208801619783565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061565c60808301846197a7565b6000855161a0d3818460208a01619783565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a10d816001840160208a01619783565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a14b816002840160208901619783565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a18d816002840160208801619783565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a1d860408301846197a7565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a24f81601f850160208701619783565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a2bc60408301846197a7565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a30e60408301846197a7565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a385816014850160208701619783565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a420816001850160208701619783565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a466818460208701619783565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a51981604b850160208701619783565b91909101604b0192915050565b600060ff821660ff810361a53c5761a53c619e1b565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061565c60808301846197a7565b60006020828403121561a60957600080fd5b815167ffffffffffffffff81111561a62057600080fd5b82016060818503121561a63257600080fd5b61a63a619d16565b81518060030b811461a64b57600080fd5b8152602082015167ffffffffffffffff81111561a66757600080fd5b61a67386828501619f4b565b602083015250604082015167ffffffffffffffff81111561a69357600080fd5b61a69f86828501619f4b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a70b816021850160208701619783565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a8f7816021850160208801619783565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a93481602e840160208801619783565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a9fc816022850160208701619783565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161aa4181600e850160208701619783565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161ab1f816018850160208801619783565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161ab5c81601c840160208801619783565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ac62818460208701619783565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161acc981601c850160208701619783565b91909101601c0192915050565b6000600019820361ace95761ace9619e1b565b5060010190565b80820281158282048414176154a7576154a7619e1b565b6001815b600184111561ad425780850481111561ad265761ad26619e1b565b600184161561ad3457908102905b60019390931c92800261ad0b565b935093915050565b60008261ad59575060016154a7565b8161ad66575060006154a7565b816001811461ad7c576002811461ad865761ada2565b60019150506154a7565b60ff84111561ad975761ad97619e1b565b50506001821b6154a7565b5060208310610133831016604e8410600b841016171561adc5575081810a6154a7565b61add2600019848461ad07565b806000190482111561ade65761ade6619e1b565b029392505050565b600061565c838361ad4a565b60008161ae095761ae09619e1b565b506000190190565b6000835161ae23818460208801619783565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161ae5d816001840160208801619783565b01600101949350505050565b818103600083128015838313168383128216171561891c5761891c619e1b56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201bc2c2e5533a7390cd5c9f230b641bee17c3057fdf7a0f92b4302cd8cea1ce6764736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a26469706673582212207679d762a17feff675aebf357ebfddb539e213cd243b94ddb29e790e14f23c9a64736f6c634300081a0033", } // ZRC20TestABI is the input ABI used to generate the binding from. diff --git a/v2/types/ERC20Custody.ts b/v2/types/ERC20Custody.ts index 176e98501..6c7e757c8 100644 --- a/v2/types/ERC20Custody.ts +++ b/v2/types/ERC20Custody.ts @@ -40,6 +40,7 @@ export interface ERC20CustodyInterface extends Interface { nameOrSignature: | "DEFAULT_ADMIN_ROLE" | "PAUSER_ROLE" + | "UPGRADE_INTERFACE_VERSION" | "WHITELISTER_ROLE" | "WITHDRAWER_ROLE" | "deposit" @@ -47,8 +48,10 @@ export interface ERC20CustodyInterface extends Interface { | "getRoleAdmin" | "grantRole" | "hasRole" + | "initialize" | "pause" | "paused" + | "proxiableUUID" | "renounceRole" | "revokeRole" | "setSupportsLegacy" @@ -58,6 +61,7 @@ export interface ERC20CustodyInterface extends Interface { | "unpause" | "unwhitelist" | "updateTSSAddress" + | "upgradeToAndCall" | "whitelist" | "whitelisted" | "withdraw" @@ -68,6 +72,7 @@ export interface ERC20CustodyInterface extends Interface { getEvent( nameOrSignatureOrTopic: | "Deposited" + | "Initialized" | "Paused" | "RoleAdminChanged" | "RoleGranted" @@ -75,6 +80,7 @@ export interface ERC20CustodyInterface extends Interface { | "Unpaused" | "Unwhitelisted" | "UpdatedCustodyTSSAddress" + | "Upgraded" | "Whitelisted" | "Withdrawn" | "WithdrawnAndCalled" @@ -89,6 +95,10 @@ export interface ERC20CustodyInterface extends Interface { functionFragment: "PAUSER_ROLE", values?: undefined ): string; + encodeFunctionData( + functionFragment: "UPGRADE_INTERFACE_VERSION", + values?: undefined + ): string; encodeFunctionData( functionFragment: "WHITELISTER_ROLE", values?: undefined @@ -114,8 +124,16 @@ export interface ERC20CustodyInterface extends Interface { functionFragment: "hasRole", values: [BytesLike, AddressLike] ): string; + encodeFunctionData( + functionFragment: "initialize", + values: [AddressLike, AddressLike, AddressLike] + ): string; encodeFunctionData(functionFragment: "pause", values?: undefined): string; encodeFunctionData(functionFragment: "paused", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; encodeFunctionData( functionFragment: "renounceRole", values: [BytesLike, AddressLike] @@ -149,6 +167,10 @@ export interface ERC20CustodyInterface extends Interface { functionFragment: "updateTSSAddress", values: [AddressLike] ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [AddressLike, BytesLike] + ): string; encodeFunctionData( functionFragment: "whitelist", values: [AddressLike] @@ -184,6 +206,10 @@ export interface ERC20CustodyInterface extends Interface { functionFragment: "PAUSER_ROLE", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "UPGRADE_INTERFACE_VERSION", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "WHITELISTER_ROLE", data: BytesLike @@ -200,8 +226,13 @@ export interface ERC20CustodyInterface extends Interface { ): Result; decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result; decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "renounceRole", data: BytesLike @@ -229,6 +260,10 @@ export interface ERC20CustodyInterface extends Interface { functionFragment: "updateTSSAddress", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "whitelist", data: BytesLike): Result; decodeFunctionResult( functionFragment: "whitelisted", @@ -270,6 +305,18 @@ export namespace DepositedEvent { export type LogDescription = TypedLogDescription; } +export namespace InitializedEvent { + export type InputTuple = [version: BigNumberish]; + export type OutputTuple = [version: bigint]; + export interface OutputObject { + version: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace PausedEvent { export type InputTuple = [account: AddressLike]; export type OutputTuple = [account: string]; @@ -365,9 +412,13 @@ export namespace UnwhitelistedEvent { } export namespace UpdatedCustodyTSSAddressEvent { - export type InputTuple = [newTSSAddress: AddressLike]; - export type OutputTuple = [newTSSAddress: string]; + export type InputTuple = [ + oldTSSAddress: AddressLike, + newTSSAddress: AddressLike + ]; + export type OutputTuple = [oldTSSAddress: string, newTSSAddress: string]; export interface OutputObject { + oldTSSAddress: string; newTSSAddress: string; } export type Event = TypedContractEvent; @@ -376,6 +427,18 @@ export namespace UpdatedCustodyTSSAddressEvent { export type LogDescription = TypedLogDescription; } +export namespace UpgradedEvent { + export type InputTuple = [implementation: AddressLike]; + export type OutputTuple = [implementation: string]; + export interface OutputObject { + implementation: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace WhitelistedEvent { export type InputTuple = [token: AddressLike]; export type OutputTuple = [token: string]; @@ -506,6 +569,8 @@ export interface ERC20Custody extends BaseContract { PAUSER_ROLE: TypedContractMethod<[], [string], "view">; + UPGRADE_INTERFACE_VERSION: TypedContractMethod<[], [string], "view">; + WHITELISTER_ROLE: TypedContractMethod<[], [string], "view">; WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; @@ -537,10 +602,18 @@ export interface ERC20Custody extends BaseContract { "view" >; + initialize: TypedContractMethod< + [gateway_: AddressLike, tssAddress_: AddressLike, admin_: AddressLike], + [void], + "nonpayable" + >; + pause: TypedContractMethod<[], [void], "nonpayable">; paused: TypedContractMethod<[], [boolean], "view">; + proxiableUUID: TypedContractMethod<[], [string], "view">; + renounceRole: TypedContractMethod< [role: BytesLike, callerConfirmation: AddressLike], [void], @@ -579,6 +652,12 @@ export interface ERC20Custody extends BaseContract { "nonpayable" >; + upgradeToAndCall: TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; + whitelist: TypedContractMethod<[token: AddressLike], [void], "nonpayable">; whitelisted: TypedContractMethod<[arg0: AddressLike], [boolean], "view">; @@ -622,6 +701,9 @@ export interface ERC20Custody extends BaseContract { getFunction( nameOrSignature: "PAUSER_ROLE" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "UPGRADE_INTERFACE_VERSION" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "WHITELISTER_ROLE" ): TypedContractMethod<[], [string], "view">; @@ -660,12 +742,22 @@ export interface ERC20Custody extends BaseContract { [boolean], "view" >; + getFunction( + nameOrSignature: "initialize" + ): TypedContractMethod< + [gateway_: AddressLike, tssAddress_: AddressLike, admin_: AddressLike], + [void], + "nonpayable" + >; getFunction( nameOrSignature: "pause" ): TypedContractMethod<[], [void], "nonpayable">; getFunction( nameOrSignature: "paused" ): TypedContractMethod<[], [boolean], "view">; + getFunction( + nameOrSignature: "proxiableUUID" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "renounceRole" ): TypedContractMethod< @@ -701,6 +793,13 @@ export interface ERC20Custody extends BaseContract { getFunction( nameOrSignature: "updateTSSAddress" ): TypedContractMethod<[newTSSAddress: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "upgradeToAndCall" + ): TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; getFunction( nameOrSignature: "whitelist" ): TypedContractMethod<[token: AddressLike], [void], "nonpayable">; @@ -747,6 +846,13 @@ export interface ERC20Custody extends BaseContract { DepositedEvent.OutputTuple, DepositedEvent.OutputObject >; + getEvent( + key: "Initialized" + ): TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; getEvent( key: "Paused" ): TypedContractEvent< @@ -796,6 +902,13 @@ export interface ERC20Custody extends BaseContract { UpdatedCustodyTSSAddressEvent.OutputTuple, UpdatedCustodyTSSAddressEvent.OutputObject >; + getEvent( + key: "Upgraded" + ): TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; getEvent( key: "Whitelisted" ): TypedContractEvent< @@ -837,6 +950,17 @@ export interface ERC20Custody extends BaseContract { DepositedEvent.OutputObject >; + "Initialized(uint64)": TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + Initialized: TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + "Paused(address)": TypedContractEvent< PausedEvent.InputTuple, PausedEvent.OutputTuple, @@ -903,7 +1027,7 @@ export interface ERC20Custody extends BaseContract { UnwhitelistedEvent.OutputObject >; - "UpdatedCustodyTSSAddress(address)": TypedContractEvent< + "UpdatedCustodyTSSAddress(address,address)": TypedContractEvent< UpdatedCustodyTSSAddressEvent.InputTuple, UpdatedCustodyTSSAddressEvent.OutputTuple, UpdatedCustodyTSSAddressEvent.OutputObject @@ -914,6 +1038,17 @@ export interface ERC20Custody extends BaseContract { UpdatedCustodyTSSAddressEvent.OutputObject >; + "Upgraded(address)": TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + Upgraded: TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + "Whitelisted(address)": TypedContractEvent< WhitelistedEvent.InputTuple, WhitelistedEvent.OutputTuple, diff --git a/v2/types/ERC20CustodyUpgradeTest.ts b/v2/types/ERC20CustodyUpgradeTest.ts new file mode 100644 index 000000000..7bb74b834 --- /dev/null +++ b/v2/types/ERC20CustodyUpgradeTest.ts @@ -0,0 +1,1133 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + EventFragment, + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, + TypedListener, + TypedContractMethod, +} from "./common"; + +export type RevertContextStruct = { + asset: AddressLike; + amount: BigNumberish; + revertMessage: BytesLike; +}; + +export type RevertContextStructOutput = [ + asset: string, + amount: bigint, + revertMessage: string +] & { asset: string; amount: bigint; revertMessage: string }; + +export interface ERC20CustodyUpgradeTestInterface extends Interface { + getFunction( + nameOrSignature: + | "DEFAULT_ADMIN_ROLE" + | "PAUSER_ROLE" + | "UPGRADE_INTERFACE_VERSION" + | "WHITELISTER_ROLE" + | "WITHDRAWER_ROLE" + | "deposit" + | "gateway" + | "getRoleAdmin" + | "grantRole" + | "hasRole" + | "initialize" + | "pause" + | "paused" + | "proxiableUUID" + | "renounceRole" + | "revokeRole" + | "setSupportsLegacy" + | "supportsInterface" + | "supportsLegacy" + | "tssAddress" + | "unpause" + | "unwhitelist" + | "updateTSSAddress" + | "upgradeToAndCall" + | "whitelist" + | "whitelisted" + | "withdraw" + | "withdrawAndCall" + | "withdrawAndRevert" + ): FunctionFragment; + + getEvent( + nameOrSignatureOrTopic: + | "Deposited" + | "Initialized" + | "Paused" + | "RoleAdminChanged" + | "RoleGranted" + | "RoleRevoked" + | "Unpaused" + | "Unwhitelisted" + | "UpdatedCustodyTSSAddress" + | "Upgraded" + | "Whitelisted" + | "Withdrawn" + | "WithdrawnAndCalled" + | "WithdrawnAndReverted" + | "WithdrawnV2" + ): EventFragment; + + encodeFunctionData( + functionFragment: "DEFAULT_ADMIN_ROLE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "PAUSER_ROLE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "UPGRADE_INTERFACE_VERSION", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "WHITELISTER_ROLE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "WITHDRAWER_ROLE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "deposit", + values: [BytesLike, AddressLike, BigNumberish, BytesLike] + ): string; + encodeFunctionData(functionFragment: "gateway", values?: undefined): string; + encodeFunctionData( + functionFragment: "getRoleAdmin", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "grantRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "hasRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "initialize", + values: [AddressLike, AddressLike, AddressLike] + ): string; + encodeFunctionData(functionFragment: "pause", values?: undefined): string; + encodeFunctionData(functionFragment: "paused", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "renounceRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "revokeRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "setSupportsLegacy", + values: [boolean] + ): string; + encodeFunctionData( + functionFragment: "supportsInterface", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "supportsLegacy", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "tssAddress", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData( + functionFragment: "unwhitelist", + values: [AddressLike] + ): string; + encodeFunctionData( + functionFragment: "updateTSSAddress", + values: [AddressLike] + ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [AddressLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "whitelist", + values: [AddressLike] + ): string; + encodeFunctionData( + functionFragment: "whitelisted", + values: [AddressLike] + ): string; + encodeFunctionData( + functionFragment: "withdraw", + values: [AddressLike, AddressLike, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "withdrawAndCall", + values: [AddressLike, AddressLike, BigNumberish, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "withdrawAndRevert", + values: [ + AddressLike, + AddressLike, + BigNumberish, + BytesLike, + RevertContextStruct + ] + ): string; + + decodeFunctionResult( + functionFragment: "DEFAULT_ADMIN_ROLE", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "PAUSER_ROLE", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "UPGRADE_INTERFACE_VERSION", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "WHITELISTER_ROLE", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "WITHDRAWER_ROLE", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getRoleAdmin", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "renounceRole", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "revokeRole", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "setSupportsLegacy", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "supportsInterface", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "supportsLegacy", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "tssAddress", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "unwhitelist", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateTSSAddress", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "whitelist", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "whitelisted", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "withdrawAndCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawAndRevert", + data: BytesLike + ): Result; +} + +export namespace DepositedEvent { + export type InputTuple = [ + recipient: BytesLike, + asset: AddressLike, + amount: BigNumberish, + message: BytesLike + ]; + export type OutputTuple = [ + recipient: string, + asset: string, + amount: bigint, + message: string + ]; + export interface OutputObject { + recipient: string; + asset: string; + amount: bigint; + message: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace InitializedEvent { + export type InputTuple = [version: BigNumberish]; + export type OutputTuple = [version: bigint]; + export interface OutputObject { + version: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace PausedEvent { + export type InputTuple = [account: AddressLike]; + export type OutputTuple = [account: string]; + export interface OutputObject { + account: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace RoleAdminChangedEvent { + export type InputTuple = [ + role: BytesLike, + previousAdminRole: BytesLike, + newAdminRole: BytesLike + ]; + export type OutputTuple = [ + role: string, + previousAdminRole: string, + newAdminRole: string + ]; + export interface OutputObject { + role: string; + previousAdminRole: string; + newAdminRole: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace RoleGrantedEvent { + export type InputTuple = [ + role: BytesLike, + account: AddressLike, + sender: AddressLike + ]; + export type OutputTuple = [role: string, account: string, sender: string]; + export interface OutputObject { + role: string; + account: string; + sender: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace RoleRevokedEvent { + export type InputTuple = [ + role: BytesLike, + account: AddressLike, + sender: AddressLike + ]; + export type OutputTuple = [role: string, account: string, sender: string]; + export interface OutputObject { + role: string; + account: string; + sender: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace UnpausedEvent { + export type InputTuple = [account: AddressLike]; + export type OutputTuple = [account: string]; + export interface OutputObject { + account: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace UnwhitelistedEvent { + export type InputTuple = [token: AddressLike]; + export type OutputTuple = [token: string]; + export interface OutputObject { + token: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace UpdatedCustodyTSSAddressEvent { + export type InputTuple = [ + oldTSSAddress: AddressLike, + newTSSAddress: AddressLike + ]; + export type OutputTuple = [oldTSSAddress: string, newTSSAddress: string]; + export interface OutputObject { + oldTSSAddress: string; + newTSSAddress: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace UpgradedEvent { + export type InputTuple = [implementation: AddressLike]; + export type OutputTuple = [implementation: string]; + export interface OutputObject { + implementation: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WhitelistedEvent { + export type InputTuple = [token: AddressLike]; + export type OutputTuple = [token: string]; + export interface OutputObject { + token: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawnEvent { + export type InputTuple = [ + to: AddressLike, + token: AddressLike, + amount: BigNumberish + ]; + export type OutputTuple = [to: string, token: string, amount: bigint]; + export interface OutputObject { + to: string; + token: string; + amount: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawnAndCalledEvent { + export type InputTuple = [ + to: AddressLike, + token: AddressLike, + amount: BigNumberish, + data: BytesLike + ]; + export type OutputTuple = [ + to: string, + token: string, + amount: bigint, + data: string + ]; + export interface OutputObject { + to: string; + token: string; + amount: bigint; + data: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawnAndRevertedEvent { + export type InputTuple = [ + to: AddressLike, + token: AddressLike, + amount: BigNumberish, + data: BytesLike, + revertContext: RevertContextStruct + ]; + export type OutputTuple = [ + to: string, + token: string, + amount: bigint, + data: string, + revertContext: RevertContextStructOutput + ]; + export interface OutputObject { + to: string; + token: string; + amount: bigint; + data: string; + revertContext: RevertContextStructOutput; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawnV2Event { + export type InputTuple = [ + to: AddressLike, + token: AddressLike, + amount: BigNumberish + ]; + export type OutputTuple = [to: string, token: string, amount: bigint]; + export interface OutputObject { + to: string; + token: string; + amount: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export interface ERC20CustodyUpgradeTest extends BaseContract { + connect(runner?: ContractRunner | null): ERC20CustodyUpgradeTest; + waitForDeployment(): Promise; + + interface: ERC20CustodyUpgradeTestInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + DEFAULT_ADMIN_ROLE: TypedContractMethod<[], [string], "view">; + + PAUSER_ROLE: TypedContractMethod<[], [string], "view">; + + UPGRADE_INTERFACE_VERSION: TypedContractMethod<[], [string], "view">; + + WHITELISTER_ROLE: TypedContractMethod<[], [string], "view">; + + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; + + deposit: TypedContractMethod< + [ + recipient: BytesLike, + asset: AddressLike, + amount: BigNumberish, + message: BytesLike + ], + [void], + "nonpayable" + >; + + gateway: TypedContractMethod<[], [string], "view">; + + getRoleAdmin: TypedContractMethod<[role: BytesLike], [string], "view">; + + grantRole: TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + + hasRole: TypedContractMethod< + [role: BytesLike, account: AddressLike], + [boolean], + "view" + >; + + initialize: TypedContractMethod< + [gateway_: AddressLike, tssAddress_: AddressLike, admin_: AddressLike], + [void], + "nonpayable" + >; + + pause: TypedContractMethod<[], [void], "nonpayable">; + + paused: TypedContractMethod<[], [boolean], "view">; + + proxiableUUID: TypedContractMethod<[], [string], "view">; + + renounceRole: TypedContractMethod< + [role: BytesLike, callerConfirmation: AddressLike], + [void], + "nonpayable" + >; + + revokeRole: TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + + setSupportsLegacy: TypedContractMethod< + [_supportsLegacy: boolean], + [void], + "nonpayable" + >; + + supportsInterface: TypedContractMethod< + [interfaceId: BytesLike], + [boolean], + "view" + >; + + supportsLegacy: TypedContractMethod<[], [boolean], "view">; + + tssAddress: TypedContractMethod<[], [string], "view">; + + unpause: TypedContractMethod<[], [void], "nonpayable">; + + unwhitelist: TypedContractMethod<[token: AddressLike], [void], "nonpayable">; + + updateTSSAddress: TypedContractMethod< + [newTSSAddress: AddressLike], + [void], + "nonpayable" + >; + + upgradeToAndCall: TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; + + whitelist: TypedContractMethod<[token: AddressLike], [void], "nonpayable">; + + whitelisted: TypedContractMethod<[arg0: AddressLike], [boolean], "view">; + + withdraw: TypedContractMethod< + [to: AddressLike, token: AddressLike, amount: BigNumberish], + [void], + "nonpayable" + >; + + withdrawAndCall: TypedContractMethod< + [ + to: AddressLike, + token: AddressLike, + amount: BigNumberish, + data: BytesLike + ], + [void], + "nonpayable" + >; + + withdrawAndRevert: TypedContractMethod< + [ + to: AddressLike, + token: AddressLike, + amount: BigNumberish, + data: BytesLike, + revertContext: RevertContextStruct + ], + [void], + "nonpayable" + >; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "DEFAULT_ADMIN_ROLE" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "PAUSER_ROLE" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "UPGRADE_INTERFACE_VERSION" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "WHITELISTER_ROLE" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "WITHDRAWER_ROLE" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "deposit" + ): TypedContractMethod< + [ + recipient: BytesLike, + asset: AddressLike, + amount: BigNumberish, + message: BytesLike + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "gateway" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "getRoleAdmin" + ): TypedContractMethod<[role: BytesLike], [string], "view">; + getFunction( + nameOrSignature: "grantRole" + ): TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "hasRole" + ): TypedContractMethod< + [role: BytesLike, account: AddressLike], + [boolean], + "view" + >; + getFunction( + nameOrSignature: "initialize" + ): TypedContractMethod< + [gateway_: AddressLike, tssAddress_: AddressLike, admin_: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "pause" + ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "paused" + ): TypedContractMethod<[], [boolean], "view">; + getFunction( + nameOrSignature: "proxiableUUID" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "renounceRole" + ): TypedContractMethod< + [role: BytesLike, callerConfirmation: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "revokeRole" + ): TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "setSupportsLegacy" + ): TypedContractMethod<[_supportsLegacy: boolean], [void], "nonpayable">; + getFunction( + nameOrSignature: "supportsInterface" + ): TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">; + getFunction( + nameOrSignature: "supportsLegacy" + ): TypedContractMethod<[], [boolean], "view">; + getFunction( + nameOrSignature: "tssAddress" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "unpause" + ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "unwhitelist" + ): TypedContractMethod<[token: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "updateTSSAddress" + ): TypedContractMethod<[newTSSAddress: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "upgradeToAndCall" + ): TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; + getFunction( + nameOrSignature: "whitelist" + ): TypedContractMethod<[token: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "whitelisted" + ): TypedContractMethod<[arg0: AddressLike], [boolean], "view">; + getFunction( + nameOrSignature: "withdraw" + ): TypedContractMethod< + [to: AddressLike, token: AddressLike, amount: BigNumberish], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "withdrawAndCall" + ): TypedContractMethod< + [ + to: AddressLike, + token: AddressLike, + amount: BigNumberish, + data: BytesLike + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "withdrawAndRevert" + ): TypedContractMethod< + [ + to: AddressLike, + token: AddressLike, + amount: BigNumberish, + data: BytesLike, + revertContext: RevertContextStruct + ], + [void], + "nonpayable" + >; + + getEvent( + key: "Deposited" + ): TypedContractEvent< + DepositedEvent.InputTuple, + DepositedEvent.OutputTuple, + DepositedEvent.OutputObject + >; + getEvent( + key: "Initialized" + ): TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + getEvent( + key: "Paused" + ): TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + getEvent( + key: "RoleAdminChanged" + ): TypedContractEvent< + RoleAdminChangedEvent.InputTuple, + RoleAdminChangedEvent.OutputTuple, + RoleAdminChangedEvent.OutputObject + >; + getEvent( + key: "RoleGranted" + ): TypedContractEvent< + RoleGrantedEvent.InputTuple, + RoleGrantedEvent.OutputTuple, + RoleGrantedEvent.OutputObject + >; + getEvent( + key: "RoleRevoked" + ): TypedContractEvent< + RoleRevokedEvent.InputTuple, + RoleRevokedEvent.OutputTuple, + RoleRevokedEvent.OutputObject + >; + getEvent( + key: "Unpaused" + ): TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + getEvent( + key: "Unwhitelisted" + ): TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + getEvent( + key: "UpdatedCustodyTSSAddress" + ): TypedContractEvent< + UpdatedCustodyTSSAddressEvent.InputTuple, + UpdatedCustodyTSSAddressEvent.OutputTuple, + UpdatedCustodyTSSAddressEvent.OutputObject + >; + getEvent( + key: "Upgraded" + ): TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + getEvent( + key: "Whitelisted" + ): TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; + getEvent( + key: "Withdrawn" + ): TypedContractEvent< + WithdrawnEvent.InputTuple, + WithdrawnEvent.OutputTuple, + WithdrawnEvent.OutputObject + >; + getEvent( + key: "WithdrawnAndCalled" + ): TypedContractEvent< + WithdrawnAndCalledEvent.InputTuple, + WithdrawnAndCalledEvent.OutputTuple, + WithdrawnAndCalledEvent.OutputObject + >; + getEvent( + key: "WithdrawnAndReverted" + ): TypedContractEvent< + WithdrawnAndRevertedEvent.InputTuple, + WithdrawnAndRevertedEvent.OutputTuple, + WithdrawnAndRevertedEvent.OutputObject + >; + getEvent( + key: "WithdrawnV2" + ): TypedContractEvent< + WithdrawnV2Event.InputTuple, + WithdrawnV2Event.OutputTuple, + WithdrawnV2Event.OutputObject + >; + + filters: { + "Deposited(bytes,address,uint256,bytes)": TypedContractEvent< + DepositedEvent.InputTuple, + DepositedEvent.OutputTuple, + DepositedEvent.OutputObject + >; + Deposited: TypedContractEvent< + DepositedEvent.InputTuple, + DepositedEvent.OutputTuple, + DepositedEvent.OutputObject + >; + + "Initialized(uint64)": TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + Initialized: TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + + "Paused(address)": TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + Paused: TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + + "RoleAdminChanged(bytes32,bytes32,bytes32)": TypedContractEvent< + RoleAdminChangedEvent.InputTuple, + RoleAdminChangedEvent.OutputTuple, + RoleAdminChangedEvent.OutputObject + >; + RoleAdminChanged: TypedContractEvent< + RoleAdminChangedEvent.InputTuple, + RoleAdminChangedEvent.OutputTuple, + RoleAdminChangedEvent.OutputObject + >; + + "RoleGranted(bytes32,address,address)": TypedContractEvent< + RoleGrantedEvent.InputTuple, + RoleGrantedEvent.OutputTuple, + RoleGrantedEvent.OutputObject + >; + RoleGranted: TypedContractEvent< + RoleGrantedEvent.InputTuple, + RoleGrantedEvent.OutputTuple, + RoleGrantedEvent.OutputObject + >; + + "RoleRevoked(bytes32,address,address)": TypedContractEvent< + RoleRevokedEvent.InputTuple, + RoleRevokedEvent.OutputTuple, + RoleRevokedEvent.OutputObject + >; + RoleRevoked: TypedContractEvent< + RoleRevokedEvent.InputTuple, + RoleRevokedEvent.OutputTuple, + RoleRevokedEvent.OutputObject + >; + + "Unpaused(address)": TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + Unpaused: TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + + "Unwhitelisted(address)": TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + Unwhitelisted: TypedContractEvent< + UnwhitelistedEvent.InputTuple, + UnwhitelistedEvent.OutputTuple, + UnwhitelistedEvent.OutputObject + >; + + "UpdatedCustodyTSSAddress(address,address)": TypedContractEvent< + UpdatedCustodyTSSAddressEvent.InputTuple, + UpdatedCustodyTSSAddressEvent.OutputTuple, + UpdatedCustodyTSSAddressEvent.OutputObject + >; + UpdatedCustodyTSSAddress: TypedContractEvent< + UpdatedCustodyTSSAddressEvent.InputTuple, + UpdatedCustodyTSSAddressEvent.OutputTuple, + UpdatedCustodyTSSAddressEvent.OutputObject + >; + + "Upgraded(address)": TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + Upgraded: TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + + "Whitelisted(address)": TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; + Whitelisted: TypedContractEvent< + WhitelistedEvent.InputTuple, + WhitelistedEvent.OutputTuple, + WhitelistedEvent.OutputObject + >; + + "Withdrawn(address,address,uint256)": TypedContractEvent< + WithdrawnEvent.InputTuple, + WithdrawnEvent.OutputTuple, + WithdrawnEvent.OutputObject + >; + Withdrawn: TypedContractEvent< + WithdrawnEvent.InputTuple, + WithdrawnEvent.OutputTuple, + WithdrawnEvent.OutputObject + >; + + "WithdrawnAndCalled(address,address,uint256,bytes)": TypedContractEvent< + WithdrawnAndCalledEvent.InputTuple, + WithdrawnAndCalledEvent.OutputTuple, + WithdrawnAndCalledEvent.OutputObject + >; + WithdrawnAndCalled: TypedContractEvent< + WithdrawnAndCalledEvent.InputTuple, + WithdrawnAndCalledEvent.OutputTuple, + WithdrawnAndCalledEvent.OutputObject + >; + + "WithdrawnAndReverted(address,address,uint256,bytes,tuple)": TypedContractEvent< + WithdrawnAndRevertedEvent.InputTuple, + WithdrawnAndRevertedEvent.OutputTuple, + WithdrawnAndRevertedEvent.OutputObject + >; + WithdrawnAndReverted: TypedContractEvent< + WithdrawnAndRevertedEvent.InputTuple, + WithdrawnAndRevertedEvent.OutputTuple, + WithdrawnAndRevertedEvent.OutputObject + >; + + "WithdrawnV2(address,address,uint256)": TypedContractEvent< + WithdrawnV2Event.InputTuple, + WithdrawnV2Event.OutputTuple, + WithdrawnV2Event.OutputObject + >; + WithdrawnV2: TypedContractEvent< + WithdrawnV2Event.InputTuple, + WithdrawnV2Event.OutputTuple, + WithdrawnV2Event.OutputObject + >; + }; +} diff --git a/v2/types/GatewayEVM.ts b/v2/types/GatewayEVM.ts index f3712dd89..bcf60e4ff 100644 --- a/v2/types/GatewayEVM.ts +++ b/v2/types/GatewayEVM.ts @@ -562,9 +562,13 @@ export namespace UnpausedEvent { } export namespace UpdatedGatewayTSSAddressEvent { - export type InputTuple = [newTSSAddress: AddressLike]; - export type OutputTuple = [newTSSAddress: string]; + export type InputTuple = [ + oldTSSAddress: AddressLike, + newTSSAddress: AddressLike + ]; + export type OutputTuple = [oldTSSAddress: string, newTSSAddress: string]; export interface OutputObject { + oldTSSAddress: string; newTSSAddress: string; } export type Event = TypedContractEvent; @@ -1221,7 +1225,7 @@ export interface GatewayEVM extends BaseContract { UnpausedEvent.OutputObject >; - "UpdatedGatewayTSSAddress(address)": TypedContractEvent< + "UpdatedGatewayTSSAddress(address,address)": TypedContractEvent< UpdatedGatewayTSSAddressEvent.InputTuple, UpdatedGatewayTSSAddressEvent.OutputTuple, UpdatedGatewayTSSAddressEvent.OutputObject diff --git a/v2/types/GatewayEVMUpgradeTest.ts b/v2/types/GatewayEVMUpgradeTest.ts index dac530368..417f95f18 100644 --- a/v2/types/GatewayEVMUpgradeTest.ts +++ b/v2/types/GatewayEVMUpgradeTest.ts @@ -62,6 +62,7 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { nameOrSignature: | "ASSET_HANDLER_ROLE" | "DEFAULT_ADMIN_ROLE" + | "MAX_PAYLOAD_SIZE" | "PAUSER_ROLE" | "TSS_ROLE" | "UPGRADE_INTERFACE_VERSION" @@ -89,6 +90,7 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { | "supportsInterface" | "tssAddress" | "unpause" + | "updateTSSAddress" | "upgradeToAndCall" | "zetaConnector" | "zetaToken" @@ -120,6 +122,10 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { functionFragment: "DEFAULT_ADMIN_ROLE", values?: undefined ): string; + encodeFunctionData( + functionFragment: "MAX_PAYLOAD_SIZE", + values?: undefined + ): string; encodeFunctionData( functionFragment: "PAUSER_ROLE", values?: undefined @@ -225,6 +231,10 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { values?: undefined ): string; encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData( + functionFragment: "updateTSSAddress", + values: [AddressLike] + ): string; encodeFunctionData( functionFragment: "upgradeToAndCall", values: [AddressLike, BytesLike] @@ -243,6 +253,10 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { functionFragment: "DEFAULT_ADMIN_ROLE", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "MAX_PAYLOAD_SIZE", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "PAUSER_ROLE", data: BytesLike @@ -312,6 +326,10 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { ): Result; decodeFunctionResult(functionFragment: "tssAddress", data: BytesLike): Result; decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "updateTSSAddress", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "upgradeToAndCall", data: BytesLike @@ -563,9 +581,13 @@ export namespace UnpausedEvent { } export namespace UpdatedGatewayTSSAddressEvent { - export type InputTuple = [newTSSAddress: AddressLike]; - export type OutputTuple = [newTSSAddress: string]; + export type InputTuple = [ + oldTSSAddress: AddressLike, + newTSSAddress: AddressLike + ]; + export type OutputTuple = [oldTSSAddress: string, newTSSAddress: string]; export interface OutputObject { + oldTSSAddress: string; newTSSAddress: string; } export type Event = TypedContractEvent; @@ -633,6 +655,8 @@ export interface GatewayEVMUpgradeTest extends BaseContract { DEFAULT_ADMIN_ROLE: TypedContractMethod<[], [string], "view">; + MAX_PAYLOAD_SIZE: TypedContractMethod<[], [bigint], "view">; + PAUSER_ROLE: TypedContractMethod<[], [string], "view">; TSS_ROLE: TypedContractMethod<[], [string], "view">; @@ -789,6 +813,12 @@ export interface GatewayEVMUpgradeTest extends BaseContract { unpause: TypedContractMethod<[], [void], "nonpayable">; + updateTSSAddress: TypedContractMethod< + [newTSSAddress: AddressLike], + [void], + "nonpayable" + >; + upgradeToAndCall: TypedContractMethod< [newImplementation: AddressLike, data: BytesLike], [void], @@ -809,6 +839,9 @@ export interface GatewayEVMUpgradeTest extends BaseContract { getFunction( nameOrSignature: "DEFAULT_ADMIN_ROLE" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "MAX_PAYLOAD_SIZE" + ): TypedContractMethod<[], [bigint], "view">; getFunction( nameOrSignature: "PAUSER_ROLE" ): TypedContractMethod<[], [string], "view">; @@ -980,6 +1013,9 @@ export interface GatewayEVMUpgradeTest extends BaseContract { getFunction( nameOrSignature: "unpause" ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "updateTSSAddress" + ): TypedContractMethod<[newTSSAddress: AddressLike], [void], "nonpayable">; getFunction( nameOrSignature: "upgradeToAndCall" ): TypedContractMethod< @@ -1226,7 +1262,7 @@ export interface GatewayEVMUpgradeTest extends BaseContract { UnpausedEvent.OutputObject >; - "UpdatedGatewayTSSAddress(address)": TypedContractEvent< + "UpdatedGatewayTSSAddress(address,address)": TypedContractEvent< UpdatedGatewayTSSAddressEvent.InputTuple, UpdatedGatewayTSSAddressEvent.OutputTuple, UpdatedGatewayTSSAddressEvent.OutputObject diff --git a/v2/types/GatewayZEVMUpgradeTest.ts b/v2/types/GatewayZEVMUpgradeTest.ts new file mode 100644 index 000000000..23bdc6015 --- /dev/null +++ b/v2/types/GatewayZEVMUpgradeTest.ts @@ -0,0 +1,1169 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + EventFragment, + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, + TypedListener, + TypedContractMethod, +} from "./common"; + +export type RevertOptionsStruct = { + revertAddress: AddressLike; + callOnRevert: boolean; + abortAddress: AddressLike; + revertMessage: BytesLike; + onRevertGasLimit: BigNumberish; +}; + +export type RevertOptionsStructOutput = [ + revertAddress: string, + callOnRevert: boolean, + abortAddress: string, + revertMessage: string, + onRevertGasLimit: bigint +] & { + revertAddress: string; + callOnRevert: boolean; + abortAddress: string; + revertMessage: string; + onRevertGasLimit: bigint; +}; + +export type ZContextStruct = { + origin: BytesLike; + sender: AddressLike; + chainID: BigNumberish; +}; + +export type ZContextStructOutput = [ + origin: string, + sender: string, + chainID: bigint +] & { origin: string; sender: string; chainID: bigint }; + +export type RevertContextStruct = { + asset: AddressLike; + amount: BigNumberish; + revertMessage: BytesLike; +}; + +export type RevertContextStructOutput = [ + asset: string, + amount: bigint, + revertMessage: string +] & { asset: string; amount: bigint; revertMessage: string }; + +export interface GatewayZEVMUpgradeTestInterface extends Interface { + getFunction( + nameOrSignature: + | "DEFAULT_ADMIN_ROLE" + | "FUNGIBLE_MODULE_ADDRESS" + | "MAX_MESSAGE_SIZE" + | "PAUSER_ROLE" + | "UPGRADE_INTERFACE_VERSION" + | "call" + | "deposit" + | "depositAndCall((bytes,address,uint256),uint256,address,bytes)" + | "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)" + | "depositAndRevert" + | "execute" + | "executeRevert" + | "getRoleAdmin" + | "grantRole" + | "hasRole" + | "initialize" + | "pause" + | "paused" + | "proxiableUUID" + | "renounceRole" + | "revokeRole" + | "supportsInterface" + | "unpause" + | "upgradeToAndCall" + | "withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))" + | "withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))" + | "withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))" + | "withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))" + | "zetaToken" + ): FunctionFragment; + + getEvent( + nameOrSignatureOrTopic: + | "Called" + | "Initialized" + | "Paused" + | "RoleAdminChanged" + | "RoleGranted" + | "RoleRevoked" + | "Unpaused" + | "Upgraded" + | "Withdrawn" + | "WithdrawnV2" + ): EventFragment; + + encodeFunctionData( + functionFragment: "DEFAULT_ADMIN_ROLE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "FUNGIBLE_MODULE_ADDRESS", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "MAX_MESSAGE_SIZE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "PAUSER_ROLE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "UPGRADE_INTERFACE_VERSION", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "call", + values: [ + BytesLike, + AddressLike, + BytesLike, + BigNumberish, + RevertOptionsStruct + ] + ): string; + encodeFunctionData( + functionFragment: "deposit", + values: [AddressLike, BigNumberish, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "depositAndCall((bytes,address,uint256),uint256,address,bytes)", + values: [ZContextStruct, BigNumberish, AddressLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)", + values: [ZContextStruct, AddressLike, BigNumberish, AddressLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "depositAndRevert", + values: [AddressLike, BigNumberish, AddressLike, RevertContextStruct] + ): string; + encodeFunctionData( + functionFragment: "execute", + values: [ZContextStruct, AddressLike, BigNumberish, AddressLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "executeRevert", + values: [AddressLike, RevertContextStruct] + ): string; + encodeFunctionData( + functionFragment: "getRoleAdmin", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "grantRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "hasRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "initialize", + values: [AddressLike, AddressLike] + ): string; + encodeFunctionData(functionFragment: "pause", values?: undefined): string; + encodeFunctionData(functionFragment: "paused", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "renounceRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "revokeRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "supportsInterface", + values: [BytesLike] + ): string; + encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [AddressLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))", + values: [BytesLike, BigNumberish, AddressLike, RevertOptionsStruct] + ): string; + encodeFunctionData( + functionFragment: "withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))", + values: [BytesLike, BigNumberish, BigNumberish, RevertOptionsStruct] + ): string; + encodeFunctionData( + functionFragment: "withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))", + values: [ + BytesLike, + BigNumberish, + AddressLike, + BytesLike, + BigNumberish, + RevertOptionsStruct + ] + ): string; + encodeFunctionData( + functionFragment: "withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))", + values: [ + BytesLike, + BigNumberish, + BigNumberish, + BytesLike, + RevertOptionsStruct + ] + ): string; + encodeFunctionData(functionFragment: "zetaToken", values?: undefined): string; + + decodeFunctionResult( + functionFragment: "DEFAULT_ADMIN_ROLE", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "FUNGIBLE_MODULE_ADDRESS", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "MAX_MESSAGE_SIZE", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "PAUSER_ROLE", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "UPGRADE_INTERFACE_VERSION", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "call", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "depositAndCall((bytes,address,uint256),uint256,address,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "depositAndRevert", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "executeRevert", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getRoleAdmin", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "renounceRole", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "revokeRole", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "supportsInterface", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "zetaToken", data: BytesLike): Result; +} + +export namespace CalledEvent { + export type InputTuple = [ + sender: AddressLike, + zrc20: AddressLike, + receiver: BytesLike, + message: BytesLike, + gasLimit: BigNumberish, + revertOptions: RevertOptionsStruct + ]; + export type OutputTuple = [ + sender: string, + zrc20: string, + receiver: string, + message: string, + gasLimit: bigint, + revertOptions: RevertOptionsStructOutput + ]; + export interface OutputObject { + sender: string; + zrc20: string; + receiver: string; + message: string; + gasLimit: bigint; + revertOptions: RevertOptionsStructOutput; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace InitializedEvent { + export type InputTuple = [version: BigNumberish]; + export type OutputTuple = [version: bigint]; + export interface OutputObject { + version: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace PausedEvent { + export type InputTuple = [account: AddressLike]; + export type OutputTuple = [account: string]; + export interface OutputObject { + account: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace RoleAdminChangedEvent { + export type InputTuple = [ + role: BytesLike, + previousAdminRole: BytesLike, + newAdminRole: BytesLike + ]; + export type OutputTuple = [ + role: string, + previousAdminRole: string, + newAdminRole: string + ]; + export interface OutputObject { + role: string; + previousAdminRole: string; + newAdminRole: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace RoleGrantedEvent { + export type InputTuple = [ + role: BytesLike, + account: AddressLike, + sender: AddressLike + ]; + export type OutputTuple = [role: string, account: string, sender: string]; + export interface OutputObject { + role: string; + account: string; + sender: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace RoleRevokedEvent { + export type InputTuple = [ + role: BytesLike, + account: AddressLike, + sender: AddressLike + ]; + export type OutputTuple = [role: string, account: string, sender: string]; + export interface OutputObject { + role: string; + account: string; + sender: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace UnpausedEvent { + export type InputTuple = [account: AddressLike]; + export type OutputTuple = [account: string]; + export interface OutputObject { + account: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace UpgradedEvent { + export type InputTuple = [implementation: AddressLike]; + export type OutputTuple = [implementation: string]; + export interface OutputObject { + implementation: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawnEvent { + export type InputTuple = [ + sender: AddressLike, + chainId: BigNumberish, + receiver: BytesLike, + zrc20: AddressLike, + value: BigNumberish, + gasfee: BigNumberish, + protocolFlatFee: BigNumberish, + message: BytesLike, + gasLimit: BigNumberish, + revertOptions: RevertOptionsStruct + ]; + export type OutputTuple = [ + sender: string, + chainId: bigint, + receiver: string, + zrc20: string, + value: bigint, + gasfee: bigint, + protocolFlatFee: bigint, + message: string, + gasLimit: bigint, + revertOptions: RevertOptionsStructOutput + ]; + export interface OutputObject { + sender: string; + chainId: bigint; + receiver: string; + zrc20: string; + value: bigint; + gasfee: bigint; + protocolFlatFee: bigint; + message: string; + gasLimit: bigint; + revertOptions: RevertOptionsStructOutput; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawnV2Event { + export type InputTuple = [ + sender: AddressLike, + chainId: BigNumberish, + receiver: BytesLike, + zrc20: AddressLike, + value: BigNumberish, + gasfee: BigNumberish, + protocolFlatFee: BigNumberish, + message: BytesLike, + gasLimit: BigNumberish, + revertOptions: RevertOptionsStruct + ]; + export type OutputTuple = [ + sender: string, + chainId: bigint, + receiver: string, + zrc20: string, + value: bigint, + gasfee: bigint, + protocolFlatFee: bigint, + message: string, + gasLimit: bigint, + revertOptions: RevertOptionsStructOutput + ]; + export interface OutputObject { + sender: string; + chainId: bigint; + receiver: string; + zrc20: string; + value: bigint; + gasfee: bigint; + protocolFlatFee: bigint; + message: string; + gasLimit: bigint; + revertOptions: RevertOptionsStructOutput; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export interface GatewayZEVMUpgradeTest extends BaseContract { + connect(runner?: ContractRunner | null): GatewayZEVMUpgradeTest; + waitForDeployment(): Promise; + + interface: GatewayZEVMUpgradeTestInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + DEFAULT_ADMIN_ROLE: TypedContractMethod<[], [string], "view">; + + FUNGIBLE_MODULE_ADDRESS: TypedContractMethod<[], [string], "view">; + + MAX_MESSAGE_SIZE: TypedContractMethod<[], [bigint], "view">; + + PAUSER_ROLE: TypedContractMethod<[], [string], "view">; + + UPGRADE_INTERFACE_VERSION: TypedContractMethod<[], [string], "view">; + + call: TypedContractMethod< + [ + receiver: BytesLike, + zrc20: AddressLike, + message: BytesLike, + gasLimit: BigNumberish, + revertOptions: RevertOptionsStruct + ], + [void], + "nonpayable" + >; + + deposit: TypedContractMethod< + [zrc20: AddressLike, amount: BigNumberish, target: AddressLike], + [void], + "nonpayable" + >; + + "depositAndCall((bytes,address,uint256),uint256,address,bytes)": TypedContractMethod< + [ + context: ZContextStruct, + amount: BigNumberish, + target: AddressLike, + message: BytesLike + ], + [void], + "nonpayable" + >; + + "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)": TypedContractMethod< + [ + context: ZContextStruct, + zrc20: AddressLike, + amount: BigNumberish, + target: AddressLike, + message: BytesLike + ], + [void], + "nonpayable" + >; + + depositAndRevert: TypedContractMethod< + [ + zrc20: AddressLike, + amount: BigNumberish, + target: AddressLike, + revertContext: RevertContextStruct + ], + [void], + "nonpayable" + >; + + execute: TypedContractMethod< + [ + context: ZContextStruct, + zrc20: AddressLike, + amount: BigNumberish, + target: AddressLike, + message: BytesLike + ], + [void], + "nonpayable" + >; + + executeRevert: TypedContractMethod< + [target: AddressLike, revertContext: RevertContextStruct], + [void], + "nonpayable" + >; + + getRoleAdmin: TypedContractMethod<[role: BytesLike], [string], "view">; + + grantRole: TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + + hasRole: TypedContractMethod< + [role: BytesLike, account: AddressLike], + [boolean], + "view" + >; + + initialize: TypedContractMethod< + [zetaToken_: AddressLike, admin_: AddressLike], + [void], + "nonpayable" + >; + + pause: TypedContractMethod<[], [void], "nonpayable">; + + paused: TypedContractMethod<[], [boolean], "view">; + + proxiableUUID: TypedContractMethod<[], [string], "view">; + + renounceRole: TypedContractMethod< + [role: BytesLike, callerConfirmation: AddressLike], + [void], + "nonpayable" + >; + + revokeRole: TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + + supportsInterface: TypedContractMethod< + [interfaceId: BytesLike], + [boolean], + "view" + >; + + unpause: TypedContractMethod<[], [void], "nonpayable">; + + upgradeToAndCall: TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; + + "withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))": TypedContractMethod< + [ + receiver: BytesLike, + amount: BigNumberish, + zrc20: AddressLike, + revertOptions: RevertOptionsStruct + ], + [void], + "nonpayable" + >; + + "withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))": TypedContractMethod< + [ + receiver: BytesLike, + amount: BigNumberish, + chainId: BigNumberish, + revertOptions: RevertOptionsStruct + ], + [void], + "nonpayable" + >; + + "withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))": TypedContractMethod< + [ + receiver: BytesLike, + amount: BigNumberish, + zrc20: AddressLike, + message: BytesLike, + gasLimit: BigNumberish, + revertOptions: RevertOptionsStruct + ], + [void], + "nonpayable" + >; + + "withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))": TypedContractMethod< + [ + receiver: BytesLike, + amount: BigNumberish, + chainId: BigNumberish, + message: BytesLike, + revertOptions: RevertOptionsStruct + ], + [void], + "nonpayable" + >; + + zetaToken: TypedContractMethod<[], [string], "view">; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "DEFAULT_ADMIN_ROLE" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "FUNGIBLE_MODULE_ADDRESS" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "MAX_MESSAGE_SIZE" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "PAUSER_ROLE" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "UPGRADE_INTERFACE_VERSION" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "call" + ): TypedContractMethod< + [ + receiver: BytesLike, + zrc20: AddressLike, + message: BytesLike, + gasLimit: BigNumberish, + revertOptions: RevertOptionsStruct + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "deposit" + ): TypedContractMethod< + [zrc20: AddressLike, amount: BigNumberish, target: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "depositAndCall((bytes,address,uint256),uint256,address,bytes)" + ): TypedContractMethod< + [ + context: ZContextStruct, + amount: BigNumberish, + target: AddressLike, + message: BytesLike + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)" + ): TypedContractMethod< + [ + context: ZContextStruct, + zrc20: AddressLike, + amount: BigNumberish, + target: AddressLike, + message: BytesLike + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "depositAndRevert" + ): TypedContractMethod< + [ + zrc20: AddressLike, + amount: BigNumberish, + target: AddressLike, + revertContext: RevertContextStruct + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "execute" + ): TypedContractMethod< + [ + context: ZContextStruct, + zrc20: AddressLike, + amount: BigNumberish, + target: AddressLike, + message: BytesLike + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "executeRevert" + ): TypedContractMethod< + [target: AddressLike, revertContext: RevertContextStruct], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "getRoleAdmin" + ): TypedContractMethod<[role: BytesLike], [string], "view">; + getFunction( + nameOrSignature: "grantRole" + ): TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "hasRole" + ): TypedContractMethod< + [role: BytesLike, account: AddressLike], + [boolean], + "view" + >; + getFunction( + nameOrSignature: "initialize" + ): TypedContractMethod< + [zetaToken_: AddressLike, admin_: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "pause" + ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "paused" + ): TypedContractMethod<[], [boolean], "view">; + getFunction( + nameOrSignature: "proxiableUUID" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "renounceRole" + ): TypedContractMethod< + [role: BytesLike, callerConfirmation: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "revokeRole" + ): TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "supportsInterface" + ): TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">; + getFunction( + nameOrSignature: "unpause" + ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "upgradeToAndCall" + ): TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; + getFunction( + nameOrSignature: "withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))" + ): TypedContractMethod< + [ + receiver: BytesLike, + amount: BigNumberish, + zrc20: AddressLike, + revertOptions: RevertOptionsStruct + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))" + ): TypedContractMethod< + [ + receiver: BytesLike, + amount: BigNumberish, + chainId: BigNumberish, + revertOptions: RevertOptionsStruct + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))" + ): TypedContractMethod< + [ + receiver: BytesLike, + amount: BigNumberish, + zrc20: AddressLike, + message: BytesLike, + gasLimit: BigNumberish, + revertOptions: RevertOptionsStruct + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))" + ): TypedContractMethod< + [ + receiver: BytesLike, + amount: BigNumberish, + chainId: BigNumberish, + message: BytesLike, + revertOptions: RevertOptionsStruct + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "zetaToken" + ): TypedContractMethod<[], [string], "view">; + + getEvent( + key: "Called" + ): TypedContractEvent< + CalledEvent.InputTuple, + CalledEvent.OutputTuple, + CalledEvent.OutputObject + >; + getEvent( + key: "Initialized" + ): TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + getEvent( + key: "Paused" + ): TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + getEvent( + key: "RoleAdminChanged" + ): TypedContractEvent< + RoleAdminChangedEvent.InputTuple, + RoleAdminChangedEvent.OutputTuple, + RoleAdminChangedEvent.OutputObject + >; + getEvent( + key: "RoleGranted" + ): TypedContractEvent< + RoleGrantedEvent.InputTuple, + RoleGrantedEvent.OutputTuple, + RoleGrantedEvent.OutputObject + >; + getEvent( + key: "RoleRevoked" + ): TypedContractEvent< + RoleRevokedEvent.InputTuple, + RoleRevokedEvent.OutputTuple, + RoleRevokedEvent.OutputObject + >; + getEvent( + key: "Unpaused" + ): TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + getEvent( + key: "Upgraded" + ): TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + getEvent( + key: "Withdrawn" + ): TypedContractEvent< + WithdrawnEvent.InputTuple, + WithdrawnEvent.OutputTuple, + WithdrawnEvent.OutputObject + >; + getEvent( + key: "WithdrawnV2" + ): TypedContractEvent< + WithdrawnV2Event.InputTuple, + WithdrawnV2Event.OutputTuple, + WithdrawnV2Event.OutputObject + >; + + filters: { + "Called(address,address,bytes,bytes,uint256,tuple)": TypedContractEvent< + CalledEvent.InputTuple, + CalledEvent.OutputTuple, + CalledEvent.OutputObject + >; + Called: TypedContractEvent< + CalledEvent.InputTuple, + CalledEvent.OutputTuple, + CalledEvent.OutputObject + >; + + "Initialized(uint64)": TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + Initialized: TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + + "Paused(address)": TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + Paused: TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + + "RoleAdminChanged(bytes32,bytes32,bytes32)": TypedContractEvent< + RoleAdminChangedEvent.InputTuple, + RoleAdminChangedEvent.OutputTuple, + RoleAdminChangedEvent.OutputObject + >; + RoleAdminChanged: TypedContractEvent< + RoleAdminChangedEvent.InputTuple, + RoleAdminChangedEvent.OutputTuple, + RoleAdminChangedEvent.OutputObject + >; + + "RoleGranted(bytes32,address,address)": TypedContractEvent< + RoleGrantedEvent.InputTuple, + RoleGrantedEvent.OutputTuple, + RoleGrantedEvent.OutputObject + >; + RoleGranted: TypedContractEvent< + RoleGrantedEvent.InputTuple, + RoleGrantedEvent.OutputTuple, + RoleGrantedEvent.OutputObject + >; + + "RoleRevoked(bytes32,address,address)": TypedContractEvent< + RoleRevokedEvent.InputTuple, + RoleRevokedEvent.OutputTuple, + RoleRevokedEvent.OutputObject + >; + RoleRevoked: TypedContractEvent< + RoleRevokedEvent.InputTuple, + RoleRevokedEvent.OutputTuple, + RoleRevokedEvent.OutputObject + >; + + "Unpaused(address)": TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + Unpaused: TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + + "Upgraded(address)": TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + Upgraded: TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + + "Withdrawn(address,uint256,bytes,address,uint256,uint256,uint256,bytes,uint256,tuple)": TypedContractEvent< + WithdrawnEvent.InputTuple, + WithdrawnEvent.OutputTuple, + WithdrawnEvent.OutputObject + >; + Withdrawn: TypedContractEvent< + WithdrawnEvent.InputTuple, + WithdrawnEvent.OutputTuple, + WithdrawnEvent.OutputObject + >; + + "WithdrawnV2(address,uint256,bytes,address,uint256,uint256,uint256,bytes,uint256,tuple)": TypedContractEvent< + WithdrawnV2Event.InputTuple, + WithdrawnV2Event.OutputTuple, + WithdrawnV2Event.OutputObject + >; + WithdrawnV2: TypedContractEvent< + WithdrawnV2Event.InputTuple, + WithdrawnV2Event.OutputTuple, + WithdrawnV2Event.OutputObject + >; + }; +} diff --git a/v2/types/IERC20Custody.sol/IERC20Custody.ts b/v2/types/IERC20Custody.sol/IERC20Custody.ts index 3d6910279..e1e83944d 100644 --- a/v2/types/IERC20Custody.sol/IERC20Custody.ts +++ b/v2/types/IERC20Custody.sol/IERC20Custody.ts @@ -131,9 +131,13 @@ export namespace UnwhitelistedEvent { } export namespace UpdatedCustodyTSSAddressEvent { - export type InputTuple = [newTSSAddress: AddressLike]; - export type OutputTuple = [newTSSAddress: string]; + export type InputTuple = [ + oldTSSAddress: AddressLike, + newTSSAddress: AddressLike + ]; + export type OutputTuple = [oldTSSAddress: string, newTSSAddress: string]; export interface OutputObject { + oldTSSAddress: string; newTSSAddress: string; } export type Event = TypedContractEvent; @@ -412,7 +416,7 @@ export interface IERC20Custody extends BaseContract { UnwhitelistedEvent.OutputObject >; - "UpdatedCustodyTSSAddress(address)": TypedContractEvent< + "UpdatedCustodyTSSAddress(address,address)": TypedContractEvent< UpdatedCustodyTSSAddressEvent.InputTuple, UpdatedCustodyTSSAddressEvent.OutputTuple, UpdatedCustodyTSSAddressEvent.OutputObject diff --git a/v2/types/IERC20Custody.sol/IERC20CustodyEvents.ts b/v2/types/IERC20Custody.sol/IERC20CustodyEvents.ts index 68255e27d..417d4ebff 100644 --- a/v2/types/IERC20Custody.sol/IERC20CustodyEvents.ts +++ b/v2/types/IERC20Custody.sol/IERC20CustodyEvents.ts @@ -84,9 +84,13 @@ export namespace UnwhitelistedEvent { } export namespace UpdatedCustodyTSSAddressEvent { - export type InputTuple = [newTSSAddress: AddressLike]; - export type OutputTuple = [newTSSAddress: string]; + export type InputTuple = [ + oldTSSAddress: AddressLike, + newTSSAddress: AddressLike + ]; + export type OutputTuple = [oldTSSAddress: string, newTSSAddress: string]; export interface OutputObject { + oldTSSAddress: string; newTSSAddress: string; } export type Event = TypedContractEvent; @@ -298,7 +302,7 @@ export interface IERC20CustodyEvents extends BaseContract { UnwhitelistedEvent.OutputObject >; - "UpdatedCustodyTSSAddress(address)": TypedContractEvent< + "UpdatedCustodyTSSAddress(address,address)": TypedContractEvent< UpdatedCustodyTSSAddressEvent.InputTuple, UpdatedCustodyTSSAddressEvent.OutputTuple, UpdatedCustodyTSSAddressEvent.OutputObject diff --git a/v2/types/IGatewayEVM.sol/IGatewayEVM.ts b/v2/types/IGatewayEVM.sol/IGatewayEVM.ts index 1f55dd822..348c779e8 100644 --- a/v2/types/IGatewayEVM.sol/IGatewayEVM.ts +++ b/v2/types/IGatewayEVM.sol/IGatewayEVM.ts @@ -290,9 +290,13 @@ export namespace RevertedEvent { } export namespace UpdatedGatewayTSSAddressEvent { - export type InputTuple = [newTSSAddress: AddressLike]; - export type OutputTuple = [newTSSAddress: string]; + export type InputTuple = [ + oldTSSAddress: AddressLike, + newTSSAddress: AddressLike + ]; + export type OutputTuple = [oldTSSAddress: string, newTSSAddress: string]; export interface OutputObject { + oldTSSAddress: string; newTSSAddress: string; } export type Event = TypedContractEvent; @@ -633,7 +637,7 @@ export interface IGatewayEVM extends BaseContract { RevertedEvent.OutputObject >; - "UpdatedGatewayTSSAddress(address)": TypedContractEvent< + "UpdatedGatewayTSSAddress(address,address)": TypedContractEvent< UpdatedGatewayTSSAddressEvent.InputTuple, UpdatedGatewayTSSAddressEvent.OutputTuple, UpdatedGatewayTSSAddressEvent.OutputObject diff --git a/v2/types/IGatewayEVM.sol/IGatewayEVMEvents.ts b/v2/types/IGatewayEVM.sol/IGatewayEVMEvents.ts index 61b7cbdae..9be11771e 100644 --- a/v2/types/IGatewayEVM.sol/IGatewayEVMEvents.ts +++ b/v2/types/IGatewayEVM.sol/IGatewayEVMEvents.ts @@ -195,9 +195,13 @@ export namespace RevertedEvent { } export namespace UpdatedGatewayTSSAddressEvent { - export type InputTuple = [newTSSAddress: AddressLike]; - export type OutputTuple = [newTSSAddress: string]; + export type InputTuple = [ + oldTSSAddress: AddressLike, + newTSSAddress: AddressLike + ]; + export type OutputTuple = [oldTSSAddress: string, newTSSAddress: string]; export interface OutputObject { + oldTSSAddress: string; newTSSAddress: string; } export type Event = TypedContractEvent; @@ -352,7 +356,7 @@ export interface IGatewayEVMEvents extends BaseContract { RevertedEvent.OutputObject >; - "UpdatedGatewayTSSAddress(address)": TypedContractEvent< + "UpdatedGatewayTSSAddress(address,address)": TypedContractEvent< UpdatedGatewayTSSAddressEvent.InputTuple, UpdatedGatewayTSSAddressEvent.OutputTuple, UpdatedGatewayTSSAddressEvent.OutputObject diff --git a/v2/types/IZetaConnector.sol/IZetaConnectorEvents.ts b/v2/types/IZetaConnector.sol/IZetaConnectorEvents.ts index 7b2b2da1f..36b5a326d 100644 --- a/v2/types/IZetaConnector.sol/IZetaConnectorEvents.ts +++ b/v2/types/IZetaConnector.sol/IZetaConnectorEvents.ts @@ -44,9 +44,13 @@ export interface IZetaConnectorEventsInterface extends Interface { } export namespace UpdatedZetaConnectorTSSAddressEvent { - export type InputTuple = [newTSSAddress: AddressLike]; - export type OutputTuple = [newTSSAddress: string]; + export type InputTuple = [ + oldTSSAddress: AddressLike, + newTSSAddress: AddressLike + ]; + export type OutputTuple = [oldTSSAddress: string, newTSSAddress: string]; export interface OutputObject { + oldTSSAddress: string; newTSSAddress: string; } export type Event = TypedContractEvent; @@ -188,7 +192,7 @@ export interface IZetaConnectorEvents extends BaseContract { >; filters: { - "UpdatedZetaConnectorTSSAddress(address)": TypedContractEvent< + "UpdatedZetaConnectorTSSAddress(address,address)": TypedContractEvent< UpdatedZetaConnectorTSSAddressEvent.InputTuple, UpdatedZetaConnectorTSSAddressEvent.OutputTuple, UpdatedZetaConnectorTSSAddressEvent.OutputObject diff --git a/v2/types/Revert.sol/INotSupportedMethods.ts b/v2/types/Revert.sol/INotSupportedMethods.ts new file mode 100644 index 000000000..118127b29 --- /dev/null +++ b/v2/types/Revert.sol/INotSupportedMethods.ts @@ -0,0 +1,69 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + FunctionFragment, + Interface, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedListener, +} from "../common"; + +export interface INotSupportedMethodsInterface extends Interface {} + +export interface INotSupportedMethods extends BaseContract { + connect(runner?: ContractRunner | null): INotSupportedMethods; + waitForDeployment(): Promise; + + interface: INotSupportedMethodsInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + getFunction( + key: string | FunctionFragment + ): T; + + filters: {}; +} diff --git a/v2/types/Revert.sol/index.ts b/v2/types/Revert.sol/index.ts index 12a1db84d..1625b9250 100644 --- a/v2/types/Revert.sol/index.ts +++ b/v2/types/Revert.sol/index.ts @@ -1,4 +1,5 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ +export type { INotSupportedMethods } from "./INotSupportedMethods"; export type { Revertable } from "./Revertable"; diff --git a/v2/types/ZetaConnectorBase.ts b/v2/types/ZetaConnectorBase.ts index 71f796f69..e69a7827c 100644 --- a/v2/types/ZetaConnectorBase.ts +++ b/v2/types/ZetaConnectorBase.ts @@ -41,13 +41,16 @@ export interface ZetaConnectorBaseInterface extends Interface { | "DEFAULT_ADMIN_ROLE" | "PAUSER_ROLE" | "TSS_ROLE" + | "UPGRADE_INTERFACE_VERSION" | "WITHDRAWER_ROLE" | "gateway" | "getRoleAdmin" | "grantRole" | "hasRole" + | "initialize" | "pause" | "paused" + | "proxiableUUID" | "receiveTokens" | "renounceRole" | "revokeRole" @@ -55,6 +58,7 @@ export interface ZetaConnectorBaseInterface extends Interface { | "tssAddress" | "unpause" | "updateTSSAddress" + | "upgradeToAndCall" | "withdraw" | "withdrawAndCall" | "withdrawAndRevert" @@ -63,12 +67,14 @@ export interface ZetaConnectorBaseInterface extends Interface { getEvent( nameOrSignatureOrTopic: + | "Initialized" | "Paused" | "RoleAdminChanged" | "RoleGranted" | "RoleRevoked" | "Unpaused" | "UpdatedZetaConnectorTSSAddress" + | "Upgraded" | "Withdrawn" | "WithdrawnAndCalled" | "WithdrawnAndReverted" @@ -83,6 +89,10 @@ export interface ZetaConnectorBaseInterface extends Interface { values?: undefined ): string; encodeFunctionData(functionFragment: "TSS_ROLE", values?: undefined): string; + encodeFunctionData( + functionFragment: "UPGRADE_INTERFACE_VERSION", + values?: undefined + ): string; encodeFunctionData( functionFragment: "WITHDRAWER_ROLE", values?: undefined @@ -100,8 +110,16 @@ export interface ZetaConnectorBaseInterface extends Interface { functionFragment: "hasRole", values: [BytesLike, AddressLike] ): string; + encodeFunctionData( + functionFragment: "initialize", + values: [AddressLike, AddressLike, AddressLike, AddressLike] + ): string; encodeFunctionData(functionFragment: "pause", values?: undefined): string; encodeFunctionData(functionFragment: "paused", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; encodeFunctionData( functionFragment: "receiveTokens", values: [BigNumberish] @@ -127,6 +145,10 @@ export interface ZetaConnectorBaseInterface extends Interface { functionFragment: "updateTSSAddress", values: [AddressLike] ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [AddressLike, BytesLike] + ): string; encodeFunctionData( functionFragment: "withdraw", values: [AddressLike, BigNumberish, BytesLike] @@ -156,6 +178,10 @@ export interface ZetaConnectorBaseInterface extends Interface { data: BytesLike ): Result; decodeFunctionResult(functionFragment: "TSS_ROLE", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "UPGRADE_INTERFACE_VERSION", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "WITHDRAWER_ROLE", data: BytesLike @@ -167,8 +193,13 @@ export interface ZetaConnectorBaseInterface extends Interface { ): Result; decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result; decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "receiveTokens", data: BytesLike @@ -188,6 +219,10 @@ export interface ZetaConnectorBaseInterface extends Interface { functionFragment: "updateTSSAddress", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( functionFragment: "withdrawAndCall", @@ -200,6 +235,18 @@ export interface ZetaConnectorBaseInterface extends Interface { decodeFunctionResult(functionFragment: "zetaToken", data: BytesLike): Result; } +export namespace InitializedEvent { + export type InputTuple = [version: BigNumberish]; + export type OutputTuple = [version: bigint]; + export interface OutputObject { + version: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace PausedEvent { export type InputTuple = [account: AddressLike]; export type OutputTuple = [account: string]; @@ -283,9 +330,13 @@ export namespace UnpausedEvent { } export namespace UpdatedZetaConnectorTSSAddressEvent { - export type InputTuple = [newTSSAddress: AddressLike]; - export type OutputTuple = [newTSSAddress: string]; + export type InputTuple = [ + oldTSSAddress: AddressLike, + newTSSAddress: AddressLike + ]; + export type OutputTuple = [oldTSSAddress: string, newTSSAddress: string]; export interface OutputObject { + oldTSSAddress: string; newTSSAddress: string; } export type Event = TypedContractEvent; @@ -294,6 +345,18 @@ export namespace UpdatedZetaConnectorTSSAddressEvent { export type LogDescription = TypedLogDescription; } +export namespace UpgradedEvent { + export type InputTuple = [implementation: AddressLike]; + export type OutputTuple = [implementation: string]; + export interface OutputObject { + implementation: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace WithdrawnEvent { export type InputTuple = [to: AddressLike, amount: BigNumberish]; export type OutputTuple = [to: string, amount: bigint]; @@ -399,6 +462,8 @@ export interface ZetaConnectorBase extends BaseContract { TSS_ROLE: TypedContractMethod<[], [string], "view">; + UPGRADE_INTERFACE_VERSION: TypedContractMethod<[], [string], "view">; + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; gateway: TypedContractMethod<[], [string], "view">; @@ -417,10 +482,23 @@ export interface ZetaConnectorBase extends BaseContract { "view" >; + initialize: TypedContractMethod< + [ + gateway_: AddressLike, + zetaToken_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike + ], + [void], + "nonpayable" + >; + pause: TypedContractMethod<[], [void], "nonpayable">; paused: TypedContractMethod<[], [boolean], "view">; + proxiableUUID: TypedContractMethod<[], [string], "view">; + receiveTokens: TypedContractMethod< [amount: BigNumberish], [void], @@ -455,6 +533,12 @@ export interface ZetaConnectorBase extends BaseContract { "nonpayable" >; + upgradeToAndCall: TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; + withdraw: TypedContractMethod< [to: AddressLike, amount: BigNumberish, internalSendHash: BytesLike], [void], @@ -499,6 +583,9 @@ export interface ZetaConnectorBase extends BaseContract { getFunction( nameOrSignature: "TSS_ROLE" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "UPGRADE_INTERFACE_VERSION" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "WITHDRAWER_ROLE" ): TypedContractMethod<[], [string], "view">; @@ -522,12 +609,27 @@ export interface ZetaConnectorBase extends BaseContract { [boolean], "view" >; + getFunction( + nameOrSignature: "initialize" + ): TypedContractMethod< + [ + gateway_: AddressLike, + zetaToken_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike + ], + [void], + "nonpayable" + >; getFunction( nameOrSignature: "pause" ): TypedContractMethod<[], [void], "nonpayable">; getFunction( nameOrSignature: "paused" ): TypedContractMethod<[], [boolean], "view">; + getFunction( + nameOrSignature: "proxiableUUID" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "receiveTokens" ): TypedContractMethod<[amount: BigNumberish], [void], "nonpayable">; @@ -557,6 +659,13 @@ export interface ZetaConnectorBase extends BaseContract { getFunction( nameOrSignature: "updateTSSAddress" ): TypedContractMethod<[newTSSAddress: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "upgradeToAndCall" + ): TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; getFunction( nameOrSignature: "withdraw" ): TypedContractMethod< @@ -593,6 +702,13 @@ export interface ZetaConnectorBase extends BaseContract { nameOrSignature: "zetaToken" ): TypedContractMethod<[], [string], "view">; + getEvent( + key: "Initialized" + ): TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; getEvent( key: "Paused" ): TypedContractEvent< @@ -635,6 +751,13 @@ export interface ZetaConnectorBase extends BaseContract { UpdatedZetaConnectorTSSAddressEvent.OutputTuple, UpdatedZetaConnectorTSSAddressEvent.OutputObject >; + getEvent( + key: "Upgraded" + ): TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; getEvent( key: "Withdrawn" ): TypedContractEvent< @@ -658,6 +781,17 @@ export interface ZetaConnectorBase extends BaseContract { >; filters: { + "Initialized(uint64)": TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + Initialized: TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + "Paused(address)": TypedContractEvent< PausedEvent.InputTuple, PausedEvent.OutputTuple, @@ -713,7 +847,7 @@ export interface ZetaConnectorBase extends BaseContract { UnpausedEvent.OutputObject >; - "UpdatedZetaConnectorTSSAddress(address)": TypedContractEvent< + "UpdatedZetaConnectorTSSAddress(address,address)": TypedContractEvent< UpdatedZetaConnectorTSSAddressEvent.InputTuple, UpdatedZetaConnectorTSSAddressEvent.OutputTuple, UpdatedZetaConnectorTSSAddressEvent.OutputObject @@ -724,6 +858,17 @@ export interface ZetaConnectorBase extends BaseContract { UpdatedZetaConnectorTSSAddressEvent.OutputObject >; + "Upgraded(address)": TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + Upgraded: TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + "Withdrawn(address,uint256)": TypedContractEvent< WithdrawnEvent.InputTuple, WithdrawnEvent.OutputTuple, diff --git a/v2/types/ZetaConnectorNative.ts b/v2/types/ZetaConnectorNative.ts index b211d1fb5..c2fd2b3fa 100644 --- a/v2/types/ZetaConnectorNative.ts +++ b/v2/types/ZetaConnectorNative.ts @@ -41,13 +41,16 @@ export interface ZetaConnectorNativeInterface extends Interface { | "DEFAULT_ADMIN_ROLE" | "PAUSER_ROLE" | "TSS_ROLE" + | "UPGRADE_INTERFACE_VERSION" | "WITHDRAWER_ROLE" | "gateway" | "getRoleAdmin" | "grantRole" | "hasRole" + | "initialize" | "pause" | "paused" + | "proxiableUUID" | "receiveTokens" | "renounceRole" | "revokeRole" @@ -55,6 +58,7 @@ export interface ZetaConnectorNativeInterface extends Interface { | "tssAddress" | "unpause" | "updateTSSAddress" + | "upgradeToAndCall" | "withdraw" | "withdrawAndCall" | "withdrawAndRevert" @@ -63,12 +67,14 @@ export interface ZetaConnectorNativeInterface extends Interface { getEvent( nameOrSignatureOrTopic: + | "Initialized" | "Paused" | "RoleAdminChanged" | "RoleGranted" | "RoleRevoked" | "Unpaused" | "UpdatedZetaConnectorTSSAddress" + | "Upgraded" | "Withdrawn" | "WithdrawnAndCalled" | "WithdrawnAndReverted" @@ -83,6 +89,10 @@ export interface ZetaConnectorNativeInterface extends Interface { values?: undefined ): string; encodeFunctionData(functionFragment: "TSS_ROLE", values?: undefined): string; + encodeFunctionData( + functionFragment: "UPGRADE_INTERFACE_VERSION", + values?: undefined + ): string; encodeFunctionData( functionFragment: "WITHDRAWER_ROLE", values?: undefined @@ -100,8 +110,16 @@ export interface ZetaConnectorNativeInterface extends Interface { functionFragment: "hasRole", values: [BytesLike, AddressLike] ): string; + encodeFunctionData( + functionFragment: "initialize", + values: [AddressLike, AddressLike, AddressLike, AddressLike] + ): string; encodeFunctionData(functionFragment: "pause", values?: undefined): string; encodeFunctionData(functionFragment: "paused", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; encodeFunctionData( functionFragment: "receiveTokens", values: [BigNumberish] @@ -127,6 +145,10 @@ export interface ZetaConnectorNativeInterface extends Interface { functionFragment: "updateTSSAddress", values: [AddressLike] ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [AddressLike, BytesLike] + ): string; encodeFunctionData( functionFragment: "withdraw", values: [AddressLike, BigNumberish, BytesLike] @@ -156,6 +178,10 @@ export interface ZetaConnectorNativeInterface extends Interface { data: BytesLike ): Result; decodeFunctionResult(functionFragment: "TSS_ROLE", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "UPGRADE_INTERFACE_VERSION", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "WITHDRAWER_ROLE", data: BytesLike @@ -167,8 +193,13 @@ export interface ZetaConnectorNativeInterface extends Interface { ): Result; decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result; decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "receiveTokens", data: BytesLike @@ -188,6 +219,10 @@ export interface ZetaConnectorNativeInterface extends Interface { functionFragment: "updateTSSAddress", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( functionFragment: "withdrawAndCall", @@ -200,6 +235,18 @@ export interface ZetaConnectorNativeInterface extends Interface { decodeFunctionResult(functionFragment: "zetaToken", data: BytesLike): Result; } +export namespace InitializedEvent { + export type InputTuple = [version: BigNumberish]; + export type OutputTuple = [version: bigint]; + export interface OutputObject { + version: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace PausedEvent { export type InputTuple = [account: AddressLike]; export type OutputTuple = [account: string]; @@ -283,9 +330,13 @@ export namespace UnpausedEvent { } export namespace UpdatedZetaConnectorTSSAddressEvent { - export type InputTuple = [newTSSAddress: AddressLike]; - export type OutputTuple = [newTSSAddress: string]; + export type InputTuple = [ + oldTSSAddress: AddressLike, + newTSSAddress: AddressLike + ]; + export type OutputTuple = [oldTSSAddress: string, newTSSAddress: string]; export interface OutputObject { + oldTSSAddress: string; newTSSAddress: string; } export type Event = TypedContractEvent; @@ -294,6 +345,18 @@ export namespace UpdatedZetaConnectorTSSAddressEvent { export type LogDescription = TypedLogDescription; } +export namespace UpgradedEvent { + export type InputTuple = [implementation: AddressLike]; + export type OutputTuple = [implementation: string]; + export interface OutputObject { + implementation: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace WithdrawnEvent { export type InputTuple = [to: AddressLike, amount: BigNumberish]; export type OutputTuple = [to: string, amount: bigint]; @@ -399,6 +462,8 @@ export interface ZetaConnectorNative extends BaseContract { TSS_ROLE: TypedContractMethod<[], [string], "view">; + UPGRADE_INTERFACE_VERSION: TypedContractMethod<[], [string], "view">; + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; gateway: TypedContractMethod<[], [string], "view">; @@ -417,10 +482,23 @@ export interface ZetaConnectorNative extends BaseContract { "view" >; + initialize: TypedContractMethod< + [ + gateway_: AddressLike, + zetaToken_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike + ], + [void], + "nonpayable" + >; + pause: TypedContractMethod<[], [void], "nonpayable">; paused: TypedContractMethod<[], [boolean], "view">; + proxiableUUID: TypedContractMethod<[], [string], "view">; + receiveTokens: TypedContractMethod< [amount: BigNumberish], [void], @@ -455,6 +533,12 @@ export interface ZetaConnectorNative extends BaseContract { "nonpayable" >; + upgradeToAndCall: TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; + withdraw: TypedContractMethod< [to: AddressLike, amount: BigNumberish, internalSendHash: BytesLike], [void], @@ -499,6 +583,9 @@ export interface ZetaConnectorNative extends BaseContract { getFunction( nameOrSignature: "TSS_ROLE" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "UPGRADE_INTERFACE_VERSION" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "WITHDRAWER_ROLE" ): TypedContractMethod<[], [string], "view">; @@ -522,12 +609,27 @@ export interface ZetaConnectorNative extends BaseContract { [boolean], "view" >; + getFunction( + nameOrSignature: "initialize" + ): TypedContractMethod< + [ + gateway_: AddressLike, + zetaToken_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike + ], + [void], + "nonpayable" + >; getFunction( nameOrSignature: "pause" ): TypedContractMethod<[], [void], "nonpayable">; getFunction( nameOrSignature: "paused" ): TypedContractMethod<[], [boolean], "view">; + getFunction( + nameOrSignature: "proxiableUUID" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "receiveTokens" ): TypedContractMethod<[amount: BigNumberish], [void], "nonpayable">; @@ -557,6 +659,13 @@ export interface ZetaConnectorNative extends BaseContract { getFunction( nameOrSignature: "updateTSSAddress" ): TypedContractMethod<[newTSSAddress: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "upgradeToAndCall" + ): TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; getFunction( nameOrSignature: "withdraw" ): TypedContractMethod< @@ -593,6 +702,13 @@ export interface ZetaConnectorNative extends BaseContract { nameOrSignature: "zetaToken" ): TypedContractMethod<[], [string], "view">; + getEvent( + key: "Initialized" + ): TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; getEvent( key: "Paused" ): TypedContractEvent< @@ -635,6 +751,13 @@ export interface ZetaConnectorNative extends BaseContract { UpdatedZetaConnectorTSSAddressEvent.OutputTuple, UpdatedZetaConnectorTSSAddressEvent.OutputObject >; + getEvent( + key: "Upgraded" + ): TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; getEvent( key: "Withdrawn" ): TypedContractEvent< @@ -658,6 +781,17 @@ export interface ZetaConnectorNative extends BaseContract { >; filters: { + "Initialized(uint64)": TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + Initialized: TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + "Paused(address)": TypedContractEvent< PausedEvent.InputTuple, PausedEvent.OutputTuple, @@ -713,7 +847,7 @@ export interface ZetaConnectorNative extends BaseContract { UnpausedEvent.OutputObject >; - "UpdatedZetaConnectorTSSAddress(address)": TypedContractEvent< + "UpdatedZetaConnectorTSSAddress(address,address)": TypedContractEvent< UpdatedZetaConnectorTSSAddressEvent.InputTuple, UpdatedZetaConnectorTSSAddressEvent.OutputTuple, UpdatedZetaConnectorTSSAddressEvent.OutputObject @@ -724,6 +858,17 @@ export interface ZetaConnectorNative extends BaseContract { UpdatedZetaConnectorTSSAddressEvent.OutputObject >; + "Upgraded(address)": TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + Upgraded: TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + "Withdrawn(address,uint256)": TypedContractEvent< WithdrawnEvent.InputTuple, WithdrawnEvent.OutputTuple, diff --git a/v2/types/ZetaConnectorNativeUpgradeTest.ts b/v2/types/ZetaConnectorNativeUpgradeTest.ts new file mode 100644 index 000000000..74ce23445 --- /dev/null +++ b/v2/types/ZetaConnectorNativeUpgradeTest.ts @@ -0,0 +1,937 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + EventFragment, + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, + TypedListener, + TypedContractMethod, +} from "./common"; + +export type RevertContextStruct = { + asset: AddressLike; + amount: BigNumberish; + revertMessage: BytesLike; +}; + +export type RevertContextStructOutput = [ + asset: string, + amount: bigint, + revertMessage: string +] & { asset: string; amount: bigint; revertMessage: string }; + +export interface ZetaConnectorNativeUpgradeTestInterface extends Interface { + getFunction( + nameOrSignature: + | "DEFAULT_ADMIN_ROLE" + | "PAUSER_ROLE" + | "TSS_ROLE" + | "UPGRADE_INTERFACE_VERSION" + | "WITHDRAWER_ROLE" + | "gateway" + | "getRoleAdmin" + | "grantRole" + | "hasRole" + | "initialize" + | "pause" + | "paused" + | "proxiableUUID" + | "receiveTokens" + | "renounceRole" + | "revokeRole" + | "supportsInterface" + | "tssAddress" + | "unpause" + | "updateTSSAddress" + | "upgradeToAndCall" + | "withdraw" + | "withdrawAndCall" + | "withdrawAndRevert" + | "zetaToken" + ): FunctionFragment; + + getEvent( + nameOrSignatureOrTopic: + | "Initialized" + | "Paused" + | "RoleAdminChanged" + | "RoleGranted" + | "RoleRevoked" + | "Unpaused" + | "UpdatedZetaConnectorTSSAddress" + | "Upgraded" + | "Withdrawn" + | "WithdrawnAndCalled" + | "WithdrawnAndReverted" + | "WithdrawnV2" + ): EventFragment; + + encodeFunctionData( + functionFragment: "DEFAULT_ADMIN_ROLE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "PAUSER_ROLE", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "TSS_ROLE", values?: undefined): string; + encodeFunctionData( + functionFragment: "UPGRADE_INTERFACE_VERSION", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "WITHDRAWER_ROLE", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "gateway", values?: undefined): string; + encodeFunctionData( + functionFragment: "getRoleAdmin", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "grantRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "hasRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "initialize", + values: [AddressLike, AddressLike, AddressLike, AddressLike] + ): string; + encodeFunctionData(functionFragment: "pause", values?: undefined): string; + encodeFunctionData(functionFragment: "paused", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "receiveTokens", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "renounceRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "revokeRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "supportsInterface", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "tssAddress", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData( + functionFragment: "updateTSSAddress", + values: [AddressLike] + ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [AddressLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "withdraw", + values: [AddressLike, BigNumberish, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "withdrawAndCall", + values: [AddressLike, BigNumberish, BytesLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "withdrawAndRevert", + values: [ + AddressLike, + BigNumberish, + BytesLike, + BytesLike, + RevertContextStruct + ] + ): string; + encodeFunctionData(functionFragment: "zetaToken", values?: undefined): string; + + decodeFunctionResult( + functionFragment: "DEFAULT_ADMIN_ROLE", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "PAUSER_ROLE", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "TSS_ROLE", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "UPGRADE_INTERFACE_VERSION", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "WITHDRAWER_ROLE", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getRoleAdmin", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "receiveTokens", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "renounceRole", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "revokeRole", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "supportsInterface", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "tssAddress", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "updateTSSAddress", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "withdrawAndCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawAndRevert", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "zetaToken", data: BytesLike): Result; +} + +export namespace InitializedEvent { + export type InputTuple = [version: BigNumberish]; + export type OutputTuple = [version: bigint]; + export interface OutputObject { + version: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace PausedEvent { + export type InputTuple = [account: AddressLike]; + export type OutputTuple = [account: string]; + export interface OutputObject { + account: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace RoleAdminChangedEvent { + export type InputTuple = [ + role: BytesLike, + previousAdminRole: BytesLike, + newAdminRole: BytesLike + ]; + export type OutputTuple = [ + role: string, + previousAdminRole: string, + newAdminRole: string + ]; + export interface OutputObject { + role: string; + previousAdminRole: string; + newAdminRole: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace RoleGrantedEvent { + export type InputTuple = [ + role: BytesLike, + account: AddressLike, + sender: AddressLike + ]; + export type OutputTuple = [role: string, account: string, sender: string]; + export interface OutputObject { + role: string; + account: string; + sender: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace RoleRevokedEvent { + export type InputTuple = [ + role: BytesLike, + account: AddressLike, + sender: AddressLike + ]; + export type OutputTuple = [role: string, account: string, sender: string]; + export interface OutputObject { + role: string; + account: string; + sender: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace UnpausedEvent { + export type InputTuple = [account: AddressLike]; + export type OutputTuple = [account: string]; + export interface OutputObject { + account: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace UpdatedZetaConnectorTSSAddressEvent { + export type InputTuple = [ + oldTSSAddress: AddressLike, + newTSSAddress: AddressLike + ]; + export type OutputTuple = [oldTSSAddress: string, newTSSAddress: string]; + export interface OutputObject { + oldTSSAddress: string; + newTSSAddress: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace UpgradedEvent { + export type InputTuple = [implementation: AddressLike]; + export type OutputTuple = [implementation: string]; + export interface OutputObject { + implementation: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawnEvent { + export type InputTuple = [to: AddressLike, amount: BigNumberish]; + export type OutputTuple = [to: string, amount: bigint]; + export interface OutputObject { + to: string; + amount: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawnAndCalledEvent { + export type InputTuple = [ + to: AddressLike, + amount: BigNumberish, + data: BytesLike + ]; + export type OutputTuple = [to: string, amount: bigint, data: string]; + export interface OutputObject { + to: string; + amount: bigint; + data: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawnAndRevertedEvent { + export type InputTuple = [ + to: AddressLike, + amount: BigNumberish, + data: BytesLike, + revertContext: RevertContextStruct + ]; + export type OutputTuple = [ + to: string, + amount: bigint, + data: string, + revertContext: RevertContextStructOutput + ]; + export interface OutputObject { + to: string; + amount: bigint; + data: string; + revertContext: RevertContextStructOutput; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawnV2Event { + export type InputTuple = [to: AddressLike, amount: BigNumberish]; + export type OutputTuple = [to: string, amount: bigint]; + export interface OutputObject { + to: string; + amount: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export interface ZetaConnectorNativeUpgradeTest extends BaseContract { + connect(runner?: ContractRunner | null): ZetaConnectorNativeUpgradeTest; + waitForDeployment(): Promise; + + interface: ZetaConnectorNativeUpgradeTestInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + DEFAULT_ADMIN_ROLE: TypedContractMethod<[], [string], "view">; + + PAUSER_ROLE: TypedContractMethod<[], [string], "view">; + + TSS_ROLE: TypedContractMethod<[], [string], "view">; + + UPGRADE_INTERFACE_VERSION: TypedContractMethod<[], [string], "view">; + + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; + + gateway: TypedContractMethod<[], [string], "view">; + + getRoleAdmin: TypedContractMethod<[role: BytesLike], [string], "view">; + + grantRole: TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + + hasRole: TypedContractMethod< + [role: BytesLike, account: AddressLike], + [boolean], + "view" + >; + + initialize: TypedContractMethod< + [ + gateway_: AddressLike, + zetaToken_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike + ], + [void], + "nonpayable" + >; + + pause: TypedContractMethod<[], [void], "nonpayable">; + + paused: TypedContractMethod<[], [boolean], "view">; + + proxiableUUID: TypedContractMethod<[], [string], "view">; + + receiveTokens: TypedContractMethod< + [amount: BigNumberish], + [void], + "nonpayable" + >; + + renounceRole: TypedContractMethod< + [role: BytesLike, callerConfirmation: AddressLike], + [void], + "nonpayable" + >; + + revokeRole: TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + + supportsInterface: TypedContractMethod< + [interfaceId: BytesLike], + [boolean], + "view" + >; + + tssAddress: TypedContractMethod<[], [string], "view">; + + unpause: TypedContractMethod<[], [void], "nonpayable">; + + updateTSSAddress: TypedContractMethod< + [newTSSAddress: AddressLike], + [void], + "nonpayable" + >; + + upgradeToAndCall: TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; + + withdraw: TypedContractMethod< + [to: AddressLike, amount: BigNumberish, internalSendHash: BytesLike], + [void], + "nonpayable" + >; + + withdrawAndCall: TypedContractMethod< + [ + to: AddressLike, + amount: BigNumberish, + data: BytesLike, + internalSendHash: BytesLike + ], + [void], + "nonpayable" + >; + + withdrawAndRevert: TypedContractMethod< + [ + to: AddressLike, + amount: BigNumberish, + data: BytesLike, + internalSendHash: BytesLike, + revertContext: RevertContextStruct + ], + [void], + "nonpayable" + >; + + zetaToken: TypedContractMethod<[], [string], "view">; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "DEFAULT_ADMIN_ROLE" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "PAUSER_ROLE" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "TSS_ROLE" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "UPGRADE_INTERFACE_VERSION" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "WITHDRAWER_ROLE" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "gateway" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "getRoleAdmin" + ): TypedContractMethod<[role: BytesLike], [string], "view">; + getFunction( + nameOrSignature: "grantRole" + ): TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "hasRole" + ): TypedContractMethod< + [role: BytesLike, account: AddressLike], + [boolean], + "view" + >; + getFunction( + nameOrSignature: "initialize" + ): TypedContractMethod< + [ + gateway_: AddressLike, + zetaToken_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "pause" + ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "paused" + ): TypedContractMethod<[], [boolean], "view">; + getFunction( + nameOrSignature: "proxiableUUID" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "receiveTokens" + ): TypedContractMethod<[amount: BigNumberish], [void], "nonpayable">; + getFunction( + nameOrSignature: "renounceRole" + ): TypedContractMethod< + [role: BytesLike, callerConfirmation: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "revokeRole" + ): TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "supportsInterface" + ): TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">; + getFunction( + nameOrSignature: "tssAddress" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "unpause" + ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "updateTSSAddress" + ): TypedContractMethod<[newTSSAddress: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "upgradeToAndCall" + ): TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; + getFunction( + nameOrSignature: "withdraw" + ): TypedContractMethod< + [to: AddressLike, amount: BigNumberish, internalSendHash: BytesLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "withdrawAndCall" + ): TypedContractMethod< + [ + to: AddressLike, + amount: BigNumberish, + data: BytesLike, + internalSendHash: BytesLike + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "withdrawAndRevert" + ): TypedContractMethod< + [ + to: AddressLike, + amount: BigNumberish, + data: BytesLike, + internalSendHash: BytesLike, + revertContext: RevertContextStruct + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "zetaToken" + ): TypedContractMethod<[], [string], "view">; + + getEvent( + key: "Initialized" + ): TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + getEvent( + key: "Paused" + ): TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + getEvent( + key: "RoleAdminChanged" + ): TypedContractEvent< + RoleAdminChangedEvent.InputTuple, + RoleAdminChangedEvent.OutputTuple, + RoleAdminChangedEvent.OutputObject + >; + getEvent( + key: "RoleGranted" + ): TypedContractEvent< + RoleGrantedEvent.InputTuple, + RoleGrantedEvent.OutputTuple, + RoleGrantedEvent.OutputObject + >; + getEvent( + key: "RoleRevoked" + ): TypedContractEvent< + RoleRevokedEvent.InputTuple, + RoleRevokedEvent.OutputTuple, + RoleRevokedEvent.OutputObject + >; + getEvent( + key: "Unpaused" + ): TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + getEvent( + key: "UpdatedZetaConnectorTSSAddress" + ): TypedContractEvent< + UpdatedZetaConnectorTSSAddressEvent.InputTuple, + UpdatedZetaConnectorTSSAddressEvent.OutputTuple, + UpdatedZetaConnectorTSSAddressEvent.OutputObject + >; + getEvent( + key: "Upgraded" + ): TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + getEvent( + key: "Withdrawn" + ): TypedContractEvent< + WithdrawnEvent.InputTuple, + WithdrawnEvent.OutputTuple, + WithdrawnEvent.OutputObject + >; + getEvent( + key: "WithdrawnAndCalled" + ): TypedContractEvent< + WithdrawnAndCalledEvent.InputTuple, + WithdrawnAndCalledEvent.OutputTuple, + WithdrawnAndCalledEvent.OutputObject + >; + getEvent( + key: "WithdrawnAndReverted" + ): TypedContractEvent< + WithdrawnAndRevertedEvent.InputTuple, + WithdrawnAndRevertedEvent.OutputTuple, + WithdrawnAndRevertedEvent.OutputObject + >; + getEvent( + key: "WithdrawnV2" + ): TypedContractEvent< + WithdrawnV2Event.InputTuple, + WithdrawnV2Event.OutputTuple, + WithdrawnV2Event.OutputObject + >; + + filters: { + "Initialized(uint64)": TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + Initialized: TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + + "Paused(address)": TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + Paused: TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + + "RoleAdminChanged(bytes32,bytes32,bytes32)": TypedContractEvent< + RoleAdminChangedEvent.InputTuple, + RoleAdminChangedEvent.OutputTuple, + RoleAdminChangedEvent.OutputObject + >; + RoleAdminChanged: TypedContractEvent< + RoleAdminChangedEvent.InputTuple, + RoleAdminChangedEvent.OutputTuple, + RoleAdminChangedEvent.OutputObject + >; + + "RoleGranted(bytes32,address,address)": TypedContractEvent< + RoleGrantedEvent.InputTuple, + RoleGrantedEvent.OutputTuple, + RoleGrantedEvent.OutputObject + >; + RoleGranted: TypedContractEvent< + RoleGrantedEvent.InputTuple, + RoleGrantedEvent.OutputTuple, + RoleGrantedEvent.OutputObject + >; + + "RoleRevoked(bytes32,address,address)": TypedContractEvent< + RoleRevokedEvent.InputTuple, + RoleRevokedEvent.OutputTuple, + RoleRevokedEvent.OutputObject + >; + RoleRevoked: TypedContractEvent< + RoleRevokedEvent.InputTuple, + RoleRevokedEvent.OutputTuple, + RoleRevokedEvent.OutputObject + >; + + "Unpaused(address)": TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + Unpaused: TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + + "UpdatedZetaConnectorTSSAddress(address,address)": TypedContractEvent< + UpdatedZetaConnectorTSSAddressEvent.InputTuple, + UpdatedZetaConnectorTSSAddressEvent.OutputTuple, + UpdatedZetaConnectorTSSAddressEvent.OutputObject + >; + UpdatedZetaConnectorTSSAddress: TypedContractEvent< + UpdatedZetaConnectorTSSAddressEvent.InputTuple, + UpdatedZetaConnectorTSSAddressEvent.OutputTuple, + UpdatedZetaConnectorTSSAddressEvent.OutputObject + >; + + "Upgraded(address)": TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + Upgraded: TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + + "Withdrawn(address,uint256)": TypedContractEvent< + WithdrawnEvent.InputTuple, + WithdrawnEvent.OutputTuple, + WithdrawnEvent.OutputObject + >; + Withdrawn: TypedContractEvent< + WithdrawnEvent.InputTuple, + WithdrawnEvent.OutputTuple, + WithdrawnEvent.OutputObject + >; + + "WithdrawnAndCalled(address,uint256,bytes)": TypedContractEvent< + WithdrawnAndCalledEvent.InputTuple, + WithdrawnAndCalledEvent.OutputTuple, + WithdrawnAndCalledEvent.OutputObject + >; + WithdrawnAndCalled: TypedContractEvent< + WithdrawnAndCalledEvent.InputTuple, + WithdrawnAndCalledEvent.OutputTuple, + WithdrawnAndCalledEvent.OutputObject + >; + + "WithdrawnAndReverted(address,uint256,bytes,tuple)": TypedContractEvent< + WithdrawnAndRevertedEvent.InputTuple, + WithdrawnAndRevertedEvent.OutputTuple, + WithdrawnAndRevertedEvent.OutputObject + >; + WithdrawnAndReverted: TypedContractEvent< + WithdrawnAndRevertedEvent.InputTuple, + WithdrawnAndRevertedEvent.OutputTuple, + WithdrawnAndRevertedEvent.OutputObject + >; + + "WithdrawnV2(address,uint256)": TypedContractEvent< + WithdrawnV2Event.InputTuple, + WithdrawnV2Event.OutputTuple, + WithdrawnV2Event.OutputObject + >; + WithdrawnV2: TypedContractEvent< + WithdrawnV2Event.InputTuple, + WithdrawnV2Event.OutputTuple, + WithdrawnV2Event.OutputObject + >; + }; +} diff --git a/v2/types/ZetaConnectorNonNative.ts b/v2/types/ZetaConnectorNonNative.ts index e462872e3..e2d99c997 100644 --- a/v2/types/ZetaConnectorNonNative.ts +++ b/v2/types/ZetaConnectorNonNative.ts @@ -41,14 +41,17 @@ export interface ZetaConnectorNonNativeInterface extends Interface { | "DEFAULT_ADMIN_ROLE" | "PAUSER_ROLE" | "TSS_ROLE" + | "UPGRADE_INTERFACE_VERSION" | "WITHDRAWER_ROLE" | "gateway" | "getRoleAdmin" | "grantRole" | "hasRole" + | "initialize" | "maxSupply" | "pause" | "paused" + | "proxiableUUID" | "receiveTokens" | "renounceRole" | "revokeRole" @@ -57,6 +60,7 @@ export interface ZetaConnectorNonNativeInterface extends Interface { | "tssAddress" | "unpause" | "updateTSSAddress" + | "upgradeToAndCall" | "withdraw" | "withdrawAndCall" | "withdrawAndRevert" @@ -65,6 +69,7 @@ export interface ZetaConnectorNonNativeInterface extends Interface { getEvent( nameOrSignatureOrTopic: + | "Initialized" | "MaxSupplyUpdated" | "Paused" | "RoleAdminChanged" @@ -72,6 +77,7 @@ export interface ZetaConnectorNonNativeInterface extends Interface { | "RoleRevoked" | "Unpaused" | "UpdatedZetaConnectorTSSAddress" + | "Upgraded" | "Withdrawn" | "WithdrawnAndCalled" | "WithdrawnAndReverted" @@ -86,6 +92,10 @@ export interface ZetaConnectorNonNativeInterface extends Interface { values?: undefined ): string; encodeFunctionData(functionFragment: "TSS_ROLE", values?: undefined): string; + encodeFunctionData( + functionFragment: "UPGRADE_INTERFACE_VERSION", + values?: undefined + ): string; encodeFunctionData( functionFragment: "WITHDRAWER_ROLE", values?: undefined @@ -103,9 +113,17 @@ export interface ZetaConnectorNonNativeInterface extends Interface { functionFragment: "hasRole", values: [BytesLike, AddressLike] ): string; + encodeFunctionData( + functionFragment: "initialize", + values: [AddressLike, AddressLike, AddressLike, AddressLike] + ): string; encodeFunctionData(functionFragment: "maxSupply", values?: undefined): string; encodeFunctionData(functionFragment: "pause", values?: undefined): string; encodeFunctionData(functionFragment: "paused", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; encodeFunctionData( functionFragment: "receiveTokens", values: [BigNumberish] @@ -135,6 +153,10 @@ export interface ZetaConnectorNonNativeInterface extends Interface { functionFragment: "updateTSSAddress", values: [AddressLike] ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [AddressLike, BytesLike] + ): string; encodeFunctionData( functionFragment: "withdraw", values: [AddressLike, BigNumberish, BytesLike] @@ -164,6 +186,10 @@ export interface ZetaConnectorNonNativeInterface extends Interface { data: BytesLike ): Result; decodeFunctionResult(functionFragment: "TSS_ROLE", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "UPGRADE_INTERFACE_VERSION", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "WITHDRAWER_ROLE", data: BytesLike @@ -175,9 +201,14 @@ export interface ZetaConnectorNonNativeInterface extends Interface { ): Result; decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result; decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; decodeFunctionResult(functionFragment: "maxSupply", data: BytesLike): Result; decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "receiveTokens", data: BytesLike @@ -201,6 +232,10 @@ export interface ZetaConnectorNonNativeInterface extends Interface { functionFragment: "updateTSSAddress", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( functionFragment: "withdrawAndCall", @@ -213,6 +248,18 @@ export interface ZetaConnectorNonNativeInterface extends Interface { decodeFunctionResult(functionFragment: "zetaToken", data: BytesLike): Result; } +export namespace InitializedEvent { + export type InputTuple = [version: BigNumberish]; + export type OutputTuple = [version: bigint]; + export interface OutputObject { + version: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace MaxSupplyUpdatedEvent { export type InputTuple = [maxSupply: BigNumberish]; export type OutputTuple = [maxSupply: bigint]; @@ -308,9 +355,13 @@ export namespace UnpausedEvent { } export namespace UpdatedZetaConnectorTSSAddressEvent { - export type InputTuple = [newTSSAddress: AddressLike]; - export type OutputTuple = [newTSSAddress: string]; + export type InputTuple = [ + oldTSSAddress: AddressLike, + newTSSAddress: AddressLike + ]; + export type OutputTuple = [oldTSSAddress: string, newTSSAddress: string]; export interface OutputObject { + oldTSSAddress: string; newTSSAddress: string; } export type Event = TypedContractEvent; @@ -319,6 +370,18 @@ export namespace UpdatedZetaConnectorTSSAddressEvent { export type LogDescription = TypedLogDescription; } +export namespace UpgradedEvent { + export type InputTuple = [implementation: AddressLike]; + export type OutputTuple = [implementation: string]; + export interface OutputObject { + implementation: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + export namespace WithdrawnEvent { export type InputTuple = [to: AddressLike, amount: BigNumberish]; export type OutputTuple = [to: string, amount: bigint]; @@ -424,6 +487,8 @@ export interface ZetaConnectorNonNative extends BaseContract { TSS_ROLE: TypedContractMethod<[], [string], "view">; + UPGRADE_INTERFACE_VERSION: TypedContractMethod<[], [string], "view">; + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; gateway: TypedContractMethod<[], [string], "view">; @@ -442,12 +507,25 @@ export interface ZetaConnectorNonNative extends BaseContract { "view" >; + initialize: TypedContractMethod< + [ + gateway_: AddressLike, + zetaToken_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike + ], + [void], + "nonpayable" + >; + maxSupply: TypedContractMethod<[], [bigint], "view">; pause: TypedContractMethod<[], [void], "nonpayable">; paused: TypedContractMethod<[], [boolean], "view">; + proxiableUUID: TypedContractMethod<[], [string], "view">; + receiveTokens: TypedContractMethod< [amount: BigNumberish], [void], @@ -488,6 +566,12 @@ export interface ZetaConnectorNonNative extends BaseContract { "nonpayable" >; + upgradeToAndCall: TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; + withdraw: TypedContractMethod< [to: AddressLike, amount: BigNumberish, internalSendHash: BytesLike], [void], @@ -532,6 +616,9 @@ export interface ZetaConnectorNonNative extends BaseContract { getFunction( nameOrSignature: "TSS_ROLE" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "UPGRADE_INTERFACE_VERSION" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "WITHDRAWER_ROLE" ): TypedContractMethod<[], [string], "view">; @@ -555,6 +642,18 @@ export interface ZetaConnectorNonNative extends BaseContract { [boolean], "view" >; + getFunction( + nameOrSignature: "initialize" + ): TypedContractMethod< + [ + gateway_: AddressLike, + zetaToken_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike + ], + [void], + "nonpayable" + >; getFunction( nameOrSignature: "maxSupply" ): TypedContractMethod<[], [bigint], "view">; @@ -564,6 +663,9 @@ export interface ZetaConnectorNonNative extends BaseContract { getFunction( nameOrSignature: "paused" ): TypedContractMethod<[], [boolean], "view">; + getFunction( + nameOrSignature: "proxiableUUID" + ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "receiveTokens" ): TypedContractMethod<[amount: BigNumberish], [void], "nonpayable">; @@ -596,6 +698,13 @@ export interface ZetaConnectorNonNative extends BaseContract { getFunction( nameOrSignature: "updateTSSAddress" ): TypedContractMethod<[newTSSAddress: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "upgradeToAndCall" + ): TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; getFunction( nameOrSignature: "withdraw" ): TypedContractMethod< @@ -632,6 +741,13 @@ export interface ZetaConnectorNonNative extends BaseContract { nameOrSignature: "zetaToken" ): TypedContractMethod<[], [string], "view">; + getEvent( + key: "Initialized" + ): TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; getEvent( key: "MaxSupplyUpdated" ): TypedContractEvent< @@ -681,6 +797,13 @@ export interface ZetaConnectorNonNative extends BaseContract { UpdatedZetaConnectorTSSAddressEvent.OutputTuple, UpdatedZetaConnectorTSSAddressEvent.OutputObject >; + getEvent( + key: "Upgraded" + ): TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; getEvent( key: "Withdrawn" ): TypedContractEvent< @@ -704,6 +827,17 @@ export interface ZetaConnectorNonNative extends BaseContract { >; filters: { + "Initialized(uint64)": TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + Initialized: TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + "MaxSupplyUpdated(uint256)": TypedContractEvent< MaxSupplyUpdatedEvent.InputTuple, MaxSupplyUpdatedEvent.OutputTuple, @@ -770,7 +904,7 @@ export interface ZetaConnectorNonNative extends BaseContract { UnpausedEvent.OutputObject >; - "UpdatedZetaConnectorTSSAddress(address)": TypedContractEvent< + "UpdatedZetaConnectorTSSAddress(address,address)": TypedContractEvent< UpdatedZetaConnectorTSSAddressEvent.InputTuple, UpdatedZetaConnectorTSSAddressEvent.OutputTuple, UpdatedZetaConnectorTSSAddressEvent.OutputObject @@ -781,6 +915,17 @@ export interface ZetaConnectorNonNative extends BaseContract { UpdatedZetaConnectorTSSAddressEvent.OutputObject >; + "Upgraded(address)": TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + Upgraded: TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + "Withdrawn(address,uint256)": TypedContractEvent< WithdrawnEvent.InputTuple, WithdrawnEvent.OutputTuple, diff --git a/v2/types/ZetaConnectorNonNativeUpgradeTest.ts b/v2/types/ZetaConnectorNonNativeUpgradeTest.ts new file mode 100644 index 000000000..96d32fbd0 --- /dev/null +++ b/v2/types/ZetaConnectorNonNativeUpgradeTest.ts @@ -0,0 +1,994 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + EventFragment, + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, + TypedListener, + TypedContractMethod, +} from "./common"; + +export type RevertContextStruct = { + asset: AddressLike; + amount: BigNumberish; + revertMessage: BytesLike; +}; + +export type RevertContextStructOutput = [ + asset: string, + amount: bigint, + revertMessage: string +] & { asset: string; amount: bigint; revertMessage: string }; + +export interface ZetaConnectorNonNativeUpgradeTestInterface extends Interface { + getFunction( + nameOrSignature: + | "DEFAULT_ADMIN_ROLE" + | "PAUSER_ROLE" + | "TSS_ROLE" + | "UPGRADE_INTERFACE_VERSION" + | "WITHDRAWER_ROLE" + | "gateway" + | "getRoleAdmin" + | "grantRole" + | "hasRole" + | "initialize" + | "maxSupply" + | "pause" + | "paused" + | "proxiableUUID" + | "receiveTokens" + | "renounceRole" + | "revokeRole" + | "setMaxSupply" + | "supportsInterface" + | "tssAddress" + | "unpause" + | "updateTSSAddress" + | "upgradeToAndCall" + | "withdraw" + | "withdrawAndCall" + | "withdrawAndRevert" + | "zetaToken" + ): FunctionFragment; + + getEvent( + nameOrSignatureOrTopic: + | "Initialized" + | "MaxSupplyUpdated" + | "Paused" + | "RoleAdminChanged" + | "RoleGranted" + | "RoleRevoked" + | "Unpaused" + | "UpdatedZetaConnectorTSSAddress" + | "Upgraded" + | "Withdrawn" + | "WithdrawnAndCalled" + | "WithdrawnAndReverted" + | "WithdrawnV2" + ): EventFragment; + + encodeFunctionData( + functionFragment: "DEFAULT_ADMIN_ROLE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "PAUSER_ROLE", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "TSS_ROLE", values?: undefined): string; + encodeFunctionData( + functionFragment: "UPGRADE_INTERFACE_VERSION", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "WITHDRAWER_ROLE", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "gateway", values?: undefined): string; + encodeFunctionData( + functionFragment: "getRoleAdmin", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "grantRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "hasRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "initialize", + values: [AddressLike, AddressLike, AddressLike, AddressLike] + ): string; + encodeFunctionData(functionFragment: "maxSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "pause", values?: undefined): string; + encodeFunctionData(functionFragment: "paused", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "receiveTokens", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "renounceRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "revokeRole", + values: [BytesLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "setMaxSupply", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "supportsInterface", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "tssAddress", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData( + functionFragment: "updateTSSAddress", + values: [AddressLike] + ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [AddressLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "withdraw", + values: [AddressLike, BigNumberish, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "withdrawAndCall", + values: [AddressLike, BigNumberish, BytesLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "withdrawAndRevert", + values: [ + AddressLike, + BigNumberish, + BytesLike, + BytesLike, + RevertContextStruct + ] + ): string; + encodeFunctionData(functionFragment: "zetaToken", values?: undefined): string; + + decodeFunctionResult( + functionFragment: "DEFAULT_ADMIN_ROLE", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "PAUSER_ROLE", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "TSS_ROLE", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "UPGRADE_INTERFACE_VERSION", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "WITHDRAWER_ROLE", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getRoleAdmin", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "maxSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "receiveTokens", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "renounceRole", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "revokeRole", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "setMaxSupply", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "supportsInterface", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "tssAddress", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "updateTSSAddress", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "withdrawAndCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawAndRevert", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "zetaToken", data: BytesLike): Result; +} + +export namespace InitializedEvent { + export type InputTuple = [version: BigNumberish]; + export type OutputTuple = [version: bigint]; + export interface OutputObject { + version: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace MaxSupplyUpdatedEvent { + export type InputTuple = [maxSupply: BigNumberish]; + export type OutputTuple = [maxSupply: bigint]; + export interface OutputObject { + maxSupply: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace PausedEvent { + export type InputTuple = [account: AddressLike]; + export type OutputTuple = [account: string]; + export interface OutputObject { + account: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace RoleAdminChangedEvent { + export type InputTuple = [ + role: BytesLike, + previousAdminRole: BytesLike, + newAdminRole: BytesLike + ]; + export type OutputTuple = [ + role: string, + previousAdminRole: string, + newAdminRole: string + ]; + export interface OutputObject { + role: string; + previousAdminRole: string; + newAdminRole: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace RoleGrantedEvent { + export type InputTuple = [ + role: BytesLike, + account: AddressLike, + sender: AddressLike + ]; + export type OutputTuple = [role: string, account: string, sender: string]; + export interface OutputObject { + role: string; + account: string; + sender: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace RoleRevokedEvent { + export type InputTuple = [ + role: BytesLike, + account: AddressLike, + sender: AddressLike + ]; + export type OutputTuple = [role: string, account: string, sender: string]; + export interface OutputObject { + role: string; + account: string; + sender: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace UnpausedEvent { + export type InputTuple = [account: AddressLike]; + export type OutputTuple = [account: string]; + export interface OutputObject { + account: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace UpdatedZetaConnectorTSSAddressEvent { + export type InputTuple = [ + oldTSSAddress: AddressLike, + newTSSAddress: AddressLike + ]; + export type OutputTuple = [oldTSSAddress: string, newTSSAddress: string]; + export interface OutputObject { + oldTSSAddress: string; + newTSSAddress: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace UpgradedEvent { + export type InputTuple = [implementation: AddressLike]; + export type OutputTuple = [implementation: string]; + export interface OutputObject { + implementation: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawnEvent { + export type InputTuple = [to: AddressLike, amount: BigNumberish]; + export type OutputTuple = [to: string, amount: bigint]; + export interface OutputObject { + to: string; + amount: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawnAndCalledEvent { + export type InputTuple = [ + to: AddressLike, + amount: BigNumberish, + data: BytesLike + ]; + export type OutputTuple = [to: string, amount: bigint, data: string]; + export interface OutputObject { + to: string; + amount: bigint; + data: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawnAndRevertedEvent { + export type InputTuple = [ + to: AddressLike, + amount: BigNumberish, + data: BytesLike, + revertContext: RevertContextStruct + ]; + export type OutputTuple = [ + to: string, + amount: bigint, + data: string, + revertContext: RevertContextStructOutput + ]; + export interface OutputObject { + to: string; + amount: bigint; + data: string; + revertContext: RevertContextStructOutput; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace WithdrawnV2Event { + export type InputTuple = [to: AddressLike, amount: BigNumberish]; + export type OutputTuple = [to: string, amount: bigint]; + export interface OutputObject { + to: string; + amount: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export interface ZetaConnectorNonNativeUpgradeTest extends BaseContract { + connect(runner?: ContractRunner | null): ZetaConnectorNonNativeUpgradeTest; + waitForDeployment(): Promise; + + interface: ZetaConnectorNonNativeUpgradeTestInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + DEFAULT_ADMIN_ROLE: TypedContractMethod<[], [string], "view">; + + PAUSER_ROLE: TypedContractMethod<[], [string], "view">; + + TSS_ROLE: TypedContractMethod<[], [string], "view">; + + UPGRADE_INTERFACE_VERSION: TypedContractMethod<[], [string], "view">; + + WITHDRAWER_ROLE: TypedContractMethod<[], [string], "view">; + + gateway: TypedContractMethod<[], [string], "view">; + + getRoleAdmin: TypedContractMethod<[role: BytesLike], [string], "view">; + + grantRole: TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + + hasRole: TypedContractMethod< + [role: BytesLike, account: AddressLike], + [boolean], + "view" + >; + + initialize: TypedContractMethod< + [ + gateway_: AddressLike, + zetaToken_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike + ], + [void], + "nonpayable" + >; + + maxSupply: TypedContractMethod<[], [bigint], "view">; + + pause: TypedContractMethod<[], [void], "nonpayable">; + + paused: TypedContractMethod<[], [boolean], "view">; + + proxiableUUID: TypedContractMethod<[], [string], "view">; + + receiveTokens: TypedContractMethod< + [amount: BigNumberish], + [void], + "nonpayable" + >; + + renounceRole: TypedContractMethod< + [role: BytesLike, callerConfirmation: AddressLike], + [void], + "nonpayable" + >; + + revokeRole: TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + + setMaxSupply: TypedContractMethod< + [maxSupply_: BigNumberish], + [void], + "nonpayable" + >; + + supportsInterface: TypedContractMethod< + [interfaceId: BytesLike], + [boolean], + "view" + >; + + tssAddress: TypedContractMethod<[], [string], "view">; + + unpause: TypedContractMethod<[], [void], "nonpayable">; + + updateTSSAddress: TypedContractMethod< + [newTSSAddress: AddressLike], + [void], + "nonpayable" + >; + + upgradeToAndCall: TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; + + withdraw: TypedContractMethod< + [to: AddressLike, amount: BigNumberish, internalSendHash: BytesLike], + [void], + "nonpayable" + >; + + withdrawAndCall: TypedContractMethod< + [ + to: AddressLike, + amount: BigNumberish, + data: BytesLike, + internalSendHash: BytesLike + ], + [void], + "nonpayable" + >; + + withdrawAndRevert: TypedContractMethod< + [ + to: AddressLike, + amount: BigNumberish, + data: BytesLike, + internalSendHash: BytesLike, + revertContext: RevertContextStruct + ], + [void], + "nonpayable" + >; + + zetaToken: TypedContractMethod<[], [string], "view">; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "DEFAULT_ADMIN_ROLE" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "PAUSER_ROLE" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "TSS_ROLE" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "UPGRADE_INTERFACE_VERSION" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "WITHDRAWER_ROLE" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "gateway" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "getRoleAdmin" + ): TypedContractMethod<[role: BytesLike], [string], "view">; + getFunction( + nameOrSignature: "grantRole" + ): TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "hasRole" + ): TypedContractMethod< + [role: BytesLike, account: AddressLike], + [boolean], + "view" + >; + getFunction( + nameOrSignature: "initialize" + ): TypedContractMethod< + [ + gateway_: AddressLike, + zetaToken_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "maxSupply" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "pause" + ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "paused" + ): TypedContractMethod<[], [boolean], "view">; + getFunction( + nameOrSignature: "proxiableUUID" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "receiveTokens" + ): TypedContractMethod<[amount: BigNumberish], [void], "nonpayable">; + getFunction( + nameOrSignature: "renounceRole" + ): TypedContractMethod< + [role: BytesLike, callerConfirmation: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "revokeRole" + ): TypedContractMethod< + [role: BytesLike, account: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "setMaxSupply" + ): TypedContractMethod<[maxSupply_: BigNumberish], [void], "nonpayable">; + getFunction( + nameOrSignature: "supportsInterface" + ): TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">; + getFunction( + nameOrSignature: "tssAddress" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "unpause" + ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "updateTSSAddress" + ): TypedContractMethod<[newTSSAddress: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "upgradeToAndCall" + ): TypedContractMethod< + [newImplementation: AddressLike, data: BytesLike], + [void], + "payable" + >; + getFunction( + nameOrSignature: "withdraw" + ): TypedContractMethod< + [to: AddressLike, amount: BigNumberish, internalSendHash: BytesLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "withdrawAndCall" + ): TypedContractMethod< + [ + to: AddressLike, + amount: BigNumberish, + data: BytesLike, + internalSendHash: BytesLike + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "withdrawAndRevert" + ): TypedContractMethod< + [ + to: AddressLike, + amount: BigNumberish, + data: BytesLike, + internalSendHash: BytesLike, + revertContext: RevertContextStruct + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "zetaToken" + ): TypedContractMethod<[], [string], "view">; + + getEvent( + key: "Initialized" + ): TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + getEvent( + key: "MaxSupplyUpdated" + ): TypedContractEvent< + MaxSupplyUpdatedEvent.InputTuple, + MaxSupplyUpdatedEvent.OutputTuple, + MaxSupplyUpdatedEvent.OutputObject + >; + getEvent( + key: "Paused" + ): TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + getEvent( + key: "RoleAdminChanged" + ): TypedContractEvent< + RoleAdminChangedEvent.InputTuple, + RoleAdminChangedEvent.OutputTuple, + RoleAdminChangedEvent.OutputObject + >; + getEvent( + key: "RoleGranted" + ): TypedContractEvent< + RoleGrantedEvent.InputTuple, + RoleGrantedEvent.OutputTuple, + RoleGrantedEvent.OutputObject + >; + getEvent( + key: "RoleRevoked" + ): TypedContractEvent< + RoleRevokedEvent.InputTuple, + RoleRevokedEvent.OutputTuple, + RoleRevokedEvent.OutputObject + >; + getEvent( + key: "Unpaused" + ): TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + getEvent( + key: "UpdatedZetaConnectorTSSAddress" + ): TypedContractEvent< + UpdatedZetaConnectorTSSAddressEvent.InputTuple, + UpdatedZetaConnectorTSSAddressEvent.OutputTuple, + UpdatedZetaConnectorTSSAddressEvent.OutputObject + >; + getEvent( + key: "Upgraded" + ): TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + getEvent( + key: "Withdrawn" + ): TypedContractEvent< + WithdrawnEvent.InputTuple, + WithdrawnEvent.OutputTuple, + WithdrawnEvent.OutputObject + >; + getEvent( + key: "WithdrawnAndCalled" + ): TypedContractEvent< + WithdrawnAndCalledEvent.InputTuple, + WithdrawnAndCalledEvent.OutputTuple, + WithdrawnAndCalledEvent.OutputObject + >; + getEvent( + key: "WithdrawnAndReverted" + ): TypedContractEvent< + WithdrawnAndRevertedEvent.InputTuple, + WithdrawnAndRevertedEvent.OutputTuple, + WithdrawnAndRevertedEvent.OutputObject + >; + getEvent( + key: "WithdrawnV2" + ): TypedContractEvent< + WithdrawnV2Event.InputTuple, + WithdrawnV2Event.OutputTuple, + WithdrawnV2Event.OutputObject + >; + + filters: { + "Initialized(uint64)": TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + Initialized: TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + + "MaxSupplyUpdated(uint256)": TypedContractEvent< + MaxSupplyUpdatedEvent.InputTuple, + MaxSupplyUpdatedEvent.OutputTuple, + MaxSupplyUpdatedEvent.OutputObject + >; + MaxSupplyUpdated: TypedContractEvent< + MaxSupplyUpdatedEvent.InputTuple, + MaxSupplyUpdatedEvent.OutputTuple, + MaxSupplyUpdatedEvent.OutputObject + >; + + "Paused(address)": TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + Paused: TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + + "RoleAdminChanged(bytes32,bytes32,bytes32)": TypedContractEvent< + RoleAdminChangedEvent.InputTuple, + RoleAdminChangedEvent.OutputTuple, + RoleAdminChangedEvent.OutputObject + >; + RoleAdminChanged: TypedContractEvent< + RoleAdminChangedEvent.InputTuple, + RoleAdminChangedEvent.OutputTuple, + RoleAdminChangedEvent.OutputObject + >; + + "RoleGranted(bytes32,address,address)": TypedContractEvent< + RoleGrantedEvent.InputTuple, + RoleGrantedEvent.OutputTuple, + RoleGrantedEvent.OutputObject + >; + RoleGranted: TypedContractEvent< + RoleGrantedEvent.InputTuple, + RoleGrantedEvent.OutputTuple, + RoleGrantedEvent.OutputObject + >; + + "RoleRevoked(bytes32,address,address)": TypedContractEvent< + RoleRevokedEvent.InputTuple, + RoleRevokedEvent.OutputTuple, + RoleRevokedEvent.OutputObject + >; + RoleRevoked: TypedContractEvent< + RoleRevokedEvent.InputTuple, + RoleRevokedEvent.OutputTuple, + RoleRevokedEvent.OutputObject + >; + + "Unpaused(address)": TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + Unpaused: TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + + "UpdatedZetaConnectorTSSAddress(address,address)": TypedContractEvent< + UpdatedZetaConnectorTSSAddressEvent.InputTuple, + UpdatedZetaConnectorTSSAddressEvent.OutputTuple, + UpdatedZetaConnectorTSSAddressEvent.OutputObject + >; + UpdatedZetaConnectorTSSAddress: TypedContractEvent< + UpdatedZetaConnectorTSSAddressEvent.InputTuple, + UpdatedZetaConnectorTSSAddressEvent.OutputTuple, + UpdatedZetaConnectorTSSAddressEvent.OutputObject + >; + + "Upgraded(address)": TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + Upgraded: TypedContractEvent< + UpgradedEvent.InputTuple, + UpgradedEvent.OutputTuple, + UpgradedEvent.OutputObject + >; + + "Withdrawn(address,uint256)": TypedContractEvent< + WithdrawnEvent.InputTuple, + WithdrawnEvent.OutputTuple, + WithdrawnEvent.OutputObject + >; + Withdrawn: TypedContractEvent< + WithdrawnEvent.InputTuple, + WithdrawnEvent.OutputTuple, + WithdrawnEvent.OutputObject + >; + + "WithdrawnAndCalled(address,uint256,bytes)": TypedContractEvent< + WithdrawnAndCalledEvent.InputTuple, + WithdrawnAndCalledEvent.OutputTuple, + WithdrawnAndCalledEvent.OutputObject + >; + WithdrawnAndCalled: TypedContractEvent< + WithdrawnAndCalledEvent.InputTuple, + WithdrawnAndCalledEvent.OutputTuple, + WithdrawnAndCalledEvent.OutputObject + >; + + "WithdrawnAndReverted(address,uint256,bytes,tuple)": TypedContractEvent< + WithdrawnAndRevertedEvent.InputTuple, + WithdrawnAndRevertedEvent.OutputTuple, + WithdrawnAndRevertedEvent.OutputObject + >; + WithdrawnAndReverted: TypedContractEvent< + WithdrawnAndRevertedEvent.InputTuple, + WithdrawnAndRevertedEvent.OutputTuple, + WithdrawnAndRevertedEvent.OutputObject + >; + + "WithdrawnV2(address,uint256)": TypedContractEvent< + WithdrawnV2Event.InputTuple, + WithdrawnV2Event.OutputTuple, + WithdrawnV2Event.OutputObject + >; + WithdrawnV2: TypedContractEvent< + WithdrawnV2Event.InputTuple, + WithdrawnV2Event.OutputTuple, + WithdrawnV2Event.OutputObject + >; + }; +} diff --git a/v2/types/factories/ERC20CustodyUpgradeTest__factory.ts b/v2/types/factories/ERC20CustodyUpgradeTest__factory.ts new file mode 100644 index 000000000..37bdcf200 --- /dev/null +++ b/v2/types/factories/ERC20CustodyUpgradeTest__factory.ts @@ -0,0 +1,1043 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; +import type { NonPayableOverrides } from "../common"; +import type { + ERC20CustodyUpgradeTest, + ERC20CustodyUpgradeTestInterface, +} from "../ERC20CustodyUpgradeTest"; + +const _abi = [ + { + type: "function", + name: "DEFAULT_ADMIN_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "PAUSER_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "UPGRADE_INTERFACE_VERSION", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "WHITELISTER_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "WITHDRAWER_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "deposit", + inputs: [ + { + name: "recipient", + type: "bytes", + internalType: "bytes", + }, + { + name: "asset", + type: "address", + internalType: "contract IERC20", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "message", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "gateway", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "contract IGatewayEVM", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "getRoleAdmin", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + ], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "grantRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "hasRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "initialize", + inputs: [ + { + name: "gateway_", + type: "address", + internalType: "address", + }, + { + name: "tssAddress_", + type: "address", + internalType: "address", + }, + { + name: "admin_", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "pause", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "paused", + inputs: [], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "proxiableUUID", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "renounceRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "callerConfirmation", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "revokeRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setSupportsLegacy", + inputs: [ + { + name: "_supportsLegacy", + type: "bool", + internalType: "bool", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "supportsInterface", + inputs: [ + { + name: "interfaceId", + type: "bytes4", + internalType: "bytes4", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "supportsLegacy", + inputs: [], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "tssAddress", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "unpause", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "unwhitelist", + inputs: [ + { + name: "token", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "updateTSSAddress", + inputs: [ + { + name: "newTSSAddress", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "upgradeToAndCall", + inputs: [ + { + name: "newImplementation", + type: "address", + internalType: "address", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "payable", + }, + { + type: "function", + name: "whitelist", + inputs: [ + { + name: "token", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "whitelisted", + inputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "withdraw", + inputs: [ + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "token", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "withdrawAndCall", + inputs: [ + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "token", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "withdrawAndRevert", + inputs: [ + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "token", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + { + name: "revertContext", + type: "tuple", + internalType: "struct RevertContext", + components: [ + { + name: "asset", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint64", + internalType: "uint64", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "event", + name: "Deposited", + inputs: [ + { + name: "recipient", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + { + name: "asset", + type: "address", + indexed: true, + internalType: "contract IERC20", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "message", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Initialized", + inputs: [ + { + name: "version", + type: "uint64", + indexed: false, + internalType: "uint64", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Paused", + inputs: [ + { + name: "account", + type: "address", + indexed: false, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleAdminChanged", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "previousAdminRole", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "newAdminRole", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleGranted", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "account", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleRevoked", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "account", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Unpaused", + inputs: [ + { + name: "account", + type: "address", + indexed: false, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Unwhitelisted", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "UpdatedCustodyTSSAddress", + inputs: [ + { + name: "oldTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, + { + name: "newTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Upgraded", + inputs: [ + { + name: "implementation", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Whitelisted", + inputs: [ + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Withdrawn", + inputs: [ + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "WithdrawnAndCalled", + inputs: [ + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "WithdrawnAndReverted", + inputs: [ + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + { + name: "revertContext", + type: "tuple", + indexed: false, + internalType: "struct RevertContext", + components: [ + { + name: "asset", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint64", + internalType: "uint64", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + ], + }, + ], + anonymous: false, + }, + { + type: "event", + name: "WithdrawnV2", + inputs: [ + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "token", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "error", + name: "AccessControlBadConfirmation", + inputs: [], + }, + { + type: "error", + name: "AccessControlUnauthorizedAccount", + inputs: [ + { + name: "account", + type: "address", + internalType: "address", + }, + { + name: "neededRole", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, + { + type: "error", + name: "AddressEmptyCode", + inputs: [ + { + name: "target", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "AddressInsufficientBalance", + inputs: [ + { + name: "account", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC1967InvalidImplementation", + inputs: [ + { + name: "implementation", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC1967NonPayable", + inputs: [], + }, + { + type: "error", + name: "EnforcedPause", + inputs: [], + }, + { + type: "error", + name: "ExpectedPause", + inputs: [], + }, + { + type: "error", + name: "FailedInnerCall", + inputs: [], + }, + { + type: "error", + name: "InvalidInitialization", + inputs: [], + }, + { + type: "error", + name: "LegacyMethodsNotSupported", + inputs: [], + }, + { + type: "error", + name: "NotInitializing", + inputs: [], + }, + { + type: "error", + name: "NotWhitelisted", + inputs: [], + }, + { + type: "error", + name: "ReentrancyGuardReentrantCall", + inputs: [], + }, + { + type: "error", + name: "SafeERC20FailedOperation", + inputs: [ + { + name: "token", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "UUPSUnauthorizedCallContext", + inputs: [], + }, + { + type: "error", + name: "UUPSUnsupportedProxiableUUID", + inputs: [ + { + name: "slot", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, + { + type: "error", + name: "ZeroAddress", + inputs: [], + }, +] as const; + +const _bytecode = + "0x60a060405230608052348015601357600080fd5b5060805161296261003d600039600081816119360152818161195f0152611b3501526129626000f3fe6080604052600436106101c25760003560e01c806385f438c1116100f7578063c0c53b8b11610095578063d9caed1211610064578063d9caed12146105f6578063e609055e14610616578063e63ab1e914610636578063eab103df1461066a57600080fd5b8063c0c53b8b14610566578063c709ab6e14610586578063d547741f146105a6578063d936547e146105c657600080fd5b80639a590427116100d15780639a590427146104bb5780639b19251a146104db578063a217fddf146104fb578063ad3cb1cc1461051057600080fd5b806385f438c11461040257806391d1485414610436578063950837aa1461049b57600080fd5b80633f4ba83a11610164578063570618e11161013e578063570618e1146103625780635b112591146103965780635c975abb146103b65780638456cb59146103ed57600080fd5b80633f4ba83a146103255780634f1ef2861461033a57806352d1902d1461034d57600080fd5b8063248a9ca3116101a0578063248a9ca314610256578063252f07bf146102b35780632f2ff15d146102e557806336568abe1461030557600080fd5b806301ffc9a7146101c7578063116191b6146101fc57806321fc65f214610234575b600080fd5b3480156101d357600080fd5b506101e76101e236600461217c565b61068a565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5060005461021c906001600160a01b031681565b6040516001600160a01b0390911681526020016101f3565b34801561024057600080fd5b5061025461024f36600461221c565b610723565b005b34801561026257600080fd5b506102a561027136600461228f565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101f3565b3480156102bf57600080fd5b506002546101e79074010000000000000000000000000000000000000000900460ff1681565b3480156102f157600080fd5b506102546103003660046122a8565b6108cc565b34801561031157600080fd5b506102546103203660046122a8565b610916565b34801561033157600080fd5b50610254610967565b610254610348366004612307565b61099c565b34801561035957600080fd5b506102a56109bb565b34801561036e57600080fd5b506102a57f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b3480156103a257600080fd5b5060025461021c906001600160a01b031681565b3480156103c257600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101e7565b3480156103f957600080fd5b506102546109ea565b34801561040e57600080fd5b506102a57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561044257600080fd5b506101e76104513660046122a8565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104a757600080fd5b506102546104b6366004612410565b610a1c565b3480156104c757600080fd5b506102546104d6366004612410565b610baf565b3480156104e757600080fd5b506102546104f6366004612410565b610c63565b34801561050757600080fd5b506102a5600081565b34801561051c57600080fd5b506105596040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f39190612451565b34801561057257600080fd5b506102546105813660046124a2565b610d1d565b34801561059257600080fd5b506102546105a13660046124ed565b611017565b3480156105b257600080fd5b506102546105c13660046122a8565b6111c5565b3480156105d257600080fd5b506101e76105e1366004612410565b60016020526000908152604090205460ff1681565b34801561060257600080fd5b50610254610611366004612590565b611209565b34801561062257600080fd5b506102546106313660046125d1565b611320565b34801561064257600080fd5b506102a57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561067657600080fd5b50610254610685366004612670565b61156b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061071d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61072b6115c1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075581611642565b61075d61164c565b6001600160a01b03851660009081526001602052604090205460ff166107af576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546107c9906001600160a01b038781169116866116aa565b6000546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690635131ab599061081a9088908a908990899089906004016126d6565b600060405180830381600087803b15801561083457600080fd5b505af1158015610848573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161089393929190612719565b60405180910390a3506108c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461090681611642565b6109108383611744565b50505050565b6001600160a01b0381163314610958576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109628282611813565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61099181611642565b6109996118b9565b50565b6109a461192b565b6109ad826119fb565b6109b78282611a06565b5050565b60006109c5611b2a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1481611642565b610999611b8c565b6000610a2781611642565b6001600160a01b038216610a67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610a9e907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b0316611813565b50600254610ad6907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b0316611813565b50610b017f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483611744565b50610b2c7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a83611744565b50600254604080516001600160a01b03928316815291841660208301527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610bd981611642565b6001600160a01b038216610c19576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260016020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610c8d81611642565b6001600160a01b038216610ccd576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000818152600160208190526040808320805460ff1916909217909155517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d685750825b905060008267ffffffffffffffff166001148015610d855750303b155b905081158015610d93575080155b15610dca576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e2b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0388161580610e4857506001600160a01b038716155b80610e5a57506001600160a01b038616155b15610e91576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e99611be7565b610ea1611bef565b610ea9611be7565b610eb1611bff565b600080546001600160a01b03808b167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617835560028054918b1691909216179055610eff9087611744565b50610f2a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611744565b50610f557f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488611744565b50610f807f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a87611744565b50610fab7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a88611744565b50831561100d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61101f6115c1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461104981611642565b61105161164c565b6001600160a01b03861660009081526001602052604090205460ff166110a3576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546110bd906001600160a01b038881169116876116aa565b6000546040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063d0b492c3906111109089908b908a908a908a908a906004016127e4565b600060405180830381600087803b15801561112a57600080fd5b505af115801561113e573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b8787878760405161118b949392919061283b565b60405180910390a3506111bd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111ff81611642565b6109108383611813565b6112116115c1565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461123b81611642565b61124361164c565b6001600160a01b03831660009081526001602052604090205460ff16611295576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112a96001600160a01b03841685846116aa565b826001600160a01b0316846001600160a01b03167fd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a4846040516112ee91815260200190565b60405180910390a35061096260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6113286115c1565b61133061164c565b60025474010000000000000000000000000000000000000000900460ff16611384576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526001602052604090205460ff166113d6576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611436573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145a9190612867565b90506114716001600160a01b038616333087611c0f565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa1580156114f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151c9190612867565b6115269190612880565b87876040516115399594939291906128ba565b60405180910390a2506111bd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600061157681611642565b506002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161163c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109998133611c48565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156116a8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261096291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611cd5565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611809576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556117bf3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061071d565b600091505061071d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611809576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061071d565b6118c1611d51565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119c457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119b87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156116a8576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109b781611642565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a7e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611a7b91810190612867565b60015b611ac4576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611b20576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611abb565b6109628383611dac565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116a8576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9461164c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361190d565b6116a8611e02565b611bf7611e02565b6116a8611e69565b611c07611e02565b6116a8611e71565b6040516001600160a01b0384811660248301528381166044830152606482018390526109109186918216906323b872dd906084016116d7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166109b7576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611abb565b6000611cea6001600160a01b03841683611ea4565b90508051600014158015611d0f575080806020019051810190611d0d91906128f3565b155b15610962576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611abb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166116a8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db582611eb9565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611dfa576109628282611f61565b6109b7611fd7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166116a8576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61171e611e02565b611e79611e02565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b6060611eb28383600061200f565b9392505050565b806001600160a01b03163b600003611f08576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611abb565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611f7e9190612910565b600060405180830381855af49150503d8060008114611fb9576040519150601f19603f3d011682016040523d82523d6000602084013e611fbe565b606091505b5091509150611fce8583836120c5565b95945050505050565b34156116a8576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608147101561204d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611abb565b600080856001600160a01b031684866040516120699190612910565b60006040518083038185875af1925050503d80600081146120a6576040519150601f19603f3d011682016040523d82523d6000602084013e6120ab565b606091505b50915091506120bb8683836120c5565b9695505050505050565b6060826120da576120d58261213a565b611eb2565b81511580156120f157506001600160a01b0384163b155b15612133576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611abb565b5080611eb2565b80511561214a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561218e57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611eb257600080fd5b6001600160a01b038116811461099957600080fd5b60008083601f8401126121e557600080fd5b50813567ffffffffffffffff8111156121fd57600080fd5b60208301915083602082850101111561221557600080fd5b9250929050565b60008060008060006080868803121561223457600080fd5b853561223f816121be565b9450602086013561224f816121be565b935060408601359250606086013567ffffffffffffffff81111561227257600080fd5b61227e888289016121d3565b969995985093965092949392505050565b6000602082840312156122a157600080fd5b5035919050565b600080604083850312156122bb57600080fd5b8235915060208301356122cd816121be565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561231a57600080fd5b8235612325816121be565b9150602083013567ffffffffffffffff81111561234157600080fd5b8301601f8101851361235257600080fd5b803567ffffffffffffffff81111561236c5761236c6122d8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156123d8576123d86122d8565b6040528181528282016020018710156123f057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561242257600080fd5b8135611eb2816121be565b60005b83811015612448578181015183820152602001612430565b50506000910152565b602081526000825180602084015261247081604085016020870161242d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156124b757600080fd5b83356124c2816121be565b925060208401356124d2816121be565b915060408401356124e2816121be565b809150509250925092565b60008060008060008060a0878903121561250657600080fd5b8635612511816121be565b95506020870135612521816121be565b945060408701359350606087013567ffffffffffffffff81111561254457600080fd5b61255089828a016121d3565b909450925050608087013567ffffffffffffffff81111561257057600080fd5b87016060818a03121561258257600080fd5b809150509295509295509295565b6000806000606084860312156125a557600080fd5b83356125b0816121be565b925060208401356125c0816121be565b929592945050506040919091013590565b600080600080600080608087890312156125ea57600080fd5b863567ffffffffffffffff81111561260157600080fd5b61260d89828a016121d3565b9097509550506020870135612621816121be565b935060408701359250606087013567ffffffffffffffff81111561264457600080fd5b61265089828a016121d3565b979a9699509497509295939492505050565b801515811461099957600080fd5b60006020828403121561268257600080fd5b8135611eb281612662565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061270e60808301848661268d565b979650505050505050565b838152604060208201526000611fce60408301848661268d565b60008135612740816121be565b6001600160a01b03168352602082013567ffffffffffffffff811680821461276757600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126127a357600080fd5b820160208101903567ffffffffffffffff8111156127c057600080fd5b8036038213156127cf57600080fd5b60606040860152611fce60608601828461268d565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061281c60a08301858761268d565b828103608084015261282e8185612733565b9998505050505050505050565b84815260606020820152600061285560608301858761268d565b828103604084015261270e8185612733565b60006020828403121561287957600080fd5b5051919050565b8181038181111561071d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006128ce60608301878961268d565b85602084015282810360408401526128e781858761268d565b98975050505050505050565b60006020828403121561290557600080fd5b8151611eb281612662565b6000825161292281846020870161242d565b919091019291505056fea2646970667358221220e1f1aeb4a3ca476e75d277f26d090f5288c0a2b1bba93b67dc701bbad0ee91b564736f6c634300081a0033"; + +type ERC20CustodyUpgradeTestConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: ERC20CustodyUpgradeTestConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class ERC20CustodyUpgradeTest__factory extends ContractFactory { + constructor(...args: ERC20CustodyUpgradeTestConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override getDeployTransaction( + overrides?: NonPayableOverrides & { from?: string } + ): Promise { + return super.getDeployTransaction(overrides || {}); + } + override deploy(overrides?: NonPayableOverrides & { from?: string }) { + return super.deploy(overrides || {}) as Promise< + ERC20CustodyUpgradeTest & { + deploymentTransaction(): ContractTransactionResponse; + } + >; + } + override connect( + runner: ContractRunner | null + ): ERC20CustodyUpgradeTest__factory { + return super.connect(runner) as ERC20CustodyUpgradeTest__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): ERC20CustodyUpgradeTestInterface { + return new Interface(_abi) as ERC20CustodyUpgradeTestInterface; + } + static connect( + address: string, + runner?: ContractRunner | null + ): ERC20CustodyUpgradeTest { + return new Contract( + address, + _abi, + runner + ) as unknown as ERC20CustodyUpgradeTest; + } +} diff --git a/v2/types/factories/ERC20Custody__factory.ts b/v2/types/factories/ERC20Custody__factory.ts index bb5c5357f..5f84e3443 100644 --- a/v2/types/factories/ERC20Custody__factory.ts +++ b/v2/types/factories/ERC20Custody__factory.ts @@ -7,40 +7,27 @@ import { ContractTransactionResponse, Interface, } from "ethers"; -import type { - Signer, - AddressLike, - ContractDeployTransaction, - ContractRunner, -} from "ethers"; +import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; import type { NonPayableOverrides } from "../common"; import type { ERC20Custody, ERC20CustodyInterface } from "../ERC20Custody"; const _abi = [ { - type: "constructor", - inputs: [ - { - name: "gateway_", - type: "address", - internalType: "address", - }, - { - name: "tssAddress_", - type: "address", - internalType: "address", - }, + type: "function", + name: "DEFAULT_ADMIN_ROLE", + inputs: [], + outputs: [ { - name: "admin_", - type: "address", - internalType: "address", + name: "", + type: "bytes32", + internalType: "bytes32", }, ], - stateMutability: "nonpayable", + stateMutability: "view", }, { type: "function", - name: "DEFAULT_ADMIN_ROLE", + name: "PAUSER_ROLE", inputs: [], outputs: [ { @@ -53,13 +40,13 @@ const _abi = [ }, { type: "function", - name: "PAUSER_ROLE", + name: "UPGRADE_INTERFACE_VERSION", inputs: [], outputs: [ { name: "", - type: "bytes32", - internalType: "bytes32", + type: "string", + internalType: "string", }, ], stateMutability: "view", @@ -192,6 +179,29 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "initialize", + inputs: [ + { + name: "gateway_", + type: "address", + internalType: "address", + }, + { + name: "tssAddress_", + type: "address", + internalType: "address", + }, + { + name: "admin_", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, { type: "function", name: "pause", @@ -212,6 +222,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "proxiableUUID", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, { type: "function", name: "renounceRole", @@ -339,6 +362,24 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, + { + type: "function", + name: "upgradeToAndCall", + inputs: [ + { + name: "newImplementation", + type: "address", + internalType: "address", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "payable", + }, { type: "function", name: "whitelist", @@ -458,8 +499,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -503,6 +544,19 @@ const _abi = [ ], anonymous: false, }, + { + type: "event", + name: "Initialized", + inputs: [ + { + name: "version", + type: "uint64", + indexed: false, + internalType: "uint64", + }, + ], + anonymous: false, + }, { type: "event", name: "Paused", @@ -621,6 +675,12 @@ const _abi = [ type: "event", name: "UpdatedCustodyTSSAddress", inputs: [ + { + name: "oldTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, { name: "newTSSAddress", type: "address", @@ -630,6 +690,19 @@ const _abi = [ ], anonymous: false, }, + { + type: "event", + name: "Upgraded", + inputs: [ + { + name: "implementation", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, { type: "event", name: "Whitelisted", @@ -740,8 +813,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -796,6 +869,22 @@ const _abi = [ }, ], }, + { + type: "error", + name: "ERC1967InvalidImplementation", + inputs: [ + { + name: "implementation", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC1967NonPayable", + inputs: [], + }, { type: "error", name: "EnforcedPause", @@ -811,11 +900,21 @@ const _abi = [ name: "FailedInnerCall", inputs: [], }, + { + type: "error", + name: "InvalidInitialization", + inputs: [], + }, { type: "error", name: "LegacyMethodsNotSupported", inputs: [], }, + { + type: "error", + name: "NotInitializing", + inputs: [], + }, { type: "error", name: "NotWhitelisted", @@ -837,6 +936,22 @@ const _abi = [ }, ], }, + { + type: "error", + name: "UUPSUnauthorizedCallContext", + inputs: [], + }, + { + type: "error", + name: "UUPSUnsupportedProxiableUUID", + inputs: [ + { + name: "slot", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, { type: "error", name: "ZeroAddress", @@ -845,7 +960,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405234801561001057600080fd5b50604051611de7380380611de783398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611dc78339815191528261014c565b50610143600080516020611dc78339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611b50610277600039600081816101d501528181610574015281816105c9015281816107e6015261083b0152611b506000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638456cb59116100ee578063a217fddf11610097578063d9caed1211610071578063d9caed12146103e0578063e609055e146103f3578063e63ab1e914610406578063eab103df1461042d57600080fd5b8063a217fddf146103a2578063d547741f146103aa578063d936547e146103bd57600080fd5b8063950837aa116100c8578063950837aa146103695780639a5904271461037c5780639b19251a1461038f57600080fd5b80638456cb591461030157806385f438c11461030957806391d148541461033057600080fd5b806336568abe116101505780635b1125911161012a5780635b112591146102d05780635c975abb146102e35780637ab697e7146102ee57600080fd5b806336568abe1461028e5780633f4ba83a146102a1578063570618e1146102a957600080fd5b8063248a9ca311610181578063248a9ca314610224578063252f07bf146102565780632f2ff15d1461027b57600080fd5b806301ffc9a7146101a8578063116191b6146101d057806321fc65f21461020f575b600080fd5b6101bb6101b636600461155e565b610440565b60405190151581526020015b60405180910390f35b6101f77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c7565b61022261021d3660046115fe565b6104d9565b005b610248610232366004611671565b6000908152600160208190526040909120015490565b6040519081526020016101c7565b6004546101bb9074010000000000000000000000000000000000000000900460ff1681565b61022261028936600461168a565b610699565b61022261029c36600461168a565b6106c5565b610222610716565b6102487f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101f7906001600160a01b031681565b60025460ff166101bb565b6102226102fc3660046116ba565b61074b565b610222610910565b6102487f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101bb61033e36600461168a565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61022261037736600461175d565b610942565b61022261038a36600461175d565b610ac0565b61022261039d36600461175d565b610b74565b610248600081565b6102226103b836600461168a565b610c2b565b6101bb6103cb36600461175d565b60036020526000908152604090205460ff1681565b6102226103ee36600461177a565b610c51565b6102226104013660046117bb565b610d49565b6102487f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61022261043b36600461185a565b610f75565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104e1610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461050b8161100e565b610513611018565b6001600160a01b03851660009081526003602052604090205460ff16610565576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105996001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086611057565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106069088908a908990899089906004016118c0565b600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161067f93929190611903565b60405180910390a3506106926001600055565b5050505050565b600082815260016020819052604090912001546106b58161100e565b6106bf83836110cb565b50505050565b6001600160a01b0381163314610707576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610711828261115e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107408161100e565b6107486111e5565b50565b610753610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461077d8161100e565b610785611018565b6001600160a01b03861660009081526003602052604090205460ff166107d7576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61080b6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087611057565b6040517fece697b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ece697b39061087a9089908b908a908a908a908a906004016119bf565b600060405180830381600087803b15801561089457600080fd5b505af11580156108a8573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f98f2b34503a02857a06fe60729e3ebfe3f6798ff9e3bf7ca4ab5960554405640878787876040516108f59493929190611a16565b60405180910390a3506109086001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61093a8161100e565b610748611237565b600061094d8161100e565b6001600160a01b03821661098d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546109c4907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661115e565b506004546109fc907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661115e565b50610a277f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836110cb565b50610a527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a836110cb565b50600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527f086480ac96b6cbd744062a9994d7b954673bf500d6f362180ecd9cb5828e07ba9060200160405180910390a15050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610aea8161100e565b6001600160a01b038216610b2a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610b9e8161100e565b6001600160a01b038216610bde576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610c478161100e565b6106bf838361115e565b610c59610fcb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610c838161100e565b610c8b611018565b6001600160a01b03831660009081526003602052604090205460ff16610cdd576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf16001600160a01b0384168584611057565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610d3691815260200190565b60405180910390a3506107116001600055565b610d51610fcb565b610d59611018565b60045474010000000000000000000000000000000000000000900460ff16610dad576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610dff576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a42565b9050610e9a6001600160a01b038616333087611274565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f459190611a42565b610f4f9190611a5b565b8787604051610f62959493929190611a95565b60405180910390a2506109086001600055565b6000610f808161100e565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403611007576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61074881336112ad565b60025460ff1615611055576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611324565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166111565760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104d3565b5060006104d3565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16156111565760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104d3565b6111ed6113a0565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61123f611018565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861121a3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106bf9186918216906323b872dd90608401611084565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611320576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b60006113396001600160a01b038416836113dc565b9050805160001415801561135e57508080602001905181019061135c9190611ace565b155b15610711576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611317565b60025460ff16611055576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606113ea838360006113f1565b9392505050565b60608147101561142f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611317565b600080856001600160a01b0316848660405161144b9190611aeb565b60006040518083038185875af1925050503d8060008114611488576040519150601f19603f3d011682016040523d82523d6000602084013e61148d565b606091505b509150915061149d8683836114a7565b9695505050505050565b6060826114bc576114b78261151c565b6113ea565b81511580156114d357506001600160a01b0384163b155b15611515576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611317565b50806113ea565b80511561152c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561157057600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113ea57600080fd5b6001600160a01b038116811461074857600080fd5b60008083601f8401126115c757600080fd5b50813567ffffffffffffffff8111156115df57600080fd5b6020830191508360208285010111156115f757600080fd5b9250929050565b60008060008060006080868803121561161657600080fd5b8535611621816115a0565b94506020860135611631816115a0565b935060408601359250606086013567ffffffffffffffff81111561165457600080fd5b611660888289016115b5565b969995985093965092949392505050565b60006020828403121561168357600080fd5b5035919050565b6000806040838503121561169d57600080fd5b8235915060208301356116af816115a0565b809150509250929050565b60008060008060008060a087890312156116d357600080fd5b86356116de816115a0565b955060208701356116ee816115a0565b945060408701359350606087013567ffffffffffffffff81111561171157600080fd5b61171d89828a016115b5565b909450925050608087013567ffffffffffffffff81111561173d57600080fd5b87016060818a03121561174f57600080fd5b809150509295509295509295565b60006020828403121561176f57600080fd5b81356113ea816115a0565b60008060006060848603121561178f57600080fd5b833561179a816115a0565b925060208401356117aa816115a0565b929592945050506040919091013590565b600080600080600080608087890312156117d457600080fd5b863567ffffffffffffffff8111156117eb57600080fd5b6117f789828a016115b5565b909750955050602087013561180b816115a0565b935060408701359250606087013567ffffffffffffffff81111561182e57600080fd5b61183a89828a016115b5565b979a9699509497509295939492505050565b801515811461074857600080fd5b60006020828403121561186c57600080fd5b81356113ea8161184c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b03851660208201528360408201526080606082015260006118f8608083018486611877565b979650505050505050565b83815260406020820152600061191d604083018486611877565b95945050505050565b60008135611933816115a0565b6001600160a01b03168352602082810135908401526040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261197e57600080fd5b820160208101903567ffffffffffffffff81111561199b57600080fd5b8036038213156119aa57600080fd5b6060604086015261191d606086018284611877565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006119f760a083018587611877565b8281036080840152611a098185611926565b9998505050505050505050565b848152606060208201526000611a30606083018587611877565b82810360408401526118f88185611926565b600060208284031215611a5457600080fd5b5051919050565b818103818111156104d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611aa9606083018789611877565b8560208401528281036040840152611ac2818587611877565b98975050505050505050565b600060208284031215611ae057600080fd5b81516113ea8161184c565b6000825160005b81811015611b0c5760208186018101518583015201611af2565b50600092019182525091905056fea2646970667358221220a57d389b60850bdfffcd53692f80a9c416ca5b9b4d1b7d58052beba77fb7a96b64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a"; + "0x60a060405230608052348015601357600080fd5b5060805161298d61003d600039600081816119610152818161198a0152611b60015261298d6000f3fe6080604052600436106101c25760003560e01c806385f438c1116100f7578063c0c53b8b11610095578063d9caed1211610064578063d9caed12146105f6578063e609055e14610616578063e63ab1e914610636578063eab103df1461066a57600080fd5b8063c0c53b8b14610566578063c709ab6e14610586578063d547741f146105a6578063d936547e146105c657600080fd5b80639a590427116100d15780639a590427146104bb5780639b19251a146104db578063a217fddf146104fb578063ad3cb1cc1461051057600080fd5b806385f438c11461040257806391d1485414610436578063950837aa1461049b57600080fd5b80633f4ba83a11610164578063570618e11161013e578063570618e1146103625780635b112591146103965780635c975abb146103b65780638456cb59146103ed57600080fd5b80633f4ba83a146103255780634f1ef2861461033a57806352d1902d1461034d57600080fd5b8063248a9ca3116101a0578063248a9ca314610256578063252f07bf146102b35780632f2ff15d146102e557806336568abe1461030557600080fd5b806301ffc9a7146101c7578063116191b6146101fc57806321fc65f214610234575b600080fd5b3480156101d357600080fd5b506101e76101e23660046121a7565b61068a565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5060005461021c906001600160a01b031681565b6040516001600160a01b0390911681526020016101f3565b34801561024057600080fd5b5061025461024f366004612247565b610723565b005b34801561026257600080fd5b506102a56102713660046122ba565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101f3565b3480156102bf57600080fd5b506002546101e79074010000000000000000000000000000000000000000900460ff1681565b3480156102f157600080fd5b506102546103003660046122d3565b6108cc565b34801561031157600080fd5b506102546103203660046122d3565b610916565b34801561033157600080fd5b50610254610967565b610254610348366004612332565b61099c565b34801561035957600080fd5b506102a56109bb565b34801561036e57600080fd5b506102a57f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b3480156103a257600080fd5b5060025461021c906001600160a01b031681565b3480156103c257600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101e7565b3480156103f957600080fd5b506102546109ea565b34801561040e57600080fd5b506102a57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561044257600080fd5b506101e76104513660046122d3565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104a757600080fd5b506102546104b636600461243b565b610a1c565b3480156104c757600080fd5b506102546104d636600461243b565b610baf565b3480156104e757600080fd5b506102546104f636600461243b565b610c63565b34801561050757600080fd5b506102a5600081565b34801561051c57600080fd5b506105596040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f3919061247c565b34801561057257600080fd5b506102546105813660046124cd565b610d1d565b34801561059257600080fd5b506102546105a1366004612518565b611042565b3480156105b257600080fd5b506102546105c13660046122d3565b6111f0565b3480156105d257600080fd5b506101e76105e136600461243b565b60016020526000908152604090205460ff1681565b34801561060257600080fd5b506102546106113660046125bb565b611234565b34801561062257600080fd5b506102546106313660046125fc565b61134b565b34801561064257600080fd5b506102a57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561067657600080fd5b5061025461068536600461269b565b611596565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061071d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61072b6115ec565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107558161166d565b61075d611677565b6001600160a01b03851660009081526001602052604090205460ff166107af576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546107c9906001600160a01b038781169116866116d5565b6000546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690635131ab599061081a9088908a90899089908990600401612701565b600060405180830381600087803b15801561083457600080fd5b505af1158015610848573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161089393929190612744565b60405180910390a3506108c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546109068161166d565b610910838361176f565b50505050565b6001600160a01b0381163314610958576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610962828261183e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109918161166d565b6109996118e4565b50565b6109a4611956565b6109ad82611a26565b6109b78282611a31565b5050565b60006109c5611b55565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a148161166d565b610999611bb7565b6000610a278161166d565b6001600160a01b038216610a67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610a9e907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661183e565b50600254610ad6907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661183e565b50610b017f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361176f565b50610b2c7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a8361176f565b50600254604080516001600160a01b03928316815291841660208301527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610bd98161166d565b6001600160a01b038216610c19576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260016020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610c8d8161166d565b6001600160a01b038216610ccd576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000818152600160208190526040808320805460ff1916909217909155517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d685750825b905060008267ffffffffffffffff166001148015610d855750303b155b905081158015610d93575080155b15610dca576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e2b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0388161580610e4857506001600160a01b038716155b80610e5a57506001600160a01b038616155b15610e91576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e99611c12565b610ea1611c1a565b610ea9611c12565b610eb1611c2a565b600080546001600160a01b03808b167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617835560028054918b1691909216179055610eff908761176f565b50610f2a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761176f565b50610f557f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8861176f565b50610f807f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48861176f565b50610fab7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a8761176f565b50610fd67f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a8861176f565b5083156110385784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61104a6115ec565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46110748161166d565b61107c611677565b6001600160a01b03861660009081526001602052604090205460ff166110ce576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546110e8906001600160a01b038881169116876116d5565b6000546040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063d0b492c39061113b9089908b908a908a908a908a9060040161280f565b600060405180830381600087803b15801561115557600080fd5b505af1158015611169573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b878787876040516111b69493929190612866565b60405180910390a3506111e860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461122a8161166d565b610910838361183e565b61123c6115ec565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46112668161166d565b61126e611677565b6001600160a01b03831660009081526001602052604090205460ff166112c0576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112d46001600160a01b03841685846116d5565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb8460405161131991815260200190565b60405180910390a35061096260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6113536115ec565b61135b611677565b60025474010000000000000000000000000000000000000000900460ff166113af576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526001602052604090205460ff16611401576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114859190612892565b905061149c6001600160a01b038616333087611c3a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190612892565b61155191906128ab565b87876040516115649594939291906128e5565b60405180910390a2506111e860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60006115a18161166d565b506002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611667576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109998133611c73565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156116d3576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261096291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d00565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611834576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556117ea3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061071d565b600091505061071d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611834576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061071d565b6118ec611d7c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119ef57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119e37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156116d3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109b78161166d565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611aa9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611aa691810190612892565b60015b611aef576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611b4b576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611ae6565b6109628383611dd7565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116d3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bbf611677565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611938565b6116d3611e2d565b611c22611e2d565b6116d3611e94565b611c32611e2d565b6116d3611e9c565b6040516001600160a01b0384811660248301528381166044830152606482018390526109109186918216906323b872dd90608401611702565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166109b7576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611ae6565b6000611d156001600160a01b03841683611ecf565b90508051600014158015611d3a575080806020019051810190611d38919061291e565b155b15610962576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611ae6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166116d3576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611de082611ee4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611e25576109628282611f8c565b6109b7612002565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166116d3576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611749611e2d565b611ea4611e2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b6060611edd8383600061203a565b9392505050565b806001600160a01b03163b600003611f33576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611ae6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611fa9919061293b565b600060405180830381855af49150503d8060008114611fe4576040519150601f19603f3d011682016040523d82523d6000602084013e611fe9565b606091505b5091509150611ff98583836120f0565b95945050505050565b34156116d3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015612078576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611ae6565b600080856001600160a01b03168486604051612094919061293b565b60006040518083038185875af1925050503d80600081146120d1576040519150601f19603f3d011682016040523d82523d6000602084013e6120d6565b606091505b50915091506120e68683836120f0565b9695505050505050565b6060826121055761210082612165565b611edd565b815115801561211c57506001600160a01b0384163b155b1561215e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611ae6565b5080611edd565b8051156121755780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156121b957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611edd57600080fd5b6001600160a01b038116811461099957600080fd5b60008083601f84011261221057600080fd5b50813567ffffffffffffffff81111561222857600080fd5b60208301915083602082850101111561224057600080fd5b9250929050565b60008060008060006080868803121561225f57600080fd5b853561226a816121e9565b9450602086013561227a816121e9565b935060408601359250606086013567ffffffffffffffff81111561229d57600080fd5b6122a9888289016121fe565b969995985093965092949392505050565b6000602082840312156122cc57600080fd5b5035919050565b600080604083850312156122e657600080fd5b8235915060208301356122f8816121e9565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561234557600080fd5b8235612350816121e9565b9150602083013567ffffffffffffffff81111561236c57600080fd5b8301601f8101851361237d57600080fd5b803567ffffffffffffffff81111561239757612397612303565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561240357612403612303565b60405281815282820160200187101561241b57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561244d57600080fd5b8135611edd816121e9565b60005b8381101561247357818101518382015260200161245b565b50506000910152565b602081526000825180602084015261249b816040850160208701612458565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156124e257600080fd5b83356124ed816121e9565b925060208401356124fd816121e9565b9150604084013561250d816121e9565b809150509250925092565b60008060008060008060a0878903121561253157600080fd5b863561253c816121e9565b9550602087013561254c816121e9565b945060408701359350606087013567ffffffffffffffff81111561256f57600080fd5b61257b89828a016121fe565b909450925050608087013567ffffffffffffffff81111561259b57600080fd5b87016060818a0312156125ad57600080fd5b809150509295509295509295565b6000806000606084860312156125d057600080fd5b83356125db816121e9565b925060208401356125eb816121e9565b929592945050506040919091013590565b6000806000806000806080878903121561261557600080fd5b863567ffffffffffffffff81111561262c57600080fd5b61263889828a016121fe565b909750955050602087013561264c816121e9565b935060408701359250606087013567ffffffffffffffff81111561266f57600080fd5b61267b89828a016121fe565b979a9699509497509295939492505050565b801515811461099957600080fd5b6000602082840312156126ad57600080fd5b8135611edd8161268d565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b03851660208201528360408201526080606082015260006127396080830184866126b8565b979650505050505050565b838152604060208201526000611ff96040830184866126b8565b6000813561276b816121e9565b6001600160a01b03168352602082013567ffffffffffffffff811680821461279257600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126127ce57600080fd5b820160208101903567ffffffffffffffff8111156127eb57600080fd5b8036038213156127fa57600080fd5b60606040860152611ff96060860182846126b8565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061284760a0830185876126b8565b8281036080840152612859818561275e565b9998505050505050505050565b8481526060602082015260006128806060830185876126b8565b8281036040840152612739818561275e565b6000602082840312156128a457600080fd5b5051919050565b8181038181111561071d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006128f96060830187896126b8565b85602084015282810360408401526129128185876126b8565b98975050505050505050565b60006020828403121561293057600080fd5b8151611edd8161268d565b6000825161294d818460208701612458565b919091019291505056fea26469706673582212208a1c62b10561b18d4814449cf12a3b5e97feb8b461b02a4edc800173b625855b64736f6c634300081a0033"; type ERC20CustodyConstructorParams = | [signer?: Signer] @@ -865,30 +980,12 @@ export class ERC20Custody__factory extends ContractFactory { } override getDeployTransaction( - gateway_: AddressLike, - tssAddress_: AddressLike, - admin_: AddressLike, overrides?: NonPayableOverrides & { from?: string } ): Promise { - return super.getDeployTransaction( - gateway_, - tssAddress_, - admin_, - overrides || {} - ); + return super.getDeployTransaction(overrides || {}); } - override deploy( - gateway_: AddressLike, - tssAddress_: AddressLike, - admin_: AddressLike, - overrides?: NonPayableOverrides & { from?: string } - ) { - return super.deploy( - gateway_, - tssAddress_, - admin_, - overrides || {} - ) as Promise< + override deploy(overrides?: NonPayableOverrides & { from?: string }) { + return super.deploy(overrides || {}) as Promise< ERC20Custody & { deploymentTransaction(): ContractTransactionResponse; } diff --git a/v2/types/factories/GatewayEVMUpgradeTest__factory.ts b/v2/types/factories/GatewayEVMUpgradeTest__factory.ts index a1ad3e012..5a9276396 100644 --- a/v2/types/factories/GatewayEVMUpgradeTest__factory.ts +++ b/v2/types/factories/GatewayEVMUpgradeTest__factory.ts @@ -46,6 +46,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "MAX_PAYLOAD_SIZE", + inputs: [], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, { type: "function", name: "PAUSER_ROLE", @@ -408,8 +421,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -621,8 +634,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -718,6 +731,19 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, + { + type: "function", + name: "updateTSSAddress", + inputs: [ + { + name: "newTSSAddress", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, { type: "function", name: "upgradeToAndCall", @@ -1038,8 +1064,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -1143,6 +1169,12 @@ const _abi = [ type: "event", name: "UpdatedGatewayTSSAddress", inputs: [ + { + name: "oldTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, { name: "newTSSAddress", type: "address", @@ -1339,7 +1371,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516136d86100fd6000396000818161217a015281816121a3015261262f01526136d86000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ad3cb1cc11610095578063d547741f11610064578063d547741f14610621578063dda79b7514610641578063e63ab1e914610661578063ece697b31461069557600080fd5b8063ad3cb1cc14610578578063ae7a3a6f146105c1578063c0c53b8b146105e1578063d09e3b781461060157600080fd5b80638456cb59116100d15780638456cb59146104b557806391d14854146104ca578063a217fddf1461052f578063a783c7891461054457600080fd5b80635c975abb146104245780635d62c8601461045b578063726ac97c1461048f578063744b9b8b146104a257600080fd5b80632f2ff15d1161017a5780635131ab59116101495780635131ab59146103af57806352d1902d146103cf57806357bec62f146103e45780635b1125911461040457600080fd5b80632f2ff15d1461034757806336568abe146103675780633f4ba83a146103875780634f1ef2861461039c57600080fd5b80631becceb4116101b65780631becceb4146102725780631cff79cd1461029257806321e093b1146102b2578063248a9ca3146102ea57600080fd5b806301ffc9a7146101e857806310188aef1461021d578063102614b01461023f57806314fd2d481461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612d1f565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d7d565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612db0565b610842565b61023d61026d366004612e73565b610955565b34801561027e57600080fd5b5061023d61028d366004612ee6565b610b56565b6102a56102a0366004612f4d565b610bed565b604051610214919061300e565b3480156102be57600080fd5b506003546102d2906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102f657600080fd5b50610339610305366004613021565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b34801561035357600080fd5b5061023d61036236600461303a565b610cf0565b34801561037357600080fd5b5061023d61038236600461303a565b610d34565b34801561039357600080fd5b5061023d610d85565b61023d6103aa366004613095565b610dba565b3480156103bb57600080fd5b5061023d6103ca36600461319c565b610dd9565b3480156103db57600080fd5b506103396110f2565b3480156103f057600080fd5b506002546102d2906001600160a01b031681565b34801561041057600080fd5b506001546102d2906001600160a01b031681565b34801561043057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561046757600080fd5b506103397f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b61023d61049d36600461320b565b611121565b61023d6104b0366004612ee6565b6112b2565b3480156104c157600080fd5b5061023d611447565b3480156104d657600080fd5b506102086104e536600461303a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561053b57600080fd5b50610339600081565b34801561055057600080fd5b506103397f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561058457600080fd5b506102a56040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105cd57600080fd5b5061023d6105dc366004612d7d565b611479565b3480156105ed57600080fd5b5061023d6105fc366004613259565b61156d565b34801561060d57600080fd5b5061023d61061c36600461329c565b611822565b34801561062d57600080fd5b5061023d61063c36600461303a565b611933565b34801561064d57600080fd5b506000546102d2906001600160a01b031681565b34801561066d57600080fd5b506103397f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156106a157600080fd5b5061023d6106b0366004613334565b611977565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b39565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611c30565b610852611c8e565b8260000361088c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d7338385611d0f565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091e939291906134f7565b60405180910390a361094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61097f81611b39565b610987611c30565b61098f611c8e565b6001600160a01b0385166109cf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610a1c576040519150601f19603f3d011682016040523d82523d6000602084013e610a21565b606091505b5050905080610a5c576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa9b0a73c0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063a9b0a73c90610aa190869060040161356f565b600060405180830381600087803b158015610abb57600080fd5b505af1158015610acf573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167fbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c34888888604051610b1d9493929190613582565b60405180910390a350610b4f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610b5e611c30565b610b66611c8e565b6001600160a01b038416610ba6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091e939291906135b9565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c1981611b39565b610c21611c30565b610c29611c8e565b6001600160a01b038516610c69576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c76868686611f72565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546348787604051610cb5939291906135df565b60405180910390a29150610ce860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d2a81611b39565b61094f8383611b43565b6001600160a01b0381163314610d76576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d80828261201b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610daf81611b39565b610db76120df565b50565b610dc261216f565b610dcb8261223f565b610dd5828261224a565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e0381611b39565b610e0b611c30565b610e13611c8e565b83600003610e4d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610e8d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e97868661236e565b610ecd576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5991906135f9565b610f8f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f9a858484611f72565b50610fa5868661236e565b610fdb576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa15801561103b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105f9190613616565b905080156110715761107187826123fe565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516110b8939291906135df565b60405180910390a3506110ea60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006110fc612624565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b611129611c30565b611131611c8e565b3460000361116b576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166111ab576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146111f8576040519150601f19603f3d011682016040523d82523d6000602084013e6111fd565b606091505b5050905080611238576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600086604051611280939291906134f7565b60405180910390a350610dd560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6112ba611c30565b6112c2611c8e565b346000036112fc576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661133c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611389576040519150601f19603f3d011682016040523d82523d6000602084013e61138e565b606091505b50509050806113c9576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600088888860405161141595949392919061362f565b60405180910390a35061094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61147181611b39565b610db7612686565b600061148481611b39565b6001600160a01b0382166114c4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611507576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115317f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115b85750825b905060008267ffffffffffffffff1660011480156115d55750303b155b9050811580156115e3575080155b1561161a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561167b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061169857506001600160a01b038716155b156116cf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116d76126ff565b6116df612707565b6116e76126ff565b6116ef612717565b6116fa600087611b43565b506117257f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b43565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556117837f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b43565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118185784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61182a611c30565b611832611c8e565b8460000361186c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166118ac576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118b7338587611d0f565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c878787878760405161190295949392919061362f565b60405180910390a36110ea60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461196d81611b39565b61094f838361201b565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96119a181611b39565b6119a9611c30565b6119b1611c8e565b846000036119eb576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611a2b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a3f6001600160a01b0388168787612727565b6040517fa9b0a73c0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063a9b0a73c90611a8490859060040161356f565b600060405180830381600087803b158015611a9e57600080fd5b505af1158015611ab2573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167fbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c87878787604051611aff9493929190613582565b60405180910390a3611b3060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610db7813361279b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c26576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bdc3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c8c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e7357611d3a6001600160a01b038316843084612828565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca91906135f9565b611e00576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e5f57600080fd5b505af1158015611b30573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efa91906135f9565b611f30576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610d80906001600160a01b038481169186911684612828565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611f92929190613676565b60006040518083038185875af1925050503d8060008114611fcf576040519150601f19603f3d011682016040523d82523d6000602084013e611fd4565b606091505b509150915081612010576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c26576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b6120e7612861565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061220857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121fc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dd581611b39565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122c2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526122bf91810190613616565b60015b612308576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612364576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016122ff565b610d8083836128bc565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156123da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201491906135f9565b6003546001600160a01b039081169083160361254d576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a491906135f9565b6124da576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561253957600080fd5b505af11580156110ea573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d491906135f9565b61260a576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610dd5906001600160a01b03848116911683612727565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61268e611c30565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612151565b611c8c612912565b61270f612912565b611c8c612979565b61271f612912565b611c8c612981565b6040516001600160a01b03838116602483015260448201839052610d8091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129d2565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610dd5576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016122ff565b6040516001600160a01b03848116602483015283811660448301526064820183905261094f9186918216906323b872dd90608401612754565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c8c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c582612a4e565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561290a57610d808282612af6565b610dd5612b6c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c8c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4c612912565b612989612912565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60006129e76001600160a01b03841683612ba4565b90508051600014158015612a0c575080806020019051810190612a0a91906135f9565b155b15610d80576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016122ff565b806001600160a01b03163b600003612a9d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016122ff565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b139190613686565b600060405180830381855af49150503d8060008114612b4e576040519150601f19603f3d011682016040523d82523d6000602084013e612b53565b606091505b5091509150612b63858383612bb2565b95945050505050565b3415611c8c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061201483836000612c27565b606082612bc757612bc282612cdd565b612014565b8151158015612bde57506001600160a01b0384163b155b15612c20576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016122ff565b5080612014565b606081471015612c65576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016122ff565b600080856001600160a01b03168486604051612c819190613686565b60006040518083038185875af1925050503d8060008114612cbe576040519150601f19603f3d011682016040523d82523d6000602084013e612cc3565b606091505b5091509150612cd3868383612bb2565b9695505050505050565b805115612ced5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d3157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461201457600080fd5b80356001600160a01b0381168114612d7857600080fd5b919050565b600060208284031215612d8f57600080fd5b61201482612d61565b600060a08284031215612daa57600080fd5b50919050565b60008060008060808587031215612dc657600080fd5b612dcf85612d61565b935060208501359250612de460408601612d61565b9150606085013567ffffffffffffffff811115612e0057600080fd5b612e0c87828801612d98565b91505092959194509250565b60008083601f840112612e2a57600080fd5b50813567ffffffffffffffff811115612e4257600080fd5b602083019150836020828501011115612e5a57600080fd5b9250929050565b600060608284031215612daa57600080fd5b60008060008060608587031215612e8957600080fd5b612e9285612d61565b9350602085013567ffffffffffffffff811115612eae57600080fd5b612eba87828801612e18565b909450925050604085013567ffffffffffffffff811115612eda57600080fd5b612e0c87828801612e61565b60008060008060608587031215612efc57600080fd5b612f0585612d61565b9350602085013567ffffffffffffffff811115612f2157600080fd5b612f2d87828801612e18565b909450925050604085013567ffffffffffffffff811115612e0057600080fd5b600080600060408486031215612f6257600080fd5b612f6b84612d61565b9250602084013567ffffffffffffffff811115612f8757600080fd5b612f9386828701612e18565b9497909650939450505050565b60005b83811015612fbb578181015183820152602001612fa3565b50506000910152565b60008151808452612fdc816020860160208601612fa0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006120146020830184612fc4565b60006020828403121561303357600080fd5b5035919050565b6000806040838503121561304d57600080fd5b8235915061305d60208401612d61565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156130a857600080fd5b6130b183612d61565b9150602083013567ffffffffffffffff8111156130cd57600080fd5b8301601f810185136130de57600080fd5b803567ffffffffffffffff8111156130f8576130f8613066565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561316457613164613066565b60405281815282820160200187101561317c57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806000806000608086880312156131b457600080fd5b6131bd86612d61565b94506131cb60208701612d61565b935060408601359250606086013567ffffffffffffffff8111156131ee57600080fd5b6131fa88828901612e18565b969995985093965092949392505050565b6000806040838503121561321e57600080fd5b61322783612d61565b9150602083013567ffffffffffffffff81111561324357600080fd5b61324f85828601612d98565b9150509250929050565b60008060006060848603121561326e57600080fd5b61327784612d61565b925061328560208501612d61565b915061329360408501612d61565b90509250925092565b60008060008060008060a087890312156132b557600080fd5b6132be87612d61565b9550602087013594506132d360408801612d61565b9350606087013567ffffffffffffffff8111156132ef57600080fd5b6132fb89828a01612e18565b909450925050608087013567ffffffffffffffff81111561331b57600080fd5b61332789828a01612d98565b9150509295509295509295565b60008060008060008060a0878903121561334d57600080fd5b61335687612d61565b955061336460208801612d61565b945060408701359350606087013567ffffffffffffffff81111561338757600080fd5b61339389828a01612e18565b909450925050608087013567ffffffffffffffff8111156133b357600080fd5b61332789828a01612e61565b8015158114610db757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261340257600080fd5b830160208101925035905067ffffffffffffffff81111561342257600080fd5b803603821315612e5a57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361348b82612d61565b1682526000602082013561349e816133bf565b151560208401526001600160a01b036134b960408401612d61565b1660408401526134cc60608301836133cd565b60a060608601526134e160a086018284613431565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612b6360a083018461347a565b6001600160a01b0361353e82612d61565b16825260208181013590830152600061355a60408301836133cd565b60606040860152612b63606086018284613431565b602081526000612014602083018461352d565b84815260606020820152600061359c606083018587613431565b82810360408401526135ae818561352d565b979650505050505050565b6040815260006135cd604083018587613431565b8281036020840152612cd3818561347a565b838152604060208201526000612b63604083018486613431565b60006020828403121561360b57600080fd5b8151612014816133bf565b60006020828403121561362857600080fd5b5051919050565b8581526001600160a01b0385166020820152608060408201526000613658608083018587613431565b828103606084015261366a818561347a565b98975050505050505050565b8183823760009101908152919050565b60008251613698818460208701612fa0565b919091019291505056fea264697066735822122076e0082ca3fb5364fa6ea74c9233b28ed9e58510c3b43084ad842c4b820b2afc64736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516139966100fd600039600081816122fc0152818161232501526127b101526139966000f3fe6080604052600436106102195760003560e01c8063726ac97c1161011d578063ad3cb1cc116100b0578063d0b492c31161007f578063dda79b7511610064578063dda79b75146106ba578063e63ab1e9146106da578063f7ad60db1461070e57600080fd5b8063d0b492c31461067a578063d547741f1461069a57600080fd5b8063ad3cb1cc146105d1578063ae7a3a6f1461061a578063c0c53b8b1461063a578063d09e3b781461065a57600080fd5b8063950837aa116100ec578063950837aa14610552578063a217fddf14610572578063a2ba193414610587578063a783c7891461059d57600080fd5b8063726ac97c146104b2578063744b9b8b146104c55780638456cb59146104d857806391d14854146104ed57600080fd5b806336568abe116101b057806352d1902d1161017f5780635b112591116101645780635b112591146104275780635c975abb146104475780635d62c8601461047e57600080fd5b806352d1902d146103f257806357bec62f1461040757600080fd5b806336568abe1461038a5780633f4ba83a146103aa5780634f1ef286146103bf5780635131ab59146103d257600080fd5b80631cff79cd116101ec5780631cff79cd146102b557806321e093b1146102d5578063248a9ca31461030d5780632f2ff15d1461036a57600080fd5b806301ffc9a71461021e57806310188aef14610253578063102614b0146102755780631becceb414610295575b600080fd5b34801561022a57600080fd5b5061023e610239366004612f26565b610721565b60405190151581526020015b60405180910390f35b34801561025f57600080fd5b5061027361026e366004612f84565b6107ba565b005b34801561028157600080fd5b50610273610290366004612fb7565b610895565b3480156102a157600080fd5b506102736102b0366004613068565b61098f565b6102c86102c33660046130cf565b610a5f565b60405161024a9190613190565b3480156102e157600080fd5b506003546102f5906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b34801561031957600080fd5b5061035c6103283660046131a3565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161024a565b34801561037657600080fd5b506102736103853660046131bc565b610b49565b34801561039657600080fd5b506102736103a53660046131bc565b610b8d565b3480156103b657600080fd5b50610273610bde565b6102736103cd366004613217565b610c13565b3480156103de57600080fd5b506102736103ed36600461331e565b610c32565b3480156103fe57600080fd5b5061035c610f32565b34801561041357600080fd5b506002546102f5906001600160a01b031681565b34801561043357600080fd5b506001546102f5906001600160a01b031681565b34801561045357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661023e565b34801561048a57600080fd5b5061035c7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102736104c036600461338d565b610f61565b6102736104d3366004613068565b6110d9565b3480156104e457600080fd5b506102736112a7565b3480156104f957600080fd5b5061023e6105083660046131bc565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055e57600080fd5b5061027361056d366004612f84565b6112d9565b34801561057e57600080fd5b5061035c600081565b34801561059357600080fd5b5061035c61040081565b3480156105a957600080fd5b5061035c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105dd57600080fd5b506102c86040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561062657600080fd5b50610273610635366004612f84565b6113f0565b34801561064657600080fd5b506102736106553660046133db565b6114cb565b34801561066657600080fd5b5061027361067536600461341e565b611792565b34801561068657600080fd5b506102736106953660046134c8565b6118dc565b3480156106a657600080fd5b506102736106b53660046131bc565b611a85565b3480156106c657600080fd5b506000546102f5906001600160a01b031681565b3480156106e657600080fd5b5061035c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61027361071c366004613553565b611ac9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107b457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006107c581611cb1565b6001600160a01b0382166107ec5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b03161561082f576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108597f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611cbb565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61089d611da8565b6108a5611e06565b826000036108df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109065760405163d92e233d60e01b815260040160405180910390fd5b610911338385611e87565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c858585604051610958939291906136fe565b60405180910390a361098960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b610997611da8565b61099f611e06565b6001600160a01b0384166109c65760405163d92e233d60e01b815260040160405180910390fd5b6104006109d66060830183613734565b6109e1915084613799565b10610a18576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d974858585604051610958939291906137d3565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a8b81611cb1565b610a93611da8565b610a9b611e06565b6001600160a01b038516610ac25760405163d92e233d60e01b815260040160405180910390fd5b6000610acf8686866120ea565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546348787604051610b0e939291906137f9565b60405180910390a29150610b4160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b8381611cb1565b6109898383611cbb565b6001600160a01b0381163314610bcf576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bd9828261219d565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c0881611cb1565b610c10612261565b50565b610c1b6122f1565b610c24826123c1565b610c2e82826123cc565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610c5c81611cb1565b610c64611da8565b610c6c611e06565b83600003610ca6576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610ccd5760405163d92e233d60e01b815260040160405180910390fd5b610cd786866124f0565b610d0d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610d75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d999190613813565b610dcf576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dda8584846120ea565b50610de586866124f0565b610e1b576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9f9190613830565b90508015610eb157610eb18782612580565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610ef8939291906137f9565b60405180910390a350610f2a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000610f3c6127a6565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f69611da8565b610f71611e06565b34600003610fab576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610fd25760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d806000811461101f576040519150601f19603f3d011682016040523d82523d6000602084013e611024565b606091505b505090508061105f576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000866040516110a7939291906136fe565b60405180910390a350610c2e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6110e1611da8565b6110e9611e06565b34600003611123576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661114a5760405163d92e233d60e01b815260040160405180910390fd5b61040061115a6060830183613734565b611165915084613799565b1061119c576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146111e9576040519150601f19603f3d011682016040523d82523d6000602084013e6111ee565b606091505b5050905080611229576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000888888604051611275959493929190613849565b60405180910390a35061098960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112d181611cb1565b610c10612808565b60006112e481611cb1565b6001600160a01b03821661130b5760405163d92e233d60e01b815260040160405180910390fd5b600154611342907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b031661219d565b5061136d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611cbb565b50600154604080516001600160a01b03928316815291841660208301527f3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579910160405180910390a150600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60006113fb81611cb1565b6001600160a01b0382166114225760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611465576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61148f7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611cbb565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115165750825b905060008267ffffffffffffffff1660011480156115335750303b155b905081158015611541575080155b15611578576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156115d95784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806115f657506001600160a01b038716155b156116145760405163d92e233d60e01b815260040160405180910390fd5b61161c612881565b611624612889565b61162c612881565b611634612899565b61163f600087611cbb565b5061166a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611cbb565b506116957f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a89611cbb565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556116f37f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611cbb565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156117885784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61179a611da8565b6117a2611e06565b846000036117dc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166118035760405163d92e233d60e01b815260040160405180910390fd5b6104006118136060830183613734565b61181e915084613799565b10611855576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611860338587611e87565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c87878787876040516118ab959493929190613849565b60405180910390a3610f2a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961190681611cb1565b61190e611da8565b611916611e06565b84600003611950576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166119775760405163d92e233d60e01b815260040160405180910390fd5b61198b6001600160a01b03881687876128a9565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de0906119d09085906004016138ea565b600060405180830381600087803b1580156119ea57600080fd5b505af11580156119fe573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143687878787604051611a4b94939291906138fd565b60405180910390a3611a7c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611abf81611cb1565b610989838361219d565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb611af381611cb1565b611afb611da8565b611b03611e06565b6001600160a01b038516611b2a5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114611b77576040519150601f19603f3d011682016040523d82523d6000602084013e611b7c565b606091505b5050905080611bb7576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611bfc9086906004016138ea565b600060405180830381600087803b158015611c1657600080fd5b505af1158015611c2a573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611c7894939291906138fd565b60405180910390a350611caa60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610c10813361291d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611d9e576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d543390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107b4565b60009150506107b4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e04576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611e81576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611feb57611eb26001600160a01b0383168430846129aa565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f429190613813565b611f78576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611fd757600080fd5b505af1158015611a7c573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561204e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120729190613813565b6120a8576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610bd9906001600160a01b0384811691869116846129aa565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606120f683836129e3565b600080856001600160a01b0316348686604051612114929190613934565b60006040518083038185875af1925050503d8060008114612151576040519150601f19603f3d011682016040523d82523d6000602084013e612156565b606091505b509150915081612192576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611d9e576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107b4565b612269612a68565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061238a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661237e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e04576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c2e81611cb1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612444575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261244191810190613830565b60015b61248a576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146124e6576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612481565b610bd98383612ac3565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af115801561255c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121969190613813565b6003546001600160a01b03908116908316036126cf576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126269190613813565b61265c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156126bb57600080fd5b505af1158015610f2a573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127569190613813565b61278c576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610c2e906001600160a01b038481169116836128a9565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e04576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612810611da8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336122d3565b611e04612b19565b612891612b19565b611e04612b80565b6128a1612b19565b611e04612b88565b6040516001600160a01b03838116602483015260448201839052610bd991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612bd9565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610c2e576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612481565b6040516001600160a01b0384811660248301528381166044830152606482018390526109899186918216906323b872dd906084016128d6565b60048110610c2e5781357f99f46220000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610bd9576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e04576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612acc82612c55565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b1157610bd98282612cfd565b610c2e612d73565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e04576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c4612b19565b612b90612b19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000612bee6001600160a01b03841683612dab565b90508051600014158015612c13575080806020019051810190612c119190613813565b155b15610bd9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612481565b806001600160a01b03163b600003612ca4576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612481565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d1a9190613944565b600060405180830381855af49150503d8060008114612d55576040519150601f19603f3d011682016040523d82523d6000602084013e612d5a565b606091505b5091509150612d6a858383612db9565b95945050505050565b3415611e04576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061219683836000612e2e565b606082612dce57612dc982612ee4565b612196565b8151158015612de557506001600160a01b0384163b155b15612e27576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612481565b5080612196565b606081471015612e6c576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612481565b600080856001600160a01b03168486604051612e889190613944565b60006040518083038185875af1925050503d8060008114612ec5576040519150601f19603f3d011682016040523d82523d6000602084013e612eca565b606091505b5091509150612eda868383612db9565b9695505050505050565b805115612ef45780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612f3857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461219657600080fd5b80356001600160a01b0381168114612f7f57600080fd5b919050565b600060208284031215612f9657600080fd5b61219682612f68565b600060a08284031215612fb157600080fd5b50919050565b60008060008060808587031215612fcd57600080fd5b612fd685612f68565b935060208501359250612feb60408601612f68565b9150606085013567ffffffffffffffff81111561300757600080fd5b61301387828801612f9f565b91505092959194509250565b60008083601f84011261303157600080fd5b50813567ffffffffffffffff81111561304957600080fd5b60208301915083602082850101111561306157600080fd5b9250929050565b6000806000806060858703121561307e57600080fd5b61308785612f68565b9350602085013567ffffffffffffffff8111156130a357600080fd5b6130af8782880161301f565b909450925050604085013567ffffffffffffffff81111561300757600080fd5b6000806000604084860312156130e457600080fd5b6130ed84612f68565b9250602084013567ffffffffffffffff81111561310957600080fd5b6131158682870161301f565b9497909650939450505050565b60005b8381101561313d578181015183820152602001613125565b50506000910152565b6000815180845261315e816020860160208601613122565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006121966020830184613146565b6000602082840312156131b557600080fd5b5035919050565b600080604083850312156131cf57600080fd5b823591506131df60208401612f68565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561322a57600080fd5b61323383612f68565b9150602083013567ffffffffffffffff81111561324f57600080fd5b8301601f8101851361326057600080fd5b803567ffffffffffffffff81111561327a5761327a6131e8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156132e6576132e66131e8565b6040528181528282016020018710156132fe57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561333657600080fd5b61333f86612f68565b945061334d60208701612f68565b935060408601359250606086013567ffffffffffffffff81111561337057600080fd5b61337c8882890161301f565b969995985093965092949392505050565b600080604083850312156133a057600080fd5b6133a983612f68565b9150602083013567ffffffffffffffff8111156133c557600080fd5b6133d185828601612f9f565b9150509250929050565b6000806000606084860312156133f057600080fd5b6133f984612f68565b925061340760208501612f68565b915061341560408501612f68565b90509250925092565b60008060008060008060a0878903121561343757600080fd5b61344087612f68565b95506020870135945061345560408801612f68565b9350606087013567ffffffffffffffff81111561347157600080fd5b61347d89828a0161301f565b909450925050608087013567ffffffffffffffff81111561349d57600080fd5b6134a989828a01612f9f565b9150509295509295509295565b600060608284031215612fb157600080fd5b60008060008060008060a087890312156134e157600080fd5b6134ea87612f68565b95506134f860208801612f68565b945060408701359350606087013567ffffffffffffffff81111561351b57600080fd5b61352789828a0161301f565b909450925050608087013567ffffffffffffffff81111561354757600080fd5b6134a989828a016134b6565b6000806000806060858703121561356957600080fd5b61357285612f68565b9350602085013567ffffffffffffffff81111561358e57600080fd5b61359a8782880161301f565b909450925050604085013567ffffffffffffffff8111156135ba57600080fd5b613013878288016134b6565b8015158114610c1057600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261360957600080fd5b830160208101925035905067ffffffffffffffff81111561362957600080fd5b80360382131561306157600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361369282612f68565b168252600060208201356136a5816135c6565b151560208401526001600160a01b036136c060408401612f68565b1660408401526136d360608301836135d4565b60a060608601526136e860a086018284613638565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612d6a60a0830184613681565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261376957600080fd5b83018035915067ffffffffffffffff82111561378457600080fd5b60200191503681900382131561306157600080fd5b808201808211156107b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6040815260006137e7604083018587613638565b8281036020840152612eda8185613681565b838152604060208201526000612d6a604083018486613638565b60006020828403121561382557600080fd5b8151612196816135c6565b60006020828403121561384257600080fd5b5051919050565b8581526001600160a01b0385166020820152608060408201526000613872608083018587613638565b82810360608401526138848185613681565b98975050505050505050565b6001600160a01b036138a182612f68565b1682526000602082013567ffffffffffffffff81168082146138c257600080fd5b6020850152506138d560408301836135d4565b60606040860152612d6a606086018284613638565b6020815260006121966020830184613890565b848152606060208201526000613917606083018587613638565b82810360408401526139298185613890565b979650505050505050565b8183823760009101908152919050565b60008251613956818460208701613122565b919091019291505056fea26469706673582212206e742690b5819b708d9604a1cb17b6c2fbaedbc51537d18a5ccc3e3287d52b4664736f6c634300081a0033"; type GatewayEVMUpgradeTestConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/GatewayEVM__factory.ts b/v2/types/factories/GatewayEVM__factory.ts index 6c1208a97..8ab821a80 100644 --- a/v2/types/factories/GatewayEVM__factory.ts +++ b/v2/types/factories/GatewayEVM__factory.ts @@ -418,8 +418,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -631,8 +631,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -1036,8 +1036,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -1141,6 +1141,12 @@ const _abi = [ type: "event", name: "UpdatedGatewayTSSAddress", inputs: [ + { + name: "oldTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, { name: "newTSSAddress", type: "address", @@ -1211,6 +1217,11 @@ const _abi = [ name: "ApprovalFailed", inputs: [], }, + { + type: "error", + name: "CallOnRevertNotSupported", + inputs: [], + }, { type: "error", name: "ConnectorInitialized", @@ -1329,6 +1340,11 @@ const _abi = [ }, ], }, + { + type: "error", + name: "ZETANotSupported", + inputs: [], + }, { type: "error", name: "ZeroAddress", @@ -1337,7 +1353,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161393e6100fd600039600081816122bc015281816122e50152612771015261393e6000f3fe6080604052600436106102195760003560e01c80635d62c8601161011d578063a783c789116100b0578063d09e3b781161007f578063dda79b7511610064578063dda79b75146106ad578063e63ab1e9146106cd578063ece697b31461070157600080fd5b8063d09e3b781461066d578063d547741f1461068d57600080fd5b8063a783c789146105b0578063ad3cb1cc146105e4578063ae7a3a6f1461062d578063c0c53b8b1461064d57600080fd5b806391d14854116100ec57806391d1485414610500578063950837aa14610565578063a217fddf14610585578063a2ba19341461059a57600080fd5b80635d62c86014610491578063726ac97c146104c5578063744b9b8b146104d85780638456cb59146104eb57600080fd5b80632f2ff15d116101b05780635131ab591161017f57806357bec62f1161016457806357bec62f1461041a5780635b1125911461043a5780635c975abb1461045a57600080fd5b80635131ab59146103e557806352d1902d1461040557600080fd5b80632f2ff15d1461037d57806336568abe1461039d5780633f4ba83a146103bd5780634f1ef286146103d257600080fd5b80631becceb4116101ec5780631becceb4146102a85780631cff79cd146102c857806321e093b1146102e8578063248a9ca31461032057600080fd5b806301ffc9a71461021e57806310188aef14610253578063102614b01461027557806314fd2d4814610295575b600080fd5b34801561022a57600080fd5b5061023e610239366004612ee6565b610721565b60405190151581526020015b60405180910390f35b34801561025f57600080fd5b5061027361026e366004612f44565b6107ba565b005b34801561028157600080fd5b50610273610290366004612f77565b610895565b6102736102a336600461303a565b61098f565b3480156102b457600080fd5b506102736102c33660046130ad565b610b77565b6102db6102d6366004613114565b610c47565b60405161024a91906131d5565b3480156102f457600080fd5b50600354610308906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b34801561032c57600080fd5b5061036f61033b3660046131e8565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161024a565b34801561038957600080fd5b50610273610398366004613201565b610d31565b3480156103a957600080fd5b506102736103b8366004613201565b610d75565b3480156103c957600080fd5b50610273610dc6565b6102736103e036600461325c565b610dfb565b3480156103f157600080fd5b50610273610400366004613363565b610e1a565b34801561041157600080fd5b5061036f61111a565b34801561042657600080fd5b50600254610308906001600160a01b031681565b34801561044657600080fd5b50600154610308906001600160a01b031681565b34801561046657600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661023e565b34801561049d57600080fd5b5061036f7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102736104d33660046133d2565b611149565b6102736104e63660046130ad565b6112c1565b3480156104f757600080fd5b5061027361148f565b34801561050c57600080fd5b5061023e61051b366004613201565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561057157600080fd5b50610273610580366004612f44565b6114c1565b34801561059157600080fd5b5061036f600081565b3480156105a657600080fd5b5061036f61040081565b3480156105bc57600080fd5b5061036f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105f057600080fd5b506102db6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561063957600080fd5b50610273610648366004612f44565b6115c3565b34801561065957600080fd5b50610273610668366004613420565b61169e565b34801561067957600080fd5b50610273610688366004613463565b61193a565b34801561069957600080fd5b506102736106a8366004613201565b611a84565b3480156106b957600080fd5b50600054610308906001600160a01b031681565b3480156106d957600080fd5b5061036f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561070d57600080fd5b5061027361071c3660046134fb565b611ac8565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107b457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006107c581611c71565b6001600160a01b0382166107ec5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b03161561082f576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108597f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611c7b565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61089d611d68565b6108a5611dc6565b826000036108df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109065760405163d92e233d60e01b815260040160405180910390fd5b610911338385611e47565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c858585604051610958939291906136be565b60405180910390a361098960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109b981611c71565b6109c1611d68565b6109c9611dc6565b6001600160a01b0385166109f05760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610a3d576040519150601f19603f3d011682016040523d82523d6000602084013e610a42565b606091505b5050905080610a7d576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa9b0a73c0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063a9b0a73c90610ac2908690600401613736565b600060405180830381600087803b158015610adc57600080fd5b505af1158015610af0573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167fbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c34888888604051610b3e9493929190613749565b60405180910390a350610b7060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610b7f611d68565b610b87611dc6565b6001600160a01b038416610bae5760405163d92e233d60e01b815260040160405180910390fd5b610400610bbe6060830183613780565b610bc99150846137e5565b10610c00576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d9748585856040516109589392919061381f565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c7381611c71565b610c7b611d68565b610c83611dc6565b6001600160a01b038516610caa5760405163d92e233d60e01b815260040160405180910390fd5b6000610cb78686866120aa565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610cf693929190613845565b60405180910390a29150610d2960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d6b81611c71565b6109898383611c7b565b6001600160a01b0381163314610db7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dc1828261215d565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610df081611c71565b610df8612221565b50565b610e036122b1565b610e0c82612381565b610e16828261238c565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e4481611c71565b610e4c611d68565b610e54611dc6565b83600003610e8e576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610eb55760405163d92e233d60e01b815260040160405180910390fd5b610ebf86866124b0565b610ef5576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f81919061385f565b610fb7576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc28584846120aa565b50610fcd86866124b0565b611003576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015611063573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611087919061387c565b90508015611099576110998782612540565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516110e093929190613845565b60405180910390a35061111260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000611124612766565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b611151611d68565b611159611dc6565b34600003611193576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166111ba5760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611207576040519150601f19603f3d011682016040523d82523d6000602084013e61120c565b606091505b5050905080611247576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008660405161128f939291906136be565b60405180910390a350610e1660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6112c9611d68565b6112d1611dc6565b3460000361130b576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166113325760405163d92e233d60e01b815260040160405180910390fd5b6104006113426060830183613780565b61134d9150846137e5565b10611384576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146113d1576040519150601f19603f3d011682016040523d82523d6000602084013e6113d6565b606091505b5050905080611411576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600088888860405161145d959493929190613895565b60405180910390a35061098960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6114b981611c71565b610df86127c8565b60006114cc81611c71565b6001600160a01b0382166114f35760405163d92e233d60e01b815260040160405180910390fd5b60015461152a907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b031661215d565b506115557f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611c7b565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527f7598d084f3a8d9a71847119f6fdb694046bc0aaab0dee775c33c1df9be089a059060200160405180910390a15050565b60006115ce81611c71565b6001600160a01b0382166115f55760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611638576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116627f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611c7b565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116e95750825b905060008267ffffffffffffffff1660011480156117065750303b155b905081158015611714575080155b1561174b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156117ac5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806117c957506001600160a01b038716155b156117e75760405163d92e233d60e01b815260040160405180910390fd5b6117ef612841565b6117f7612849565b6117ff612841565b611807612859565b611812600087611c7b565b5061183d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611c7b565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561189b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611c7b565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156119305784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611942611d68565b61194a611dc6565b84600003611984576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166119ab5760405163d92e233d60e01b815260040160405180910390fd5b6104006119bb6060830183613780565b6119c69150846137e5565b106119fd576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a08338587611e47565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611a53959493929190613895565b60405180910390a361111260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611abe81611c71565b610989838361215d565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9611af281611c71565b611afa611d68565b611b02611dc6565b84600003611b3c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611b635760405163d92e233d60e01b815260040160405180910390fd5b611b776001600160a01b0388168787612869565b6040517fa9b0a73c0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063a9b0a73c90611bbc908590600401613736565b600060405180830381600087803b158015611bd657600080fd5b505af1158015611bea573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167fbe86105e00a37d2c98cbeef14dfc05db548ded5316da916a011fdf24c79fec2c87878787604051611c379493929190613749565b60405180910390a3611c6860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610df881336128dd565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611d5e576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d143390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107b4565b60009150506107b4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611dc4576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611e41576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611fab57611e726001600160a01b03831684308461296a565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f02919061385f565b611f38576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611f9757600080fd5b505af1158015611c68573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561200e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612032919061385f565b612068576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610dc1906001600160a01b03848116918691168461296a565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606120b683836129a3565b600080856001600160a01b03163486866040516120d49291906138dc565b60006040518083038185875af1925050503d8060008114612111576040519150601f19603f3d011682016040523d82523d6000602084013e612116565b606091505b509150915081612152576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611d5e576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107b4565b612229612a28565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061234a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661233e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611dc4576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e1681611c71565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612404575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124019181019061387c565b60015b61244a576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146124a6576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612441565b610dc18383612a83565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af115801561251c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612156919061385f565b6003546001600160a01b039081169083160361268f576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156125c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e6919061385f565b61261c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561267b57600080fd5b505af1158015611112573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156126f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612716919061385f565b61274c576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610e16906001600160a01b03848116911683612869565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611dc4576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127d0611d68565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612293565b611dc4612ad9565b612851612ad9565b611dc4612b40565b612861612ad9565b611dc4612b48565b6040516001600160a01b03838116602483015260448201839052610dc191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b99565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e16576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612441565b6040516001600160a01b0384811660248301528381166044830152606482018390526109899186918216906323b872dd90608401612896565b60048110610e165781357f564f58c4000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610dc1576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611dc4576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a8c82612c15565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612ad157610dc18282612cbd565b610e16612d33565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611dc4576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612084612ad9565b612b50612ad9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000612bae6001600160a01b03841683612d6b565b90508051600014158015612bd3575080806020019051810190612bd1919061385f565b155b15610dc1576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612441565b806001600160a01b03163b600003612c64576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612441565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612cda91906138ec565b600060405180830381855af49150503d8060008114612d15576040519150601f19603f3d011682016040523d82523d6000602084013e612d1a565b606091505b5091509150612d2a858383612d79565b95945050505050565b3415611dc4576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061215683836000612dee565b606082612d8e57612d8982612ea4565b612156565b8151158015612da557506001600160a01b0384163b155b15612de7576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612441565b5080612156565b606081471015612e2c576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612441565b600080856001600160a01b03168486604051612e4891906138ec565b60006040518083038185875af1925050503d8060008114612e85576040519150601f19603f3d011682016040523d82523d6000602084013e612e8a565b606091505b5091509150612e9a868383612d79565b9695505050505050565b805115612eb45780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612ef857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461215657600080fd5b80356001600160a01b0381168114612f3f57600080fd5b919050565b600060208284031215612f5657600080fd5b61215682612f28565b600060a08284031215612f7157600080fd5b50919050565b60008060008060808587031215612f8d57600080fd5b612f9685612f28565b935060208501359250612fab60408601612f28565b9150606085013567ffffffffffffffff811115612fc757600080fd5b612fd387828801612f5f565b91505092959194509250565b60008083601f840112612ff157600080fd5b50813567ffffffffffffffff81111561300957600080fd5b60208301915083602082850101111561302157600080fd5b9250929050565b600060608284031215612f7157600080fd5b6000806000806060858703121561305057600080fd5b61305985612f28565b9350602085013567ffffffffffffffff81111561307557600080fd5b61308187828801612fdf565b909450925050604085013567ffffffffffffffff8111156130a157600080fd5b612fd387828801613028565b600080600080606085870312156130c357600080fd5b6130cc85612f28565b9350602085013567ffffffffffffffff8111156130e857600080fd5b6130f487828801612fdf565b909450925050604085013567ffffffffffffffff811115612fc757600080fd5b60008060006040848603121561312957600080fd5b61313284612f28565b9250602084013567ffffffffffffffff81111561314e57600080fd5b61315a86828701612fdf565b9497909650939450505050565b60005b8381101561318257818101518382015260200161316a565b50506000910152565b600081518084526131a3816020860160208601613167565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612156602083018461318b565b6000602082840312156131fa57600080fd5b5035919050565b6000806040838503121561321457600080fd5b8235915061322460208401612f28565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561326f57600080fd5b61327883612f28565b9150602083013567ffffffffffffffff81111561329457600080fd5b8301601f810185136132a557600080fd5b803567ffffffffffffffff8111156132bf576132bf61322d565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561332b5761332b61322d565b60405281815282820160200187101561334357600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561337b57600080fd5b61338486612f28565b945061339260208701612f28565b935060408601359250606086013567ffffffffffffffff8111156133b557600080fd5b6133c188828901612fdf565b969995985093965092949392505050565b600080604083850312156133e557600080fd5b6133ee83612f28565b9150602083013567ffffffffffffffff81111561340a57600080fd5b61341685828601612f5f565b9150509250929050565b60008060006060848603121561343557600080fd5b61343e84612f28565b925061344c60208501612f28565b915061345a60408501612f28565b90509250925092565b60008060008060008060a0878903121561347c57600080fd5b61348587612f28565b95506020870135945061349a60408801612f28565b9350606087013567ffffffffffffffff8111156134b657600080fd5b6134c289828a01612fdf565b909450925050608087013567ffffffffffffffff8111156134e257600080fd5b6134ee89828a01612f5f565b9150509295509295509295565b60008060008060008060a0878903121561351457600080fd5b61351d87612f28565b955061352b60208801612f28565b945060408701359350606087013567ffffffffffffffff81111561354e57600080fd5b61355a89828a01612fdf565b909450925050608087013567ffffffffffffffff81111561357a57600080fd5b6134ee89828a01613028565b8015158114610df857600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c957600080fd5b830160208101925035905067ffffffffffffffff8111156135e957600080fd5b80360382131561302157600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361365282612f28565b1682526000602082013561366581613586565b151560208401526001600160a01b0361368060408401612f28565b1660408401526136936060830183613594565b60a060608601526136a860a0860182846135f8565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612d2a60a0830184613641565b6001600160a01b0361370582612f28565b1682526020818101359083015260006137216040830183613594565b60606040860152612d2a6060860182846135f8565b60208152600061215660208301846136f4565b8481526060602082015260006137636060830185876135f8565b828103604084015261377581856136f4565b979650505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126137b557600080fd5b83018035915067ffffffffffffffff8211156137d057600080fd5b60200191503681900382131561302157600080fd5b808201808211156107b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6040815260006138336040830185876135f8565b8281036020840152612e9a8185613641565b838152604060208201526000612d2a6040830184866135f8565b60006020828403121561387157600080fd5b815161215681613586565b60006020828403121561388e57600080fd5b5051919050565b8581526001600160a01b03851660208201526080604082015260006138be6080830185876135f8565b82810360608401526138d08185613641565b98975050505050505050565b8183823760009101908152919050565b600082516138fe818460208701613167565b919091019291505056fea26469706673582212200ce1cb57b9bafa7394345bd73ab37bfe0eee9199c0db1b7d926a8bab8fb060a364736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a916100fd600039600081816123da01528181612403015261288f0152613a916000f3fe6080604052600436106102195760003560e01c8063726ac97c1161011d578063ad3cb1cc116100b0578063d0b492c31161007f578063dda79b7511610064578063dda79b75146106ba578063e63ab1e9146106da578063f7ad60db1461070e57600080fd5b8063d0b492c31461067a578063d547741f1461069a57600080fd5b8063ad3cb1cc146105d1578063ae7a3a6f1461061a578063c0c53b8b1461063a578063d09e3b781461065a57600080fd5b8063950837aa116100ec578063950837aa14610552578063a217fddf14610572578063a2ba193414610587578063a783c7891461059d57600080fd5b8063726ac97c146104b2578063744b9b8b146104c55780638456cb59146104d857806391d14854146104ed57600080fd5b806336568abe116101b057806352d1902d1161017f5780635b112591116101645780635b112591146104275780635c975abb146104475780635d62c8601461047e57600080fd5b806352d1902d146103f257806357bec62f1461040757600080fd5b806336568abe1461038a5780633f4ba83a146103aa5780634f1ef286146103bf5780635131ab59146103d257600080fd5b80631cff79cd116101ec5780631cff79cd146102b557806321e093b1146102d5578063248a9ca31461030d5780632f2ff15d1461036a57600080fd5b806301ffc9a71461021e57806310188aef14610253578063102614b0146102755780631becceb414610295575b600080fd5b34801561022a57600080fd5b5061023e610239366004613004565b610721565b60405190151581526020015b60405180910390f35b34801561025f57600080fd5b5061027361026e366004613062565b6107ba565b005b34801561028157600080fd5b50610273610290366004613095565b610895565b3480156102a157600080fd5b506102736102b0366004613146565b610a20565b6102c86102c33660046131ad565b610b38565b60405161024a919061326e565b3480156102e157600080fd5b506003546102f5906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b34801561031957600080fd5b5061035c610328366004613281565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161024a565b34801561037657600080fd5b5061027361038536600461329a565b610c22565b34801561039657600080fd5b506102736103a536600461329a565b610c66565b3480156103b657600080fd5b50610273610cb7565b6102736103cd3660046132f5565b610cec565b3480156103de57600080fd5b506102736103ed3660046133fc565b610d0b565b3480156103fe57600080fd5b5061035c61100b565b34801561041357600080fd5b506002546102f5906001600160a01b031681565b34801561043357600080fd5b506001546102f5906001600160a01b031681565b34801561045357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661023e565b34801561048a57600080fd5b5061035c7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102736104c036600461346b565b61103a565b6102736104d3366004613146565b611243565b3480156104e457600080fd5b50610273611459565b3480156104f957600080fd5b5061023e61050836600461329a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055e57600080fd5b5061027361056d366004613062565b61148b565b34801561057e57600080fd5b5061035c600081565b34801561059357600080fd5b5061035c61040081565b3480156105a957600080fd5b5061035c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105dd57600080fd5b506102c86040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561062657600080fd5b50610273610635366004613062565b6115a2565b34801561064657600080fd5b506102736106553660046134b9565b61167d565b34801561066657600080fd5b506102736106753660046134fc565b611944565b34801561068657600080fd5b506102736106953660046135a6565b611ad6565b3480156106a657600080fd5b506102736106b536600461329a565b611c7f565b3480156106c657600080fd5b506000546102f5906001600160a01b031681565b3480156106e657600080fd5b5061035c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61027361071c366004613631565b611cc3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107b457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006107c581611eab565b6001600160a01b0382166107ec5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b03161561082f576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108597f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611eb5565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61089d611fa2565b6108a5612000565b6108b560408201602083016136b2565b156108ec576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003610926576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661094d5760405163d92e233d60e01b815260040160405180910390fd5b61040061095d60608301836136cf565b90501115610997576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109a2338385612081565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8585856040516109e99392919061385e565b60405180910390a3610a1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b610a28611fa2565b610a30612000565b610a4060408201602083016136b2565b15610a77576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416610a9e5760405163d92e233d60e01b815260040160405180910390fd5b610400610aae60608301836136cf565b610ab9915084613894565b1115610af1576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d9748585856040516109e9939291906138ce565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b6481611eab565b610b6c611fa2565b610b74612000565b6001600160a01b038516610b9b5760405163d92e233d60e01b815260040160405180910390fd5b6000610ba88686866121c8565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610be7939291906138f4565b60405180910390a29150610c1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c5c81611eab565b610a1a8383611eb5565b6001600160a01b0381163314610ca8576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cb2828261227b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ce181611eab565b610ce961233f565b50565b610cf46123cf565b610cfd8261249f565b610d0782826124aa565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d3581611eab565b610d3d611fa2565b610d45612000565b83600003610d7f576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610da65760405163d92e233d60e01b815260040160405180910390fd5b610db086866125ce565b610de6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e72919061390e565b610ea8576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eb38584846121c8565b50610ebe86866125ce565b610ef4576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f78919061392b565b90508015610f8a57610f8a878261265e565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610fd1939291906138f4565b60405180910390a35061100360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000611015612884565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b611042611fa2565b61104a612000565b61105a60408201602083016136b2565b15611091576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b346000036110cb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166110f25760405163d92e233d60e01b815260040160405180910390fd5b61040061110260608301836136cf565b9050111561113c576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611189576040519150601f19603f3d011682016040523d82523d6000602084013e61118e565b606091505b50509050806111c9576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000866040516112119392919061385e565b60405180910390a350610d0760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61124b611fa2565b611253612000565b61126360408201602083016136b2565b1561129a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b346000036112d4576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166112fb5760405163d92e233d60e01b815260040160405180910390fd5b61040061130b60608301836136cf565b611316915084613894565b111561134e576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d806000811461139b576040519150601f19603f3d011682016040523d82523d6000602084013e6113a0565b606091505b50509050806113db576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000888888604051611427959493929190613944565b60405180910390a350610a1a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61148381611eab565b610ce96128e6565b600061149681611eab565b6001600160a01b0382166114bd5760405163d92e233d60e01b815260040160405180910390fd5b6001546114f4907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b031661227b565b5061151f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611eb5565b50600154604080516001600160a01b03928316815291841660208301527f3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579910160405180910390a150600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60006115ad81611eab565b6001600160a01b0382166115d45760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611617576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116417f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611eb5565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116c85750825b905060008267ffffffffffffffff1660011480156116e55750303b155b9050811580156116f3575080155b1561172a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561178b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806117a857506001600160a01b038716155b156117c65760405163d92e233d60e01b815260040160405180910390fd5b6117ce61295f565b6117d6612967565b6117de61295f565b6117e6612977565b6117f1600087611eb5565b5061181c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611eb5565b506118477f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a89611eb5565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556118a57f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611eb5565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038916179055831561193a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61194c611fa2565b611954612000565b61196460408201602083016136b2565b1561199b576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846000036119d5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166119fc5760405163d92e233d60e01b815260040160405180910390fd5b610400611a0c60608301836136cf565b611a17915084613894565b1115611a4f576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a5a338587612081565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611aa5959493929190613944565b60405180910390a361100360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9611b0081611eab565b611b08611fa2565b611b10612000565b84600003611b4a576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611b715760405163d92e233d60e01b815260040160405180910390fd5b611b856001600160a01b0388168787612987565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611bca9085906004016139e5565b600060405180830381600087803b158015611be457600080fd5b505af1158015611bf8573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143687878787604051611c4594939291906139f8565b60405180910390a3611c7660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611cb981611eab565b610a1a838361227b565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb611ced81611eab565b611cf5611fa2565b611cfd612000565b6001600160a01b038516611d245760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114611d71576040519150601f19603f3d011682016040523d82523d6000602084013e611d76565b606091505b5050905080611db1576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611df69086906004016139e5565b600060405180830381600087803b158015611e1057600080fd5b505af1158015611e24573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611e7294939291906139f8565b60405180910390a350611ea460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610ce981336129fb565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611f98576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611f4e3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107b4565b60009150506107b4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611ffe576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161207b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b03908116908316036120c9576040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561212c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612150919061390e565b612186576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610cb2906001600160a01b038481169186911684612a88565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606121d48383612ac1565b600080856001600160a01b03163486866040516121f2929190613a2f565b60006040518083038185875af1925050503d806000811461222f576040519150601f19603f3d011682016040523d82523d6000602084013e612234565b606091505b509150915081612270576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611f98576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107b4565b612347612b46565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061246857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661245c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611ffe576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d0781611eab565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612522575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261251f9181019061392b565b60015b612568576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146125c4576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161255f565b610cb28383612ba1565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af115801561263a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612274919061390e565b6003546001600160a01b03908116908316036127ad576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612704919061390e565b61273a576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561279957600080fd5b505af1158015611003573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612834919061390e565b61286a576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610d07906001600160a01b03848116911683612987565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ffe576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128ee611fa2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336123b1565b611ffe612bf7565b61296f612bf7565b611ffe612c5e565b61297f612bf7565b611ffe612c66565b6040516001600160a01b03838116602483015260448201839052610cb291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612cb7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610d07576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161255f565b6040516001600160a01b038481166024830152838116604483015260648201839052610a1a9186918216906323b872dd906084016129b4565b60048110610d075781357f99f46220000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610cb2576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611ffe576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612baa82612d33565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612bef57610cb28282612ddb565b610d07612e51565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611ffe576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121a2612bf7565b612c6e612bf7565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000612ccc6001600160a01b03841683612e89565b90508051600014158015612cf1575080806020019051810190612cef919061390e565b155b15610cb2576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161255f565b806001600160a01b03163b600003612d82576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161255f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612df89190613a3f565b600060405180830381855af49150503d8060008114612e33576040519150601f19603f3d011682016040523d82523d6000602084013e612e38565b606091505b5091509150612e48858383612e97565b95945050505050565b3415611ffe576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061227483836000612f0c565b606082612eac57612ea782612fc2565b612274565b8151158015612ec357506001600160a01b0384163b155b15612f05576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161255f565b5080612274565b606081471015612f4a576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161255f565b600080856001600160a01b03168486604051612f669190613a3f565b60006040518083038185875af1925050503d8060008114612fa3576040519150601f19603f3d011682016040523d82523d6000602084013e612fa8565b606091505b5091509150612fb8868383612e97565b9695505050505050565b805115612fd25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561301657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461227457600080fd5b80356001600160a01b038116811461305d57600080fd5b919050565b60006020828403121561307457600080fd5b61227482613046565b600060a0828403121561308f57600080fd5b50919050565b600080600080608085870312156130ab57600080fd5b6130b485613046565b9350602085013592506130c960408601613046565b9150606085013567ffffffffffffffff8111156130e557600080fd5b6130f18782880161307d565b91505092959194509250565b60008083601f84011261310f57600080fd5b50813567ffffffffffffffff81111561312757600080fd5b60208301915083602082850101111561313f57600080fd5b9250929050565b6000806000806060858703121561315c57600080fd5b61316585613046565b9350602085013567ffffffffffffffff81111561318157600080fd5b61318d878288016130fd565b909450925050604085013567ffffffffffffffff8111156130e557600080fd5b6000806000604084860312156131c257600080fd5b6131cb84613046565b9250602084013567ffffffffffffffff8111156131e757600080fd5b6131f3868287016130fd565b9497909650939450505050565b60005b8381101561321b578181015183820152602001613203565b50506000910152565b6000815180845261323c816020860160208601613200565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122746020830184613224565b60006020828403121561329357600080fd5b5035919050565b600080604083850312156132ad57600080fd5b823591506132bd60208401613046565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561330857600080fd5b61331183613046565b9150602083013567ffffffffffffffff81111561332d57600080fd5b8301601f8101851361333e57600080fd5b803567ffffffffffffffff811115613358576133586132c6565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156133c4576133c46132c6565b6040528181528282016020018710156133dc57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561341457600080fd5b61341d86613046565b945061342b60208701613046565b935060408601359250606086013567ffffffffffffffff81111561344e57600080fd5b61345a888289016130fd565b969995985093965092949392505050565b6000806040838503121561347e57600080fd5b61348783613046565b9150602083013567ffffffffffffffff8111156134a357600080fd5b6134af8582860161307d565b9150509250929050565b6000806000606084860312156134ce57600080fd5b6134d784613046565b92506134e560208501613046565b91506134f360408501613046565b90509250925092565b60008060008060008060a0878903121561351557600080fd5b61351e87613046565b95506020870135945061353360408801613046565b9350606087013567ffffffffffffffff81111561354f57600080fd5b61355b89828a016130fd565b909450925050608087013567ffffffffffffffff81111561357b57600080fd5b61358789828a0161307d565b9150509295509295509295565b60006060828403121561308f57600080fd5b60008060008060008060a087890312156135bf57600080fd5b6135c887613046565b95506135d660208801613046565b945060408701359350606087013567ffffffffffffffff8111156135f957600080fd5b61360589828a016130fd565b909450925050608087013567ffffffffffffffff81111561362557600080fd5b61358789828a01613594565b6000806000806060858703121561364757600080fd5b61365085613046565b9350602085013567ffffffffffffffff81111561366c57600080fd5b613678878288016130fd565b909450925050604085013567ffffffffffffffff81111561369857600080fd5b6130f187828801613594565b8015158114610ce957600080fd5b6000602082840312156136c457600080fd5b8135612274816136a4565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261370457600080fd5b83018035915067ffffffffffffffff82111561371f57600080fd5b60200191503681900382131561313f57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261376957600080fd5b830160208101925035905067ffffffffffffffff81111561378957600080fd5b80360382131561313f57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b036137f282613046565b16825260006020820135613805816136a4565b151560208401526001600160a01b0361382060408401613046565b1660408401526138336060830183613734565b60a0606086015261384860a086018284613798565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612e4860a08301846137e1565b808201808211156107b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6040815260006138e2604083018587613798565b8281036020840152612fb881856137e1565b838152604060208201526000612e48604083018486613798565b60006020828403121561392057600080fd5b8151612274816136a4565b60006020828403121561393d57600080fd5b5051919050565b8581526001600160a01b038516602082015260806040820152600061396d608083018587613798565b828103606084015261397f81856137e1565b98975050505050505050565b6001600160a01b0361399c82613046565b1682526000602082013567ffffffffffffffff81168082146139bd57600080fd5b6020850152506139d06040830183613734565b60606040860152612e48606086018284613798565b602081526000612274602083018461398b565b848152606060208201526000613a12606083018587613798565b8281036040840152613a24818561398b565b979650505050505050565b8183823760009101908152919050565b60008251613a51818460208701613200565b919091019291505056fea2646970667358221220b4411b507d4dacf2a9a9337ef4201dbe19dc0710f6636cf7532e5a95cd03f44164736f6c634300081a0033"; type GatewayEVMConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/GatewayZEVMUpgradeTest__factory.ts b/v2/types/factories/GatewayZEVMUpgradeTest__factory.ts new file mode 100644 index 000000000..6eaf655dc --- /dev/null +++ b/v2/types/factories/GatewayZEVMUpgradeTest__factory.ts @@ -0,0 +1,1444 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; +import type { NonPayableOverrides } from "../common"; +import type { + GatewayZEVMUpgradeTest, + GatewayZEVMUpgradeTestInterface, +} from "../GatewayZEVMUpgradeTest"; + +const _abi = [ + { + type: "constructor", + inputs: [], + stateMutability: "nonpayable", + }, + { + type: "receive", + stateMutability: "payable", + }, + { + type: "function", + name: "DEFAULT_ADMIN_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "FUNGIBLE_MODULE_ADDRESS", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "MAX_MESSAGE_SIZE", + inputs: [], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "PAUSER_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "UPGRADE_INTERFACE_VERSION", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "call", + inputs: [ + { + name: "receiver", + type: "bytes", + internalType: "bytes", + }, + { + name: "zrc20", + type: "address", + internalType: "address", + }, + { + name: "message", + type: "bytes", + internalType: "bytes", + }, + { + name: "gasLimit", + type: "uint256", + internalType: "uint256", + }, + { + name: "revertOptions", + type: "tuple", + internalType: "struct RevertOptions", + components: [ + { + name: "revertAddress", + type: "address", + internalType: "address", + }, + { + name: "callOnRevert", + type: "bool", + internalType: "bool", + }, + { + name: "abortAddress", + type: "address", + internalType: "address", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + { + name: "onRevertGasLimit", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "deposit", + inputs: [ + { + name: "zrc20", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "target", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "depositAndCall", + inputs: [ + { + name: "context", + type: "tuple", + internalType: "struct zContext", + components: [ + { + name: "origin", + type: "bytes", + internalType: "bytes", + }, + { + name: "sender", + type: "address", + internalType: "address", + }, + { + name: "chainID", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "target", + type: "address", + internalType: "address", + }, + { + name: "message", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "depositAndCall", + inputs: [ + { + name: "context", + type: "tuple", + internalType: "struct zContext", + components: [ + { + name: "origin", + type: "bytes", + internalType: "bytes", + }, + { + name: "sender", + type: "address", + internalType: "address", + }, + { + name: "chainID", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + name: "zrc20", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "target", + type: "address", + internalType: "address", + }, + { + name: "message", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "depositAndRevert", + inputs: [ + { + name: "zrc20", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "target", + type: "address", + internalType: "address", + }, + { + name: "revertContext", + type: "tuple", + internalType: "struct RevertContext", + components: [ + { + name: "asset", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint64", + internalType: "uint64", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "execute", + inputs: [ + { + name: "context", + type: "tuple", + internalType: "struct zContext", + components: [ + { + name: "origin", + type: "bytes", + internalType: "bytes", + }, + { + name: "sender", + type: "address", + internalType: "address", + }, + { + name: "chainID", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + name: "zrc20", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "target", + type: "address", + internalType: "address", + }, + { + name: "message", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "executeRevert", + inputs: [ + { + name: "target", + type: "address", + internalType: "address", + }, + { + name: "revertContext", + type: "tuple", + internalType: "struct RevertContext", + components: [ + { + name: "asset", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint64", + internalType: "uint64", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "getRoleAdmin", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + ], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "grantRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "hasRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "initialize", + inputs: [ + { + name: "zetaToken_", + type: "address", + internalType: "address", + }, + { + name: "admin_", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "pause", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "paused", + inputs: [], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "proxiableUUID", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "renounceRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "callerConfirmation", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "revokeRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "supportsInterface", + inputs: [ + { + name: "interfaceId", + type: "bytes4", + internalType: "bytes4", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "unpause", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "upgradeToAndCall", + inputs: [ + { + name: "newImplementation", + type: "address", + internalType: "address", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "payable", + }, + { + type: "function", + name: "withdraw", + inputs: [ + { + name: "receiver", + type: "bytes", + internalType: "bytes", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "zrc20", + type: "address", + internalType: "address", + }, + { + name: "revertOptions", + type: "tuple", + internalType: "struct RevertOptions", + components: [ + { + name: "revertAddress", + type: "address", + internalType: "address", + }, + { + name: "callOnRevert", + type: "bool", + internalType: "bool", + }, + { + name: "abortAddress", + type: "address", + internalType: "address", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + { + name: "onRevertGasLimit", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "withdraw", + inputs: [ + { + name: "receiver", + type: "bytes", + internalType: "bytes", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "chainId", + type: "uint256", + internalType: "uint256", + }, + { + name: "revertOptions", + type: "tuple", + internalType: "struct RevertOptions", + components: [ + { + name: "revertAddress", + type: "address", + internalType: "address", + }, + { + name: "callOnRevert", + type: "bool", + internalType: "bool", + }, + { + name: "abortAddress", + type: "address", + internalType: "address", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + { + name: "onRevertGasLimit", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "withdrawAndCall", + inputs: [ + { + name: "receiver", + type: "bytes", + internalType: "bytes", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "zrc20", + type: "address", + internalType: "address", + }, + { + name: "message", + type: "bytes", + internalType: "bytes", + }, + { + name: "gasLimit", + type: "uint256", + internalType: "uint256", + }, + { + name: "revertOptions", + type: "tuple", + internalType: "struct RevertOptions", + components: [ + { + name: "revertAddress", + type: "address", + internalType: "address", + }, + { + name: "callOnRevert", + type: "bool", + internalType: "bool", + }, + { + name: "abortAddress", + type: "address", + internalType: "address", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + { + name: "onRevertGasLimit", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "withdrawAndCall", + inputs: [ + { + name: "receiver", + type: "bytes", + internalType: "bytes", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "chainId", + type: "uint256", + internalType: "uint256", + }, + { + name: "message", + type: "bytes", + internalType: "bytes", + }, + { + name: "revertOptions", + type: "tuple", + internalType: "struct RevertOptions", + components: [ + { + name: "revertAddress", + type: "address", + internalType: "address", + }, + { + name: "callOnRevert", + type: "bool", + internalType: "bool", + }, + { + name: "abortAddress", + type: "address", + internalType: "address", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + { + name: "onRevertGasLimit", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "zetaToken", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, + { + type: "event", + name: "Called", + inputs: [ + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "zrc20", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "receiver", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + { + name: "message", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + { + name: "gasLimit", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "revertOptions", + type: "tuple", + indexed: false, + internalType: "struct RevertOptions", + components: [ + { + name: "revertAddress", + type: "address", + internalType: "address", + }, + { + name: "callOnRevert", + type: "bool", + internalType: "bool", + }, + { + name: "abortAddress", + type: "address", + internalType: "address", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + { + name: "onRevertGasLimit", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Initialized", + inputs: [ + { + name: "version", + type: "uint64", + indexed: false, + internalType: "uint64", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Paused", + inputs: [ + { + name: "account", + type: "address", + indexed: false, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleAdminChanged", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "previousAdminRole", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "newAdminRole", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleGranted", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "account", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleRevoked", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "account", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Unpaused", + inputs: [ + { + name: "account", + type: "address", + indexed: false, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Upgraded", + inputs: [ + { + name: "implementation", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Withdrawn", + inputs: [ + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "chainId", + type: "uint256", + indexed: true, + internalType: "uint256", + }, + { + name: "receiver", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + { + name: "zrc20", + type: "address", + indexed: false, + internalType: "address", + }, + { + name: "value", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "gasfee", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "protocolFlatFee", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "message", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + { + name: "gasLimit", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "revertOptions", + type: "tuple", + indexed: false, + internalType: "struct RevertOptions", + components: [ + { + name: "revertAddress", + type: "address", + internalType: "address", + }, + { + name: "callOnRevert", + type: "bool", + internalType: "bool", + }, + { + name: "abortAddress", + type: "address", + internalType: "address", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + { + name: "onRevertGasLimit", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + anonymous: false, + }, + { + type: "event", + name: "WithdrawnV2", + inputs: [ + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "chainId", + type: "uint256", + indexed: true, + internalType: "uint256", + }, + { + name: "receiver", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + { + name: "zrc20", + type: "address", + indexed: false, + internalType: "address", + }, + { + name: "value", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "gasfee", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "protocolFlatFee", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "message", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + { + name: "gasLimit", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "revertOptions", + type: "tuple", + indexed: false, + internalType: "struct RevertOptions", + components: [ + { + name: "revertAddress", + type: "address", + internalType: "address", + }, + { + name: "callOnRevert", + type: "bool", + internalType: "bool", + }, + { + name: "abortAddress", + type: "address", + internalType: "address", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + { + name: "onRevertGasLimit", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + anonymous: false, + }, + { + type: "error", + name: "AccessControlBadConfirmation", + inputs: [], + }, + { + type: "error", + name: "AccessControlUnauthorizedAccount", + inputs: [ + { + name: "account", + type: "address", + internalType: "address", + }, + { + name: "neededRole", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, + { + type: "error", + name: "AddressEmptyCode", + inputs: [ + { + name: "target", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "CallerIsNotFungibleModule", + inputs: [], + }, + { + type: "error", + name: "ERC1967InvalidImplementation", + inputs: [ + { + name: "implementation", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC1967NonPayable", + inputs: [], + }, + { + type: "error", + name: "EnforcedPause", + inputs: [], + }, + { + type: "error", + name: "ExpectedPause", + inputs: [], + }, + { + type: "error", + name: "FailedInnerCall", + inputs: [], + }, + { + type: "error", + name: "FailedZetaSent", + inputs: [], + }, + { + type: "error", + name: "GasFeeTransferFailed", + inputs: [], + }, + { + type: "error", + name: "InsufficientGasLimit", + inputs: [], + }, + { + type: "error", + name: "InsufficientZRC20Amount", + inputs: [], + }, + { + type: "error", + name: "InsufficientZetaAmount", + inputs: [], + }, + { + type: "error", + name: "InvalidInitialization", + inputs: [], + }, + { + type: "error", + name: "InvalidTarget", + inputs: [], + }, + { + type: "error", + name: "MessageSizeExceeded", + inputs: [], + }, + { + type: "error", + name: "NotInitializing", + inputs: [], + }, + { + type: "error", + name: "OnlyWZETAOrFungible", + inputs: [], + }, + { + type: "error", + name: "ReentrancyGuardReentrantCall", + inputs: [], + }, + { + type: "error", + name: "UUPSUnauthorizedCallContext", + inputs: [], + }, + { + type: "error", + name: "UUPSUnsupportedProxiableUUID", + inputs: [ + { + name: "slot", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, + { + type: "error", + name: "WithdrawalFailed", + inputs: [], + }, + { + type: "error", + name: "ZRC20BurnFailed", + inputs: [], + }, + { + type: "error", + name: "ZRC20DepositFailed", + inputs: [], + }, + { + type: "error", + name: "ZRC20TransferFailed", + inputs: [], + }, + { + type: "error", + name: "ZeroAddress", + inputs: [], + }, +] as const; + +const _bytecode = + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613b2c6100fd6000396000818161273f01528181612768015261293e0152613b2c6000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca3714610621578063d547741f14610641578063e63ab1e914610661578063f45346dc1461069557600080fd5b806397d340f514610580578063a217fddf14610596578063ad3cb1cc146105ab578063bcf7f32b1461060157600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b5565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612e87565b610713565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612ef6565b6107ac565b3480156102a157600080fd5b506102396102b03660046130b8565b610a38565b3480156102c157600080fd5b506102396102d0366004613178565b610c3f565b3480156102e157600080fd5b506102396102f036600461322d565b610f01565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c6103483660046132b9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a53660046132d2565b6110ce565b3480156103b657600080fd5b506102396103c53660046132d2565b611118565b3480156103d657600080fd5b506102396103e5366004613302565b611169565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b506102396112de565b34801561043357600080fd5b50610239610442366004613395565b611313565b6102396104553660046133c3565b611568565b34801561046657600080fd5b5061037c611587565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c1366004613413565b6115b6565b3480156104d257600080fd5b506102396104e1366004613459565b6116be565b3480156104f257600080fd5b5061023961188c565b34801561050757600080fd5b506102606105163660046132d2565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b5061023961057b3660046134d2565b6118be565b34801561058c57600080fd5b5061037c61040081565b3480156105a257600080fd5b5061037c600081565b3480156105b757600080fd5b506105f46040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c91906135a4565b34801561060d57600080fd5b5061023961061c3660046135b7565b6119dd565b34801561062d57600080fd5b5061023961063c3660046135b7565b611b0d565b34801561064d57600080fd5b5061023961065c3660046132d2565b611d1c565b34801561066d57600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156106a157600080fd5b506102396106b0366004613655565b611d60565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610711576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108016106b5565b6001600160a01b038416158061081e57506001600160a01b038216155b15610855576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088f576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108c257506001600160a01b03821630145b156108f9576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af1158015610961573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098591906136a5565b6109bb576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de090610a0090849060040161376f565b600060405180830381600087803b158015610a1a57600080fd5b505af1158015610a2e573d6000803e3d6000fd5b5050505050505050565b610a40611f6f565b610a486106b5565b8651600003610a83576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610abd576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610af7576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b0760608301836137d5565b610b1291508561383a565b10610b49576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b56878785611ff0565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190613874565b8c8c8c8c604051610c049998979695949392919061390e565b60405180910390a350610c3660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c47611f6f565b610c4f6106b5565b8551600003610c8a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610cc4576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610cd460608301836137d5565b610cdf91508561383a565b10610d16576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9c9190613981565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4591906136a5565b610e7b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610ec69594939291906139af565b60405180910390a35050610ef960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610f4e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f566106b5565b6001600160a01b038316610f96576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610fd0576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061100357506001600160a01b03831630145b1561103a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61104484846122f3565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92611095928a9216908990889088906004016139fb565b600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611108816124c1565b61111283836124cb565b50505050565b6001600160a01b038116331461115a576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116482826125b8565b505050565b611171611f6f565b6111796106b5565b85516000036111b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846000036111ee576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006111fe60608301836137d5565b61120991508461383a565b10611240576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61125e8573735b14bb79463307aacbed86daf3322b1e6226ab6122f3565b60008054604051869233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d926112ad928c926001600160a01b0316918c919081908c908c9083908d9061390e565b60405180910390a3610ef960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611308816124c1565b61131061267c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561135e5750825b905060008267ffffffffffffffff16600114801561137b5750303b155b905081158015611389575080155b156113c0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156114215784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061143e57506001600160a01b038616155b15611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61147d61270c565b61148561270c565b61148d612714565b611495612724565b6114a06000876124cb565b506114cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876124cb565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c365784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b611570612734565b61157982612804565b611583828261280f565b5050565b6000611591612933565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611603576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61160b6106b5565b6001600160a01b03821661164b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de09061169090849060040161376f565b600060405180830381600087803b1580156116aa57600080fd5b505af1158015610ef9573d6000803e3d6000fd5b6116c6611f6f565b6116ce6106b5565b8351600003611709576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611743576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061174f8484612995565b90506000336001600160a01b03167f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d3557887868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190613874565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118469190613874565b8a60405161185a9796959493929190613a6c565b60405180910390a35061111260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6118b6816124c1565b611310612a03565b6118c6611f6f565b6118ce6106b5565b8351600003611909576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611943576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119618373735b14bb79463307aacbed86daf3322b1e6226ab6122f3565b60008054604051849233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d926119ac928a926001600160a01b0316918a9190819081908b90613a6c565b60405180910390a361111260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a2a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a326106b5565b6001600160a01b0385161580611a4f57506001600160a01b038316155b15611a86576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90611ad390899089908990889088906004016139fb565b600060405180830381600087803b158015611aed57600080fd5b505af1158015611b01573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611b5a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b626106b5565b6001600160a01b0385161580611b7f57506001600160a01b038316155b15611bb6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611bf0576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611c2357506001600160a01b03831630145b15611c5a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce691906136a5565b611a86576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611d56816124c1565b61111283836125b8565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611dad576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db56106b5565b6001600160a01b0383161580611dd257506001600160a01b038116155b15611e09576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611e43576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611e7657506001600160a01b03811630145b15611ead576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3991906136a5565b611164576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611fea576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b815260040161202391815260200190565b6040805180830381865afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120639190613981565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af11580156120e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210c91906136a5565b612142576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af11580156121ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d291906136a5565b612208576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228c91906136a5565b6122c2576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238791906136a5565b6123bd576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561241c57600080fd5b505af1158015612430573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114612481576040519150601f19603f3d011682016040523d82523d6000602084013e612486565b606091505b5050905080611164576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113108133612a7c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166125ae576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556125643390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a6565b60009150506107a6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156125ae576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a6565b612684612b09565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b610711612b64565b61271c612b64565b610711612bcb565b61272c612b64565b610711612c1c565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806127cd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610711576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611583816124c1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612887575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261288491810190613874565b60015b6128cd576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612929576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016128c4565b6111648383612c24565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610711576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006122c68383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fe9190613874565b611ff0565b612a0b6106b5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336126ee565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611583576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016128c4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610711576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610711576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bd3612b64565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6122cd612b64565b612c2d82612c7a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612c72576111648282612d22565b611583612d98565b806001600160a01b03163b600003612cc9576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016128c4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d3f9190613ada565b600060405180830381855af49150503d8060008114612d7a576040519150601f19603f3d011682016040523d82523d6000602084013e612d7f565b606091505b5091509150612d8f858383612dd0565b95945050505050565b3415610711576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612de557612de082612e45565b6122c6565b8151158015612dfc57506001600160a01b0384163b155b15612e3e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016128c4565b50806122c6565b805115612e555780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612e9957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146122c657600080fd5b6001600160a01b038116811461131057600080fd5b600060608284031215612ef057600080fd5b50919050565b60008060008060808587031215612f0c57600080fd5b8435612f1781612ec9565b9350602085013592506040850135612f2e81612ec9565b9150606085013567ffffffffffffffff811115612f4a57600080fd5b612f5687828801612ede565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612fa257600080fd5b813567ffffffffffffffff811115612fbc57612fbc612f62565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561302857613028612f62565b60405281815283820160200185101561304057600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f84011261306f57600080fd5b50813567ffffffffffffffff81111561308757600080fd5b60208301915083602082850101111561309f57600080fd5b9250929050565b600060a08284031215612ef057600080fd5b600080600080600080600060c0888a0312156130d357600080fd5b873567ffffffffffffffff8111156130ea57600080fd5b6130f68a828b01612f91565b97505060208801359550604088013561310e81612ec9565b9450606088013567ffffffffffffffff81111561312a57600080fd5b6131368a828b0161305d565b9095509350506080880135915060a088013567ffffffffffffffff81111561315d57600080fd5b6131698a828b016130a6565b91505092959891949750929550565b60008060008060008060a0878903121561319157600080fd5b863567ffffffffffffffff8111156131a857600080fd5b6131b489828a01612f91565b96505060208701356131c581612ec9565b9450604087013567ffffffffffffffff8111156131e157600080fd5b6131ed89828a0161305d565b90955093505060608701359150608087013567ffffffffffffffff81111561321457600080fd5b61322089828a016130a6565b9150509295509295509295565b60008060008060006080868803121561324557600080fd5b853567ffffffffffffffff81111561325c57600080fd5b61326888828901612ede565b95505060208601359350604086013561328081612ec9565b9250606086013567ffffffffffffffff81111561329c57600080fd5b6132a88882890161305d565b969995985093965092949392505050565b6000602082840312156132cb57600080fd5b5035919050565b600080604083850312156132e557600080fd5b8235915060208301356132f781612ec9565b809150509250929050565b60008060008060008060a0878903121561331b57600080fd5b863567ffffffffffffffff81111561333257600080fd5b61333e89828a01612f91565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561336957600080fd5b61337589828a0161305d565b909450925050608087013567ffffffffffffffff81111561321457600080fd5b600080604083850312156133a857600080fd5b82356133b381612ec9565b915060208301356132f781612ec9565b600080604083850312156133d657600080fd5b82356133e181612ec9565b9150602083013567ffffffffffffffff8111156133fd57600080fd5b61340985828601612f91565b9150509250929050565b6000806040838503121561342657600080fd5b823561343181612ec9565b9150602083013567ffffffffffffffff81111561344d57600080fd5b61340985828601612ede565b6000806000806080858703121561346f57600080fd5b843567ffffffffffffffff81111561348657600080fd5b61349287828801612f91565b9450506020850135925060408501356134aa81612ec9565b9150606085013567ffffffffffffffff8111156134c657600080fd5b612f56878288016130a6565b600080600080608085870312156134e857600080fd5b843567ffffffffffffffff8111156134ff57600080fd5b61350b87828801612f91565b9450506020850135925060408501359150606085013567ffffffffffffffff8111156134c657600080fd5b60005b83811015613551578181015183820152602001613539565b50506000910152565b60008151808452613572816020860160208601613536565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122c6602083018461355a565b60008060008060008060a087890312156135d057600080fd5b863567ffffffffffffffff8111156135e757600080fd5b6135f389828a01612ede565b965050602087013561360481612ec9565b945060408701359350606087013561361b81612ec9565b9250608087013567ffffffffffffffff81111561363757600080fd5b61364389828a0161305d565b979a9699509497509295939492505050565b60008060006060848603121561366a57600080fd5b833561367581612ec9565b925060208401359150604084013561368c81612ec9565b809150509250925092565b801515811461131057600080fd5b6000602082840312156136b757600080fd5b81516122c681613697565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f757600080fd5b830160208101925035905067ffffffffffffffff81111561371757600080fd5b80360382131561309f57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561378081612ec9565b6001600160a01b038116602084015250602083013567ffffffffffffffff81168082146137ac57600080fd5b80604085015250506137c160408401846136c2565b606080850152612d8f608085018284613726565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261380a57600080fd5b83018035915067ffffffffffffffff82111561382557600080fd5b60200191503681900382131561309f57600080fd5b808201808211156107a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561388657600080fd5b5051919050565b6000813561389a81612ec9565b6001600160a01b0316835260208201356138b381613697565b1515602084015260408201356138c881612ec9565b6001600160a01b031660408401526138e360608301836136c2565b60a060608601526138f860a086018284613726565b6080948501359590940194909452509092915050565b6101008152600061392361010083018c61355a565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a0840152613957818789613726565b90508460c084015282810360e0840152613971818561388d565b9c9b505050505050505050505050565b6000806040838503121561399457600080fd5b825161399f81612ec9565b6020939093015192949293505050565b6080815260006139c2608083018861355a565b82810360208401526139d5818789613726565b905084604084015282810360608401526139ef818561388d565b98975050505050505050565b608081526000613a0b87886136c2565b60606080850152613a2060e085018284613726565b9150506020880135613a3181612ec9565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526139ef818587613726565b61010081526000613a8161010083018a61355a565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e085015250613acc602082018561388d565b9a9950505050505050505050565b60008251613aec818460208701613536565b919091019291505056fea2646970667358221220f71bd58ca9f5b156fdd36da2e6242c5e39c6ce1c972a51f93d45335cd01aa5a664736f6c634300081a0033"; + +type GatewayZEVMUpgradeTestConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: GatewayZEVMUpgradeTestConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class GatewayZEVMUpgradeTest__factory extends ContractFactory { + constructor(...args: GatewayZEVMUpgradeTestConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override getDeployTransaction( + overrides?: NonPayableOverrides & { from?: string } + ): Promise { + return super.getDeployTransaction(overrides || {}); + } + override deploy(overrides?: NonPayableOverrides & { from?: string }) { + return super.deploy(overrides || {}) as Promise< + GatewayZEVMUpgradeTest & { + deploymentTransaction(): ContractTransactionResponse; + } + >; + } + override connect( + runner: ContractRunner | null + ): GatewayZEVMUpgradeTest__factory { + return super.connect(runner) as GatewayZEVMUpgradeTest__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): GatewayZEVMUpgradeTestInterface { + return new Interface(_abi) as GatewayZEVMUpgradeTestInterface; + } + static connect( + address: string, + runner?: ContractRunner | null + ): GatewayZEVMUpgradeTest { + return new Contract( + address, + _abi, + runner + ) as unknown as GatewayZEVMUpgradeTest; + } +} diff --git a/v2/types/factories/GatewayZEVM__factory.ts b/v2/types/factories/GatewayZEVM__factory.ts index 03e7e8819..bf167321f 100644 --- a/v2/types/factories/GatewayZEVM__factory.ts +++ b/v2/types/factories/GatewayZEVM__factory.ts @@ -295,8 +295,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -380,8 +380,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -1157,6 +1157,11 @@ const _abi = [ }, ], }, + { + type: "error", + name: "CallOnRevertNotSupported", + inputs: [], + }, { type: "error", name: "CallerIsNotFungibleModule", @@ -1269,6 +1274,11 @@ const _abi = [ name: "WithdrawalFailed", inputs: [], }, + { + type: "error", + name: "ZETANotSupported", + inputs: [], + }, { type: "error", name: "ZRC20BurnFailed", @@ -1292,7 +1302,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613b186100fd6000396000818161273f01528181612768015261293e0152613b186000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca3714610621578063d547741f14610641578063e63ab1e914610661578063f45346dc1461069557600080fd5b806397d340f514610580578063a217fddf14610596578063ad3cb1cc146105ab578063bcf7f32b1461060157600080fd5b80638456cb59116100d15780638456cb59146104c65780638fffac57146104db57806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f5780637c0dcb5f146104a657600080fd5b806334b1f5dc116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b806334b1f5dc1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b806321501a95116101a057806321501a95146102b557806321e093b1146102d5578063248a9ca31461030d5780632f2ff15d1461036a57600080fd5b806301ffc9a714610240578063048ae42c146102755780631cb5ea751461029557600080fd5b3661023b576101d36106b5565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612e87565b610713565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b5061023961029036600461303a565b6107ac565b3480156102a157600080fd5b506102396102b03660046130fa565b6109b3565b3480156102c157600080fd5b506102396102d03660046131c1565b610c75565b3480156102e157600080fd5b506000546102f5906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561031957600080fd5b5061035c61032836600461324d565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561037657600080fd5b50610239610385366004613266565b610e42565b34801561039657600080fd5b506102396103a5366004613296565b610e8c565b3480156103b657600080fd5b506102396103c5366004613266565b610f94565b3480156103d657600080fd5b506102396103e53660046132e6565b610fe5565b3480156103f657600080fd5b506102f573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b5061023961115a565b34801561043357600080fd5b50610239610442366004613379565b61118f565b6102396104553660046133a7565b6113e4565b34801561046657600080fd5b5061035c611403565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046133ed565b611432565b3480156104d257600080fd5b50610239611600565b3480156104e757600080fd5b506102396104f6366004613472565b611632565b34801561050757600080fd5b50610260610516366004613266565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b5061023961057b3660046134d2565b6118be565b34801561058c57600080fd5b5061035c61040081565b3480156105a257600080fd5b5061035c600081565b3480156105b757600080fd5b506105f46040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c91906135a4565b34801561060d57600080fd5b5061023961061c3660046135b7565b6119dd565b34801561062d57600080fd5b5061023961063c3660046135b7565b611b0d565b34801561064d57600080fd5b5061023961065c366004613266565b611d1c565b34801561066d57600080fd5b5061035c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156106a157600080fd5b506102396106b0366004613655565b611d60565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610711576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6107b4611f6f565b6107bc6106b5565b86516000036107f7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610831576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160000361086b576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61040061087b6060830183613697565b6108869150856136fc565b106108bd576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108ca878785611ff0565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095f9190613736565b8c8c8c8c6040516109789998979695949392919061388b565b60405180910390a3506109aa60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b6109bb611f6f565b6109c36106b5565b85516000036109fe576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610a38576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610a486060830183613697565b610a539150856136fc565b10610a8a576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1091906138fe565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb9919061392c565b610bef576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610c3a959493929190613949565b60405180910390a35050610c6d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610cc2576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cca6106b5565b6001600160a01b038316610d0a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610d44576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610d7757506001600160a01b03831630145b15610dae576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db884846122f3565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610e09928a921690899088908890600401613995565b600060405180830381600087803b158015610e2357600080fd5b505af1158015610e37573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e7c816124c1565b610e8683836124cb565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ed9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ee16106b5565b6001600160a01b038216610f21576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa9b0a73c0000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063a9b0a73c90610f66908490600401613a06565b600060405180830381600087803b158015610f8057600080fd5b505af1158015610c6d573d6000803e3d6000fd5b6001600160a01b0381163314610fd6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe082826125b8565b505050565b610fed611f6f565b610ff56106b5565b8551600003611030576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460000361106a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61040061107a6060830183613697565b6110859150846136fc565b106110bc576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110da8573735b14bb79463307aacbed86daf3322b1e6226ab6122f3565b60008054604051869233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d92611129928c926001600160a01b0316918c919081908c908c9083908d9061388b565b60405180910390a3610c6d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611184816124c1565b61118c61267c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156111da5750825b905060008267ffffffffffffffff1660011480156111f75750303b155b905081158015611205575080155b1561123c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561129d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03871615806112ba57506001600160a01b038616155b156112f1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112f961270c565b61130161270c565b611309612714565b611311612724565b61131c6000876124cb565b506113477f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876124cb565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156109aa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6113ec612734565b6113f582612804565b6113ff828261280f565b5050565b600061140d612933565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61143a611f6f565b6114426106b5565b835160000361147d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036114b7576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114c38484612995565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611534573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115589190613736565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611596573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ba9190613736565b8a6040516115ce9796959493929190613a58565b60405180910390a350610e8660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61162a816124c1565b61118c612a03565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461167f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116876106b5565b6001600160a01b03841615806116a457506001600160a01b038216155b156116db576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611715576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab148061174857506001600160a01b03821630145b1561177f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af11580156117e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180b919061392c565b611841576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa9b0a73c0000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063a9b0a73c90611886908490600401613a06565b600060405180830381600087803b1580156118a057600080fd5b505af11580156118b4573d6000803e3d6000fd5b5050505050505050565b6118c6611f6f565b6118ce6106b5565b8351600003611909576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611943576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119618373735b14bb79463307aacbed86daf3322b1e6226ab6122f3565b60008054604051849233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d926119ac928a926001600160a01b0316918a9190819081908b90613a58565b60405180910390a3610e8660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a2a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a326106b5565b6001600160a01b0385161580611a4f57506001600160a01b038316155b15611a86576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90611ad39089908990899088908890600401613995565b600060405180830381600087803b158015611aed57600080fd5b505af1158015611b01573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611b5a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b626106b5565b6001600160a01b0385161580611b7f57506001600160a01b038316155b15611bb6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611bf0576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611c2357506001600160a01b03831630145b15611c5a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce6919061392c565b611a86576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611d56816124c1565b610e8683836125b8565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611dad576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db56106b5565b6001600160a01b0383161580611dd257506001600160a01b038116155b15611e09576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611e43576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611e7657506001600160a01b03811630145b15611ead576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f39919061392c565b610fe0576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611fea576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b815260040161202391815260200190565b6040805180830381865afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206391906138fe565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af11580156120e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210c919061392c565b612142576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af11580156121ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d2919061392c565b612208576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228c919061392c565b6122c2576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612363573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612387919061392c565b6123bd576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561241c57600080fd5b505af1158015612430573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114612481576040519150601f19603f3d011682016040523d82523d6000602084013e612486565b606091505b5050905080610fe0576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61118c8133612a7c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166125ae576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556125643390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a6565b60009150506107a6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156125ae576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a6565b612684612b09565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b610711612b64565b61271c612b64565b610711612bcb565b61272c612b64565b610711612c1c565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806127cd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610711576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113ff816124c1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612887575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261288491810190613736565b60015b6128cd576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612929576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016128c4565b610fe08383612c24565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610711576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006122c68383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fe9190613736565b611ff0565b612a0b6106b5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336126ee565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166113ff576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016128c4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610711576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610711576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bd3612b64565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6122cd612b64565b612c2d82612c7a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612c7257610fe08282612d22565b6113ff612d98565b806001600160a01b03163b600003612cc9576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016128c4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d3f9190613ac6565b600060405180830381855af49150503d8060008114612d7a576040519150601f19603f3d011682016040523d82523d6000602084013e612d7f565b606091505b5091509150612d8f858383612dd0565b95945050505050565b3415610711576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612de557612de082612e45565b6122c6565b8151158015612dfc57506001600160a01b0384163b155b15612e3e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016128c4565b50806122c6565b805115612e555780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612e9957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146122c657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612f0957600080fd5b813567ffffffffffffffff811115612f2357612f23612ec9565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612f8f57612f8f612ec9565b604052818152838201602001851015612fa757600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b038116811461118c57600080fd5b60008083601f840112612feb57600080fd5b50813567ffffffffffffffff81111561300357600080fd5b60208301915083602082850101111561301b57600080fd5b9250929050565b600060a0828403121561303457600080fd5b50919050565b600080600080600080600060c0888a03121561305557600080fd5b873567ffffffffffffffff81111561306c57600080fd5b6130788a828b01612ef8565b97505060208801359550604088013561309081612fc4565b9450606088013567ffffffffffffffff8111156130ac57600080fd5b6130b88a828b01612fd9565b9095509350506080880135915060a088013567ffffffffffffffff8111156130df57600080fd5b6130eb8a828b01613022565b91505092959891949750929550565b60008060008060008060a0878903121561311357600080fd5b863567ffffffffffffffff81111561312a57600080fd5b61313689828a01612ef8565b965050602087013561314781612fc4565b9450604087013567ffffffffffffffff81111561316357600080fd5b61316f89828a01612fd9565b90955093505060608701359150608087013567ffffffffffffffff81111561319657600080fd5b6131a289828a01613022565b9150509295509295509295565b60006060828403121561303457600080fd5b6000806000806000608086880312156131d957600080fd5b853567ffffffffffffffff8111156131f057600080fd5b6131fc888289016131af565b95505060208601359350604086013561321481612fc4565b9250606086013567ffffffffffffffff81111561323057600080fd5b61323c88828901612fd9565b969995985093965092949392505050565b60006020828403121561325f57600080fd5b5035919050565b6000806040838503121561327957600080fd5b82359150602083013561328b81612fc4565b809150509250929050565b600080604083850312156132a957600080fd5b82356132b481612fc4565b9150602083013567ffffffffffffffff8111156132d057600080fd5b6132dc858286016131af565b9150509250929050565b60008060008060008060a087890312156132ff57600080fd5b863567ffffffffffffffff81111561331657600080fd5b61332289828a01612ef8565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561334d57600080fd5b61335989828a01612fd9565b909450925050608087013567ffffffffffffffff81111561319657600080fd5b6000806040838503121561338c57600080fd5b823561339781612fc4565b9150602083013561328b81612fc4565b600080604083850312156133ba57600080fd5b82356133c581612fc4565b9150602083013567ffffffffffffffff8111156133e157600080fd5b6132dc85828601612ef8565b6000806000806080858703121561340357600080fd5b843567ffffffffffffffff81111561341a57600080fd5b61342687828801612ef8565b94505060208501359250604085013561343e81612fc4565b9150606085013567ffffffffffffffff81111561345a57600080fd5b61346687828801613022565b91505092959194509250565b6000806000806080858703121561348857600080fd5b843561349381612fc4565b93506020850135925060408501356134aa81612fc4565b9150606085013567ffffffffffffffff8111156134c657600080fd5b613466878288016131af565b600080600080608085870312156134e857600080fd5b843567ffffffffffffffff8111156134ff57600080fd5b61350b87828801612ef8565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561345a57600080fd5b60005b83811015613551578181015183820152602001613539565b50506000910152565b60008151808452613572816020860160208601613536565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122c6602083018461355a565b60008060008060008060a087890312156135d057600080fd5b863567ffffffffffffffff8111156135e757600080fd5b6135f389828a016131af565b965050602087013561360481612fc4565b945060408701359350606087013561361b81612fc4565b9250608087013567ffffffffffffffff81111561363757600080fd5b61364389828a01612fd9565b979a9699509497509295939492505050565b60008060006060848603121561366a57600080fd5b833561367581612fc4565b925060208401359150604084013561368c81612fc4565b809150509250925092565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136cc57600080fd5b83018035915067ffffffffffffffff8211156136e757600080fd5b60200191503681900382131561301b57600080fd5b808201808211156107a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561374857600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b801515811461118c57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126137db57600080fd5b830160208101925035905067ffffffffffffffff8111156137fb57600080fd5b80360382131561301b57600080fd5b6000813561381781612fc4565b6001600160a01b03168352602082013561383081613798565b15156020840152604082013561384581612fc4565b6001600160a01b0316604084015261386060608301836137a6565b60a0606086015261387560a08601828461374f565b6080948501359590940194909452509092915050565b610100815260006138a061010083018c61355a565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a08401526138d481878961374f565b90508460c084015282810360e08401526138ee818561380a565b9c9b505050505050505050505050565b6000806040838503121561391157600080fd5b825161391c81612fc4565b6020939093015192949293505050565b60006020828403121561393e57600080fd5b81516122c681613798565b60808152600061395c608083018861355a565b828103602084015261396f81878961374f565b90508460408401528281036060840152613989818561380a565b98975050505050505050565b6080815260006139a587886137a6565b606060808501526139ba60e08501828461374f565b91505060208801356139cb81612fc4565b6001600160a01b0390811660a085015260408981013560c086015290881660208501528301869052828103606084015261398981858761374f565b6020815260008235613a1781612fc4565b6001600160a01b03811660208401525060006020840135905080604084015250613a4460408401846137a6565b606080850152612d8f60808501828461374f565b61010081526000613a6d61010083018a61355a565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e085015250613ab8602082018561380a565b9a9950505050505050505050565b60008251613ad8818460208701613536565b919091019291505056fea26469706673582212208a1195fa27b507b0665fe6f159431f9da136fe9cc8494a10ec7c60c690298a3564736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e9261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e9061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea2646970667358221220d6295002fd18ec461c02f99613a4db51b8eca02e82f77afc8b206b54bd8363c364736f6c634300081a0033"; type GatewayZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/IERC20Custody.sol/IERC20CustodyEvents__factory.ts b/v2/types/factories/IERC20Custody.sol/IERC20CustodyEvents__factory.ts index 608299c98..d93b7309f 100644 --- a/v2/types/factories/IERC20Custody.sol/IERC20CustodyEvents__factory.ts +++ b/v2/types/factories/IERC20Custody.sol/IERC20CustodyEvents__factory.ts @@ -57,6 +57,12 @@ const _abi = [ type: "event", name: "UpdatedCustodyTSSAddress", inputs: [ + { + name: "oldTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, { name: "newTSSAddress", type: "address", @@ -176,8 +182,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", diff --git a/v2/types/factories/IERC20Custody.sol/IERC20Custody__factory.ts b/v2/types/factories/IERC20Custody.sol/IERC20Custody__factory.ts index 60835c462..58c0babde 100644 --- a/v2/types/factories/IERC20Custody.sol/IERC20Custody__factory.ts +++ b/v2/types/factories/IERC20Custody.sol/IERC20Custody__factory.ts @@ -115,8 +115,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -177,6 +177,12 @@ const _abi = [ type: "event", name: "UpdatedCustodyTSSAddress", inputs: [ + { + name: "oldTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, { name: "newTSSAddress", type: "address", @@ -296,8 +302,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", diff --git a/v2/types/factories/IGatewayEVM.sol/IGatewayEVMEvents__factory.ts b/v2/types/factories/IGatewayEVM.sol/IGatewayEVMEvents__factory.ts index e4c84c5c4..a020d6aa9 100644 --- a/v2/types/factories/IGatewayEVM.sol/IGatewayEVMEvents__factory.ts +++ b/v2/types/factories/IGatewayEVM.sol/IGatewayEVMEvents__factory.ts @@ -234,8 +234,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -251,6 +251,12 @@ const _abi = [ type: "event", name: "UpdatedGatewayTSSAddress", inputs: [ + { + name: "oldTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, { name: "newTSSAddress", type: "address", diff --git a/v2/types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts b/v2/types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts index a97f59353..d54299ee6 100644 --- a/v2/types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts +++ b/v2/types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts @@ -319,8 +319,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -397,8 +397,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -636,8 +636,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -653,6 +653,12 @@ const _abi = [ type: "event", name: "UpdatedGatewayTSSAddress", inputs: [ + { + name: "oldTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, { name: "newTSSAddress", type: "address", diff --git a/v2/types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts b/v2/types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts index 530a1271f..392e31a85 100644 --- a/v2/types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts +++ b/v2/types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts @@ -218,8 +218,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -303,8 +303,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", diff --git a/v2/types/factories/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts b/v2/types/factories/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts index 510695bb0..4a7a781ab 100644 --- a/v2/types/factories/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts +++ b/v2/types/factories/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts @@ -144,8 +144,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", diff --git a/v2/types/factories/IZetaConnector.sol/IZetaConnectorEvents__factory.ts b/v2/types/factories/IZetaConnector.sol/IZetaConnectorEvents__factory.ts index 8d7c1a283..0a8e02d97 100644 --- a/v2/types/factories/IZetaConnector.sol/IZetaConnectorEvents__factory.ts +++ b/v2/types/factories/IZetaConnector.sol/IZetaConnectorEvents__factory.ts @@ -13,6 +13,12 @@ const _abi = [ type: "event", name: "UpdatedZetaConnectorTSSAddress", inputs: [ + { + name: "oldTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, { name: "newTSSAddress", type: "address", @@ -101,8 +107,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", diff --git a/v2/types/factories/ReceiverEVM__factory.ts b/v2/types/factories/ReceiverEVM__factory.ts index 31ca132c5..3f2ec4aa9 100644 --- a/v2/types/factories/ReceiverEVM__factory.ts +++ b/v2/types/factories/ReceiverEVM__factory.ts @@ -36,8 +36,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -284,8 +284,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -348,7 +348,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b506001600055610d9d806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c578063a9b0a73c146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106f9565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7fcbc82ed03b989d2f4138dbfa0d14554c8be0f0cfa5a3ebec16d6658f127ba2e53382604051610210929190610a2f565b60405180910390a150565b61022361036f565b6000610230600285610b38565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610be1565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c6b565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d2e565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d4b565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610a6d83610694565b166040820152600080602084013590508060608401525060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ab957600080fd5b830160208101903567ffffffffffffffff811115610ad657600080fd5b803603821315610ae557600080fd5b606060808501528060a0850152808260c0860137600060c0828601015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509392505050565b600082610b6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b8e578181015183820152602001610b76565b50506000910152565b60008151808452610baf816020860160208601610b73565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c1660a0830186610b97565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c61578151865260209586019590910190600101610c43565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610cfe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610ce9858351610b97565b94506020938401939190910190600101610caf565b505050508281036040840152610d148186610c2f565b915050610d25606083018415159052565b95945050505050565b600060208284031215610d4057600080fd5b81516104f681610840565b60008251610d5d818460208701610b73565b919091019291505056fea264697066735822122098725982494f2e15151404f3fbfc80b0517e09c0b3e8ae0e6602ac62c5ba8d0d64736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b506001600055610dbc806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c578063660b9de01461008c5780636ed70169146100ac57005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6100a73660046106f9565b6101aa565b3480156100b857600080fd5b5061006a6101e6565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e33826040516101db929190610a78565b60405180910390a150565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61022361036f565b6000610230600285610b57565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610c00565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c8a565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d4d565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d6a565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610ab683610694565b1660408201526000602083013567ffffffffffffffff8116808214610ada57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610b1657600080fd5b830160208101903567ffffffffffffffff811115610b3357600080fd5b803603821315610b4257600080fd5b606060808501526105b660a085018284610a2f565b600082610b8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610bad578181015183820152602001610b95565b50506000910152565b60008151808452610bce816020860160208601610b92565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c3560a0830186610bb6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c80578151865260209586019590910190600101610c62565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610d1d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610d08858351610bb6565b94506020938401939190910190600101610cce565b505050508281036040840152610d338186610c4e565b915050610d44606083018415159052565b95945050505050565b600060208284031215610d5f57600080fd5b81516104f681610840565b60008251610d7c818460208701610b92565b919091019291505056fea2646970667358221220084d92a79207d5024a4431b52d5d0038017908edb40aae1ce1d94a5ec3de914064736f6c634300081a0033"; type ReceiverEVMConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/Revert.sol/INotSupportedMethods__factory.ts b/v2/types/factories/Revert.sol/INotSupportedMethods__factory.ts new file mode 100644 index 000000000..9cc7d5bc4 --- /dev/null +++ b/v2/types/factories/Revert.sol/INotSupportedMethods__factory.ts @@ -0,0 +1,39 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Interface, type ContractRunner } from "ethers"; +import type { + INotSupportedMethods, + INotSupportedMethodsInterface, +} from "../../Revert.sol/INotSupportedMethods"; + +const _abi = [ + { + type: "error", + name: "CallOnRevertNotSupported", + inputs: [], + }, + { + type: "error", + name: "ZETANotSupported", + inputs: [], + }, +] as const; + +export class INotSupportedMethods__factory { + static readonly abi = _abi; + static createInterface(): INotSupportedMethodsInterface { + return new Interface(_abi) as INotSupportedMethodsInterface; + } + static connect( + address: string, + runner?: ContractRunner | null + ): INotSupportedMethods { + return new Contract( + address, + _abi, + runner + ) as unknown as INotSupportedMethods; + } +} diff --git a/v2/types/factories/Revert.sol/Revertable__factory.ts b/v2/types/factories/Revert.sol/Revertable__factory.ts index bff5987a4..6a071ef56 100644 --- a/v2/types/factories/Revert.sol/Revertable__factory.ts +++ b/v2/types/factories/Revert.sol/Revertable__factory.ts @@ -25,8 +25,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", diff --git a/v2/types/factories/Revert.sol/index.ts b/v2/types/factories/Revert.sol/index.ts index eefdeed86..07a3e8fe9 100644 --- a/v2/types/factories/Revert.sol/index.ts +++ b/v2/types/factories/Revert.sol/index.ts @@ -1,4 +1,5 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ +export { INotSupportedMethods__factory } from "./INotSupportedMethods__factory"; export { Revertable__factory } from "./Revertable__factory"; diff --git a/v2/types/factories/SenderZEVM__factory.ts b/v2/types/factories/SenderZEVM__factory.ts index 04cc81cbf..f74a222c0 100644 --- a/v2/types/factories/SenderZEVM__factory.ts +++ b/v2/types/factories/SenderZEVM__factory.ts @@ -120,7 +120,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526001602080840182905283850192909252835191820184526000808352606084019290925260808301829052905492517f048ae42c000000000000000000000000000000000000000000000000000000008152919273ffffffffffffffffffffffffffffffffffffffff169163048ae42c916102d7918c918c918c9189918990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a081018352610321808252600182840181905282850191909152835192830184526000808452606083019390935260808201839052915492517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201526024810183905293945092909188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220390328e54184295fe4eac56bf800f8f4c63d13597995a05e15347f2e505c481464736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220d7e1a9075911564d308c037a0af9765ff7f3977eee9652547da152cb6de1448964736f6c634300081a0033"; type SenderZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/SystemContract.sol/SystemContract__factory.ts b/v2/types/factories/SystemContract.sol/SystemContract__factory.ts index ffa21af02..1ea2d41a5 100644 --- a/v2/types/factories/SystemContract.sol/SystemContract__factory.ts +++ b/v2/types/factories/SystemContract.sol/SystemContract__factory.ts @@ -439,7 +439,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212203b8a61523cf0636d20451911ef652f516b2b6dc27f59d12ba2a96c4c5f1861dc64736f6c634300081a0033"; + "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201bc2c2e5533a7390cd5c9f230b641bee17c3057fdf7a0f92b4302cd8cea1ce6764736f6c634300081a0033"; type SystemContractConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts b/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts index 73efd45ca..91210c692 100644 --- a/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts +++ b/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts @@ -342,7 +342,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea264697066735822122058a621ddf8438dd7ed89077cf75a72ac07bd86d7792e5230bee3a1bbfb92685b64736f6c634300081a0033"; + "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220cc406cf4b9f9cfbacfa9f32870eb254a68b539001bcca4f238577e817f73a2ab64736f6c634300081a0033"; type SystemContractMockConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/TestUniversalContract__factory.ts b/v2/types/factories/TestUniversalContract__factory.ts index 7802a31f8..dafef5081 100644 --- a/v2/types/factories/TestUniversalContract__factory.ts +++ b/v2/types/factories/TestUniversalContract__factory.ts @@ -84,8 +84,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -152,8 +152,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -168,7 +168,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b506106098061001f6000396000f3fe60806040526004361061002a5760003560e01c8063a9b0a73c14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7fecf5d82c48083c30b9ba8e8536ba84ae739724bdd8a42c47c1304f5437ade807816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c18284018461038d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610483565b6100ff60408a0160208b016104ef565b8960400135338660405161011896959493929190610511565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b166020820152600080602084013590508060408401525060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261031557600080fd5b830160208101903567ffffffffffffffff81111561033257600080fd5b80360382131561034157600080fd5b60608085015261035560808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561039f57600080fd5b813567ffffffffffffffff8111156103b657600080fd5b8201601f810184136103c757600080fd5b803567ffffffffffffffff8111156103e1576103e161035e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561044d5761044d61035e565b60405281815282820160200186101561046557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104b857600080fd5b83018035915067ffffffffffffffff8211156104d357600080fd5b6020019150368190038213156104e857600080fd5b9250929050565b60006020828403121561050157600080fd5b61050a8261017d565b9392505050565b60a08152600061052560a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b8181101561058f57602081870181015184830182015201610573565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122010486f94f449fc99b4a8d453c3a51c73eb1de12f7d8756d65324b00797fda02e64736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c8063660b9de014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c1828401846103a2565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610498565b6100ff60408a0160208b01610504565b8960400135338660405161011896959493929190610526565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b1660208201526000602083013567ffffffffffffffff81168082146102ed57600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261032a57600080fd5b830160208101903567ffffffffffffffff81111561034757600080fd5b80360382131561035657600080fd5b60608085015261036a60808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103b457600080fd5b813567ffffffffffffffff8111156103cb57600080fd5b8201601f810184136103dc57600080fd5b803567ffffffffffffffff8111156103f6576103f6610373565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561046257610462610373565b60405281815282820160200186101561047a57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104cd57600080fd5b83018035915067ffffffffffffffff8211156104e857600080fd5b6020019150368190038213156104fd57600080fd5b9250929050565b60006020828403121561051657600080fd5b61051f8261017d565b9392505050565b60a08152600061053a60a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105a457602081870181015184830182015201610588565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122002711b914cfa85869597d761ee7a81ae9c55589f2201dbf0c65836b421bff96564736f6c634300081a0033"; type TestUniversalContractConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/UniversalContract.sol/UniversalContract__factory.ts b/v2/types/factories/UniversalContract.sol/UniversalContract__factory.ts index 32fce599f..1955f373c 100644 --- a/v2/types/factories/UniversalContract.sol/UniversalContract__factory.ts +++ b/v2/types/factories/UniversalContract.sol/UniversalContract__factory.ts @@ -70,8 +70,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", diff --git a/v2/types/factories/ZetaConnectorBase__factory.ts b/v2/types/factories/ZetaConnectorBase__factory.ts index 21b2d86b7..feb9203e1 100644 --- a/v2/types/factories/ZetaConnectorBase__factory.ts +++ b/v2/types/factories/ZetaConnectorBase__factory.ts @@ -48,6 +48,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "UPGRADE_INTERFACE_VERSION", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, { type: "function", name: "WITHDRAWER_ROLE", @@ -135,6 +148,34 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "initialize", + inputs: [ + { + name: "gateway_", + type: "address", + internalType: "address", + }, + { + name: "zetaToken_", + type: "address", + internalType: "address", + }, + { + name: "tssAddress_", + type: "address", + internalType: "address", + }, + { + name: "admin_", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, { type: "function", name: "pause", @@ -155,6 +196,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "proxiableUUID", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, { type: "function", name: "receiveTokens", @@ -256,6 +310,24 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, + { + type: "function", + name: "upgradeToAndCall", + inputs: [ + { + name: "newImplementation", + type: "address", + internalType: "address", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "payable", + }, { type: "function", name: "withdraw", @@ -343,8 +415,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -370,6 +442,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "event", + name: "Initialized", + inputs: [ + { + name: "version", + type: "uint64", + indexed: false, + internalType: "uint64", + }, + ], + anonymous: false, + }, { type: "event", name: "Paused", @@ -475,6 +560,12 @@ const _abi = [ type: "event", name: "UpdatedZetaConnectorTSSAddress", inputs: [ + { + name: "oldTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, { name: "newTSSAddress", type: "address", @@ -484,6 +575,19 @@ const _abi = [ ], anonymous: false, }, + { + type: "event", + name: "Upgraded", + inputs: [ + { + name: "implementation", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, { type: "event", name: "Withdrawn", @@ -563,8 +667,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -597,6 +701,33 @@ const _abi = [ }, ], }, + { + type: "error", + name: "AddressEmptyCode", + inputs: [ + { + name: "target", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC1967InvalidImplementation", + inputs: [ + { + name: "implementation", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC1967NonPayable", + inputs: [], + }, { type: "error", name: "EnforcedPause", @@ -607,11 +738,42 @@ const _abi = [ name: "ExpectedPause", inputs: [], }, + { + type: "error", + name: "FailedInnerCall", + inputs: [], + }, + { + type: "error", + name: "InvalidInitialization", + inputs: [], + }, + { + type: "error", + name: "NotInitializing", + inputs: [], + }, { type: "error", name: "ReentrancyGuardReentrantCall", inputs: [], }, + { + type: "error", + name: "UUPSUnauthorizedCallContext", + inputs: [], + }, + { + type: "error", + name: "UUPSUnsupportedProxiableUUID", + inputs: [ + { + name: "slot", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, { type: "error", name: "ZeroAddress", diff --git a/v2/types/factories/ZetaConnectorNativeUpgradeTest__factory.ts b/v2/types/factories/ZetaConnectorNativeUpgradeTest__factory.ts new file mode 100644 index 000000000..81411bcbc --- /dev/null +++ b/v2/types/factories/ZetaConnectorNativeUpgradeTest__factory.ts @@ -0,0 +1,884 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; +import type { NonPayableOverrides } from "../common"; +import type { + ZetaConnectorNativeUpgradeTest, + ZetaConnectorNativeUpgradeTestInterface, +} from "../ZetaConnectorNativeUpgradeTest"; + +const _abi = [ + { + type: "function", + name: "DEFAULT_ADMIN_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "PAUSER_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "TSS_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "UPGRADE_INTERFACE_VERSION", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "WITHDRAWER_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "gateway", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "contract IGatewayEVM", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "getRoleAdmin", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + ], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "grantRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "hasRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "initialize", + inputs: [ + { + name: "gateway_", + type: "address", + internalType: "address", + }, + { + name: "zetaToken_", + type: "address", + internalType: "address", + }, + { + name: "tssAddress_", + type: "address", + internalType: "address", + }, + { + name: "admin_", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "pause", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "paused", + inputs: [], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "proxiableUUID", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "receiveTokens", + inputs: [ + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "renounceRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "callerConfirmation", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "revokeRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "supportsInterface", + inputs: [ + { + name: "interfaceId", + type: "bytes4", + internalType: "bytes4", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "tssAddress", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "unpause", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "updateTSSAddress", + inputs: [ + { + name: "newTSSAddress", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "upgradeToAndCall", + inputs: [ + { + name: "newImplementation", + type: "address", + internalType: "address", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "payable", + }, + { + type: "function", + name: "withdraw", + inputs: [ + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "internalSendHash", + type: "bytes32", + internalType: "bytes32", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "withdrawAndCall", + inputs: [ + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + { + name: "internalSendHash", + type: "bytes32", + internalType: "bytes32", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "withdrawAndRevert", + inputs: [ + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + { + name: "internalSendHash", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "revertContext", + type: "tuple", + internalType: "struct RevertContext", + components: [ + { + name: "asset", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint64", + internalType: "uint64", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "zetaToken", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, + { + type: "event", + name: "Initialized", + inputs: [ + { + name: "version", + type: "uint64", + indexed: false, + internalType: "uint64", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Paused", + inputs: [ + { + name: "account", + type: "address", + indexed: false, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleAdminChanged", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "previousAdminRole", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "newAdminRole", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleGranted", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "account", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleRevoked", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "account", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Unpaused", + inputs: [ + { + name: "account", + type: "address", + indexed: false, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "UpdatedZetaConnectorTSSAddress", + inputs: [ + { + name: "oldTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, + { + name: "newTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Upgraded", + inputs: [ + { + name: "implementation", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Withdrawn", + inputs: [ + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "WithdrawnAndCalled", + inputs: [ + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "WithdrawnAndReverted", + inputs: [ + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + { + name: "revertContext", + type: "tuple", + indexed: false, + internalType: "struct RevertContext", + components: [ + { + name: "asset", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint64", + internalType: "uint64", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + ], + }, + ], + anonymous: false, + }, + { + type: "event", + name: "WithdrawnV2", + inputs: [ + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "error", + name: "AccessControlBadConfirmation", + inputs: [], + }, + { + type: "error", + name: "AccessControlUnauthorizedAccount", + inputs: [ + { + name: "account", + type: "address", + internalType: "address", + }, + { + name: "neededRole", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, + { + type: "error", + name: "AddressEmptyCode", + inputs: [ + { + name: "target", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "AddressInsufficientBalance", + inputs: [ + { + name: "account", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC1967InvalidImplementation", + inputs: [ + { + name: "implementation", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC1967NonPayable", + inputs: [], + }, + { + type: "error", + name: "EnforcedPause", + inputs: [], + }, + { + type: "error", + name: "ExpectedPause", + inputs: [], + }, + { + type: "error", + name: "FailedInnerCall", + inputs: [], + }, + { + type: "error", + name: "InvalidInitialization", + inputs: [], + }, + { + type: "error", + name: "NotInitializing", + inputs: [], + }, + { + type: "error", + name: "ReentrancyGuardReentrantCall", + inputs: [], + }, + { + type: "error", + name: "SafeERC20FailedOperation", + inputs: [ + { + name: "token", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "UUPSUnauthorizedCallContext", + inputs: [], + }, + { + type: "error", + name: "UUPSUnsupportedProxiableUUID", + inputs: [ + { + name: "slot", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, + { + type: "error", + name: "ZeroAddress", + inputs: [], + }, +] as const; + +const _bytecode = + "0x60a060405230608052348015601357600080fd5b5060805161248261003d6000396000818161125d01528181611286015261145c01526124826000f3fe6080604052600436106101965760003560e01c80635c975abb116100e1578063950837aa1161008a578063ad3cb1cc11610064578063ad3cb1cc146104f2578063d547741f14610548578063e63ab1e914610568578063f8c8765e1461059c57600080fd5b8063950837aa14610489578063a217fddf146104a9578063a783c789146104be57600080fd5b80638456cb59116100bb5780638456cb59146103db57806385f438c1146103f057806391d148541461042457600080fd5b80635c975abb146103645780635e3e9fef1461039b578063743e0c9b146103bb57600080fd5b80632f2ff15d116101435780634f1ef2861161011d5780634f1ef2861461031c57806352d1902d1461032f5780635b1125911461034457600080fd5b80632f2ff15d146102c757806336568abe146102e75780633f4ba83a1461030757600080fd5b8063116191b611610174578063116191b61461021257806321e093b11461024a578063248a9ca31461026a57600080fd5b806301ffc9a71461019b578063057e0f25146101d0578063106e6290146101f2575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004611dea565b6105bc565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101f06101eb366004611e91565b610655565b005b3480156101fe57600080fd5b506101f061020d366004611f29565b6107ae565b34801561021e57600080fd5b50600054610232906001600160a01b031681565b6040516001600160a01b0390911681526020016101c7565b34801561025657600080fd5b50600154610232906001600160a01b031681565b34801561027657600080fd5b506102b9610285366004611f5c565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c7565b3480156102d357600080fd5b506101f06102e2366004611f75565b610871565b3480156102f357600080fd5b506101f0610302366004611f75565b6108bb565b34801561031357600080fd5b506101f0610907565b6101f061032a366004611fd0565b61093c565b34801561033b57600080fd5b506102b961095b565b34801561035057600080fd5b50600254610232906001600160a01b031681565b34801561037057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bb565b3480156103a757600080fd5b506101f06103b63660046120d7565b61098a565b3480156103c757600080fd5b506101f06103d6366004611f5c565b610ade565b3480156103e757600080fd5b506101f0610afe565b3480156103fc57600080fd5b506102b97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561043057600080fd5b506101bb61043f366004611f75565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561049557600080fd5b506101f06104a4366004612139565b610b30565b3480156104b557600080fd5b506102b9600081565b3480156104ca57600080fd5b506102b97f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156104fe57600080fd5b5061053b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101c79190612178565b34801561055457600080fd5b506101f0610563366004611f75565b610cc3565b34801561057457600080fd5b506102b97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105a857600080fd5b506101f06105b73660046121c9565b610d07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061064f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61065d610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461068781610f0f565b61068f610f19565b6000546001546106ac916001600160a01b03918216911688610f77565b6000546001546040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263d0b492c392610703929116908b908b908b908b908a90600401612315565b600060405180830381600087803b15801561071d57600080fd5b505af1158015610731573d6000803e3d6000fd5b50505050866001600160a01b03167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c87878786604051610774949392919061236c565b60405180910390a2506107a660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6107b6610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e081610f0f565b6107e8610f19565b6001546107ff906001600160a01b03168585610f77565b836001600160a01b03167f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee98460405161083a91815260200190565b60405180910390a25061086c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546108ab81610f0f565b6108b58383611011565b50505050565b6001600160a01b03811633146108fd576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61086c82826110fe565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61093181610f0f565b6109396111c2565b50565b610944611252565b61094d82611322565b610957828261132d565b5050565b6000610965611451565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610992610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109bc81610f0f565b6109c4610f19565b6000546001546109e1916001600160a01b03918216911687610f77565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab5992610a36929116908a908a908a908a906004016123a3565b600060405180830381600087803b158015610a5057600080fd5b505af1158015610a64573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610aa5939291906123db565b60405180910390a250610ad760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610ae6610f19565b600154610939906001600160a01b03163330846114b3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b2881610f0f565b6109396114ec565b6000610b3b81610f0f565b6001600160a01b038216610b7b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610bb2907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166110fe565b50600254610bea907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166110fe565b50610c157f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483611011565b50610c407f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611011565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610cfd81610f0f565b6108b583836110fe565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d525750825b905060008267ffffffffffffffff166001148015610d6f5750303b155b905081158015610d7d575080155b15610db4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e155784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610e2189898989611565565b8315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610f09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109398133611870565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610f75576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261086c91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118fd565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110f4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556110aa3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061064f565b600091505061064f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110f4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061064f565b6111ca611979565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112eb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112df7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061095781610f0f565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113a5575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526113a2918101906123f5565b60015b6113eb576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611447576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016113e2565b61086c83836119d4565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b0384811660248301528381166044830152606482018390526108b59186918216906323b872dd90608401610fa4565b6114f4610f19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611234565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115b05750825b905060008267ffffffffffffffff1660011480156115cd5750303b155b9050811580156115db575080155b15611612576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116735784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061169057506001600160a01b038816155b806116a257506001600160a01b038716155b806116b457506001600160a01b038616155b156116eb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f3611a2a565b6116fb611a32565b611703611a2a565b61170b611a42565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556117669087611011565b506117917f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488611011565b506117bc7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb88611011565b506117e77f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611011565b506118127f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a88611011565b508315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610e7a565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610957576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016113e2565b60006119126001600160a01b03841683611a52565b90508051600014158015611937575080806020019051810190611935919061240e565b155b1561086c576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113e2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610f75576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119dd82611a67565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611a225761086c8282611b0f565b610957611b85565b610f75611bbd565b611a3a611bbd565b610f75611c24565b611a4a611bbd565b610f75611c2c565b6060611a6083836000611c7d565b9392505050565b806001600160a01b03163b600003611ab6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016113e2565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611b2c9190612430565b600060405180830381855af49150503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b5091509150611b7c858383611d33565b95945050505050565b3415610f75576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f75576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610feb611bbd565b611c34611bbd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606081471015611cbb576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113e2565b600080856001600160a01b03168486604051611cd79190612430565b60006040518083038185875af1925050503d8060008114611d14576040519150601f19603f3d011682016040523d82523d6000602084013e611d19565b606091505b5091509150611d29868383611d33565b9695505050505050565b606082611d4857611d4382611da8565b611a60565b8151158015611d5f57506001600160a01b0384163b155b15611da1576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113e2565b5080611a60565b805115611db85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611dfc57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611a6057600080fd5b80356001600160a01b0381168114611e4357600080fd5b919050565b60008083601f840112611e5a57600080fd5b50813567ffffffffffffffff811115611e7257600080fd5b602083019150836020828501011115611e8a57600080fd5b9250929050565b60008060008060008060a08789031215611eaa57600080fd5b611eb387611e2c565b955060208701359450604087013567ffffffffffffffff811115611ed657600080fd5b611ee289828a01611e48565b90955093505060608701359150608087013567ffffffffffffffff811115611f0957600080fd5b87016060818a031215611f1b57600080fd5b809150509295509295509295565b600080600060608486031215611f3e57600080fd5b611f4784611e2c565b95602085013595506040909401359392505050565b600060208284031215611f6e57600080fd5b5035919050565b60008060408385031215611f8857600080fd5b82359150611f9860208401611e2c565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611fe357600080fd5b611fec83611e2c565b9150602083013567ffffffffffffffff81111561200857600080fd5b8301601f8101851361201957600080fd5b803567ffffffffffffffff81111561203357612033611fa1565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561209f5761209f611fa1565b6040528181528282016020018710156120b757600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806000806000608086880312156120ef57600080fd5b6120f886611e2c565b945060208601359350604086013567ffffffffffffffff81111561211b57600080fd5b61212788828901611e48565b96999598509660600135949350505050565b60006020828403121561214b57600080fd5b611a6082611e2c565b60005b8381101561216f578181015183820152602001612157565b50506000910152565b6020815260008251806020840152612197816040850160208701612154565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156121df57600080fd5b6121e885611e2c565b93506121f660208601611e2c565b925061220460408601611e2c565b915061221260608601611e2c565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361227782611e2c565b1682526000602082013567ffffffffffffffff811680821461229857600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126122d457600080fd5b820160208101903567ffffffffffffffff8111156122f157600080fd5b80360382131561230057600080fd5b60606040860152611b7c60608601828461221d565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061234d60a08301858761221d565b828103608084015261235f8185612266565b9998505050505050505050565b84815260606020820152600061238660608301858761221d565b82810360408401526123988185612266565b979650505050505050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061239860808301848661221d565b838152604060208201526000611b7c60408301848661221d565b60006020828403121561240757600080fd5b5051919050565b60006020828403121561242057600080fd5b81518015158114611a6057600080fd5b60008251612442818460208701612154565b919091019291505056fea264697066735822122049170f4da020f959bc5c526f673e6af216e9243e29e6f43be3951a20d8b264ce64736f6c634300081a0033"; + +type ZetaConnectorNativeUpgradeTestConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: ZetaConnectorNativeUpgradeTestConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class ZetaConnectorNativeUpgradeTest__factory extends ContractFactory { + constructor(...args: ZetaConnectorNativeUpgradeTestConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override getDeployTransaction( + overrides?: NonPayableOverrides & { from?: string } + ): Promise { + return super.getDeployTransaction(overrides || {}); + } + override deploy(overrides?: NonPayableOverrides & { from?: string }) { + return super.deploy(overrides || {}) as Promise< + ZetaConnectorNativeUpgradeTest & { + deploymentTransaction(): ContractTransactionResponse; + } + >; + } + override connect( + runner: ContractRunner | null + ): ZetaConnectorNativeUpgradeTest__factory { + return super.connect(runner) as ZetaConnectorNativeUpgradeTest__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): ZetaConnectorNativeUpgradeTestInterface { + return new Interface(_abi) as ZetaConnectorNativeUpgradeTestInterface; + } + static connect( + address: string, + runner?: ContractRunner | null + ): ZetaConnectorNativeUpgradeTest { + return new Contract( + address, + _abi, + runner + ) as unknown as ZetaConnectorNativeUpgradeTest; + } +} diff --git a/v2/types/factories/ZetaConnectorNative__factory.ts b/v2/types/factories/ZetaConnectorNative__factory.ts index 781c2bcbd..9abd67020 100644 --- a/v2/types/factories/ZetaConnectorNative__factory.ts +++ b/v2/types/factories/ZetaConnectorNative__factory.ts @@ -7,12 +7,7 @@ import { ContractTransactionResponse, Interface, } from "ethers"; -import type { - Signer, - AddressLike, - ContractDeployTransaction, - ContractRunner, -} from "ethers"; +import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; import type { NonPayableOverrides } from "../common"; import type { ZetaConnectorNative, @@ -20,32 +15,6 @@ import type { } from "../ZetaConnectorNative"; const _abi = [ - { - type: "constructor", - inputs: [ - { - name: "gateway_", - type: "address", - internalType: "address", - }, - { - name: "zetaToken_", - type: "address", - internalType: "address", - }, - { - name: "tssAddress_", - type: "address", - internalType: "address", - }, - { - name: "admin_", - type: "address", - internalType: "address", - }, - ], - stateMutability: "nonpayable", - }, { type: "function", name: "DEFAULT_ADMIN_ROLE", @@ -85,6 +54,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "UPGRADE_INTERFACE_VERSION", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, { type: "function", name: "WITHDRAWER_ROLE", @@ -172,6 +154,34 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "initialize", + inputs: [ + { + name: "gateway_", + type: "address", + internalType: "address", + }, + { + name: "zetaToken_", + type: "address", + internalType: "address", + }, + { + name: "tssAddress_", + type: "address", + internalType: "address", + }, + { + name: "admin_", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, { type: "function", name: "pause", @@ -192,6 +202,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "proxiableUUID", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, { type: "function", name: "receiveTokens", @@ -293,6 +316,24 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, + { + type: "function", + name: "upgradeToAndCall", + inputs: [ + { + name: "newImplementation", + type: "address", + internalType: "address", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "payable", + }, { type: "function", name: "withdraw", @@ -380,8 +421,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -407,6 +448,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "event", + name: "Initialized", + inputs: [ + { + name: "version", + type: "uint64", + indexed: false, + internalType: "uint64", + }, + ], + anonymous: false, + }, { type: "event", name: "Paused", @@ -512,6 +566,12 @@ const _abi = [ type: "event", name: "UpdatedZetaConnectorTSSAddress", inputs: [ + { + name: "oldTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, { name: "newTSSAddress", type: "address", @@ -521,6 +581,19 @@ const _abi = [ ], anonymous: false, }, + { + type: "event", + name: "Upgraded", + inputs: [ + { + name: "implementation", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, { type: "event", name: "Withdrawn", @@ -600,8 +673,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -656,6 +729,22 @@ const _abi = [ }, ], }, + { + type: "error", + name: "ERC1967InvalidImplementation", + inputs: [ + { + name: "implementation", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC1967NonPayable", + inputs: [], + }, { type: "error", name: "EnforcedPause", @@ -671,6 +760,16 @@ const _abi = [ name: "FailedInnerCall", inputs: [], }, + { + type: "error", + name: "InvalidInitialization", + inputs: [], + }, + { + type: "error", + name: "NotInitializing", + inputs: [], + }, { type: "error", name: "ReentrancyGuardReentrantCall", @@ -687,6 +786,22 @@ const _abi = [ }, ], }, + { + type: "error", + name: "UUPSUnauthorizedCallContext", + inputs: [], + }, + { + type: "error", + name: "UUPSUnsupportedProxiableUUID", + inputs: [ + { + name: "slot", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, { type: "error", name: "ZeroAddress", @@ -695,7 +810,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405234801561001057600080fd5b50604051611ab2380380611ab283398101604081905261002f91610232565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100d7600082610166565b506101027f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610166565b5061012d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610166565b506101587f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610166565b505050505050505050610286565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff1661020c5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101c43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610210565b5060005b92915050565b80516001600160a01b038116811461022d57600080fd5b919050565b6000806000806080858703121561024857600080fd5b61025185610216565b935061025f60208601610216565b925061026d60408601610216565b915061027b60608601610216565b905092959194509250565b60805160a0516117c16102f16000396000818161020a015281816104cd0152818161066101528181610712015281816107fa01528181610a5a0152610b0b0152600081816101be01528181610683015281816106e501528181610a7c0152610ade01526117c16000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d8578063950837aa1161008c578063afd2dce411610066578063afd2dce414610393578063d547741f146103a6578063e63ab1e9146103b957600080fd5b8063950837aa14610351578063a217fddf14610364578063a783c7891461036c57600080fd5b80638456cb59116100bd5780638456cb59146102dc57806385f438c1146102e457806391d148541461030b57600080fd5b80635e3e9fef146102b6578063743e0c9b146102c957600080fd5b80632f2ff15d1161012f5780633f4ba83a116101145780633f4ba83a146102835780635b1125911461028b5780635c975abb146102ab57600080fd5b80632f2ff15d1461025d57806336568abe1461027057600080fd5b8063116191b611610160578063116191b6146101b957806321e093b114610205578063248a9ca31461022c57600080fd5b806301ffc9a71461017c578063106e6290146101a4575b600080fd5b61018f61018a3660046112ef565b6103e0565b60405190151581526020015b60405180910390f35b6101b76101b236600461135a565b610479565b005b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b61024f61023a36600461138d565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761026b3660046113a6565b610554565b6101b761027e3660046113a6565b61057f565b6101b76105d8565b6003546101e09073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102c436600461141b565b61060d565b6101b76102d736600461138d565b6107d8565b6101b7610822565b61024f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f6103193660046113a6565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b761035f36600461147d565b610854565b61024f600081565b61024f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b76103a1366004611498565b610a06565b6101b76103b43660046113a6565b610bd6565b61024f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061047357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610481610bfb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104ab81610c3e565b6104b3610c48565b6104f473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610c87565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161053c91815260200190565b60405180910390a25061054f6001600055565b505050565b60008281526002602052604090206001015461056f81610c3e565b6105798383610d08565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146105ce576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61054f8282610e08565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61060281610c3e565b61060a610ec7565b50565b610615610bfb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461063f81610c3e565b610647610c48565b6106a873ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610c87565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610742907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611579565b600060405180830381600087803b15801561075c57600080fd5b505af1158015610770573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516107be939291906115d6565b60405180910390a2506107d16001600055565b5050505050565b6107e0610c48565b61060a73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610f44565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61084c81610c3e565b61060a610f8a565b600061085f81610c3e565b73ffffffffffffffffffffffffffffffffffffffff82166108ac576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003546108f0907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e49073ffffffffffffffffffffffffffffffffffffffff16610e08565b50600354610935907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb9073ffffffffffffffffffffffffffffffffffffffff16610e08565b506109607f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610d08565b5061098b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610d08565b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f19060200160405180910390a15050565b610a0e610bfb565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a3881610c3e565b610a40610c48565b610aa173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000088610c87565b6040517fece697b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ece697b390610b3d907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161169d565b600060405180830381600087803b158015610b5757600080fd5b505af1158015610b6b573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac87878786604051610bbb949392919061170e565b60405180910390a250610bce6001600055565b505050505050565b600082815260026020526040902060010154610bf181610c3e565b6105798383610e08565b600260005403610c37576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61060a8133610fe3565b60015460ff1615610c85576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261054f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611074565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610e0057600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d9e3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610473565b506000610473565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610e0057600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610473565b610ecf61110a565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526105799186918216906323b872dd90608401610cc1565b610f92610c48565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610f1a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611070576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061109673ffffffffffffffffffffffffffffffffffffffff841683611146565b905080516000141580156110bb5750808060200190518101906110b9919061173a565b155b1561054f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611067565b60015460ff16610c85576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606111548383600061115b565b9392505050565b606081471015611199576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611067565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516111c2919061175c565b60006040518083038185875af1925050503d80600081146111ff576040519150601f19603f3d011682016040523d82523d6000602084013e611204565b606091505b509150915061121486838361121e565b9695505050505050565b6060826112335761122e826112ad565b611154565b8151158015611257575073ffffffffffffffffffffffffffffffffffffffff84163b155b156112a6576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611067565b5080611154565b8051156112bd5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561130157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461115457600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461135557600080fd5b919050565b60008060006060848603121561136f57600080fd5b61137884611331565b95602085013595506040909401359392505050565b60006020828403121561139f57600080fd5b5035919050565b600080604083850312156113b957600080fd5b823591506113c960208401611331565b90509250929050565b60008083601f8401126113e457600080fd5b50813567ffffffffffffffff8111156113fc57600080fd5b60208301915083602082850101111561141457600080fd5b9250929050565b60008060008060006080868803121561143357600080fd5b61143c86611331565b945060208601359350604086013567ffffffffffffffff81111561145f57600080fd5b61146b888289016113d2565b96999598509660600135949350505050565b60006020828403121561148f57600080fd5b61115482611331565b60008060008060008060a087890312156114b157600080fd5b6114ba87611331565b955060208701359450604087013567ffffffffffffffff8111156114dd57600080fd5b6114e989828a016113d2565b90955093505060608701359150608087013567ffffffffffffffff81111561151057600080fd5b87016060818a03121561152257600080fd5b809150509295509295509295565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006115cb608083018486611530565b979650505050505050565b8381526040602082015260006115f0604083018486611530565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff61161782611331565b1682526020818101359083015260006040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261165c57600080fd5b820160208101903567ffffffffffffffff81111561167957600080fd5b80360382131561168857600080fd5b606060408601526115f0606086018284611530565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a0606082015260006116ef60a083018587611530565b828103608084015261170181856115f9565b9998505050505050505050565b848152606060208201526000611728606083018587611530565b82810360408401526115cb81856115f9565b60006020828403121561174c57600080fd5b8151801515811461115457600080fd5b6000825160005b8181101561177d5760208186018101518583015201611763565b50600092019182525091905056fea2646970667358221220ceea8b306dd4c7495a20f7115fb6e51d4f71952b2e9e3cf8975e29134cc1979f64736f6c634300081a0033"; + "0x60a060405230608052348015601357600080fd5b5060805161248261003d6000396000818161125d01528181611286015261145c01526124826000f3fe6080604052600436106101965760003560e01c80635c975abb116100e1578063950837aa1161008a578063ad3cb1cc11610064578063ad3cb1cc146104f2578063d547741f14610548578063e63ab1e914610568578063f8c8765e1461059c57600080fd5b8063950837aa14610489578063a217fddf146104a9578063a783c789146104be57600080fd5b80638456cb59116100bb5780638456cb59146103db57806385f438c1146103f057806391d148541461042457600080fd5b80635c975abb146103645780635e3e9fef1461039b578063743e0c9b146103bb57600080fd5b80632f2ff15d116101435780634f1ef2861161011d5780634f1ef2861461031c57806352d1902d1461032f5780635b1125911461034457600080fd5b80632f2ff15d146102c757806336568abe146102e75780633f4ba83a1461030757600080fd5b8063116191b611610174578063116191b61461021257806321e093b11461024a578063248a9ca31461026a57600080fd5b806301ffc9a71461019b578063057e0f25146101d0578063106e6290146101f2575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004611dea565b6105bc565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101f06101eb366004611e91565b610655565b005b3480156101fe57600080fd5b506101f061020d366004611f29565b6107ae565b34801561021e57600080fd5b50600054610232906001600160a01b031681565b6040516001600160a01b0390911681526020016101c7565b34801561025657600080fd5b50600154610232906001600160a01b031681565b34801561027657600080fd5b506102b9610285366004611f5c565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c7565b3480156102d357600080fd5b506101f06102e2366004611f75565b610871565b3480156102f357600080fd5b506101f0610302366004611f75565b6108bb565b34801561031357600080fd5b506101f0610907565b6101f061032a366004611fd0565b61093c565b34801561033b57600080fd5b506102b961095b565b34801561035057600080fd5b50600254610232906001600160a01b031681565b34801561037057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bb565b3480156103a757600080fd5b506101f06103b63660046120d7565b61098a565b3480156103c757600080fd5b506101f06103d6366004611f5c565b610ade565b3480156103e757600080fd5b506101f0610afe565b3480156103fc57600080fd5b506102b97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561043057600080fd5b506101bb61043f366004611f75565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561049557600080fd5b506101f06104a4366004612139565b610b30565b3480156104b557600080fd5b506102b9600081565b3480156104ca57600080fd5b506102b97f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156104fe57600080fd5b5061053b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101c79190612178565b34801561055457600080fd5b506101f0610563366004611f75565b610cc3565b34801561057457600080fd5b506102b97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105a857600080fd5b506101f06105b73660046121c9565b610d07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061064f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61065d610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461068781610f0f565b61068f610f19565b6000546001546106ac916001600160a01b03918216911688610f77565b6000546001546040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263d0b492c392610703929116908b908b908b908b908a90600401612315565b600060405180830381600087803b15801561071d57600080fd5b505af1158015610731573d6000803e3d6000fd5b50505050866001600160a01b03167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c87878786604051610774949392919061236c565b60405180910390a2506107a660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6107b6610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e081610f0f565b6107e8610f19565b6001546107ff906001600160a01b03168585610f77565b836001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161083a91815260200190565b60405180910390a25061086c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546108ab81610f0f565b6108b58383611011565b50505050565b6001600160a01b03811633146108fd576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61086c82826110fe565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61093181610f0f565b6109396111c2565b50565b610944611252565b61094d82611322565b610957828261132d565b5050565b6000610965611451565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610992610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109bc81610f0f565b6109c4610f19565b6000546001546109e1916001600160a01b03918216911687610f77565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab5992610a36929116908a908a908a908a906004016123a3565b600060405180830381600087803b158015610a5057600080fd5b505af1158015610a64573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610aa5939291906123db565b60405180910390a250610ad760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610ae6610f19565b600154610939906001600160a01b03163330846114b3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b2881610f0f565b6109396114ec565b6000610b3b81610f0f565b6001600160a01b038216610b7b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610bb2907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166110fe565b50600254610bea907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166110fe565b50610c157f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483611011565b50610c407f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611011565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610cfd81610f0f565b6108b583836110fe565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d525750825b905060008267ffffffffffffffff166001148015610d6f5750303b155b905081158015610d7d575080155b15610db4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e155784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610e2189898989611565565b8315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610f09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109398133611870565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610f75576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261086c91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118fd565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110f4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556110aa3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061064f565b600091505061064f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110f4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061064f565b6111ca611979565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112eb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112df7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061095781610f0f565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113a5575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526113a2918101906123f5565b60015b6113eb576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611447576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016113e2565b61086c83836119d4565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b0384811660248301528381166044830152606482018390526108b59186918216906323b872dd90608401610fa4565b6114f4610f19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611234565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115b05750825b905060008267ffffffffffffffff1660011480156115cd5750303b155b9050811580156115db575080155b15611612576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116735784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061169057506001600160a01b038816155b806116a257506001600160a01b038716155b806116b457506001600160a01b038616155b156116eb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f3611a2a565b6116fb611a32565b611703611a2a565b61170b611a42565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556117669087611011565b506117917f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488611011565b506117bc7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb88611011565b506117e77f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611011565b506118127f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a88611011565b508315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610e7a565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610957576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016113e2565b60006119126001600160a01b03841683611a52565b90508051600014158015611937575080806020019051810190611935919061240e565b155b1561086c576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113e2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610f75576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119dd82611a67565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611a225761086c8282611b0f565b610957611b85565b610f75611bbd565b611a3a611bbd565b610f75611c24565b611a4a611bbd565b610f75611c2c565b6060611a6083836000611c7d565b9392505050565b806001600160a01b03163b600003611ab6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016113e2565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611b2c9190612430565b600060405180830381855af49150503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b5091509150611b7c858383611d33565b95945050505050565b3415610f75576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f75576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610feb611bbd565b611c34611bbd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606081471015611cbb576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113e2565b600080856001600160a01b03168486604051611cd79190612430565b60006040518083038185875af1925050503d8060008114611d14576040519150601f19603f3d011682016040523d82523d6000602084013e611d19565b606091505b5091509150611d29868383611d33565b9695505050505050565b606082611d4857611d4382611da8565b611a60565b8151158015611d5f57506001600160a01b0384163b155b15611da1576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113e2565b5080611a60565b805115611db85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611dfc57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611a6057600080fd5b80356001600160a01b0381168114611e4357600080fd5b919050565b60008083601f840112611e5a57600080fd5b50813567ffffffffffffffff811115611e7257600080fd5b602083019150836020828501011115611e8a57600080fd5b9250929050565b60008060008060008060a08789031215611eaa57600080fd5b611eb387611e2c565b955060208701359450604087013567ffffffffffffffff811115611ed657600080fd5b611ee289828a01611e48565b90955093505060608701359150608087013567ffffffffffffffff811115611f0957600080fd5b87016060818a031215611f1b57600080fd5b809150509295509295509295565b600080600060608486031215611f3e57600080fd5b611f4784611e2c565b95602085013595506040909401359392505050565b600060208284031215611f6e57600080fd5b5035919050565b60008060408385031215611f8857600080fd5b82359150611f9860208401611e2c565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611fe357600080fd5b611fec83611e2c565b9150602083013567ffffffffffffffff81111561200857600080fd5b8301601f8101851361201957600080fd5b803567ffffffffffffffff81111561203357612033611fa1565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561209f5761209f611fa1565b6040528181528282016020018710156120b757600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806000806000608086880312156120ef57600080fd5b6120f886611e2c565b945060208601359350604086013567ffffffffffffffff81111561211b57600080fd5b61212788828901611e48565b96999598509660600135949350505050565b60006020828403121561214b57600080fd5b611a6082611e2c565b60005b8381101561216f578181015183820152602001612157565b50506000910152565b6020815260008251806020840152612197816040850160208701612154565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156121df57600080fd5b6121e885611e2c565b93506121f660208601611e2c565b925061220460408601611e2c565b915061221260608601611e2c565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361227782611e2c565b1682526000602082013567ffffffffffffffff811680821461229857600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126122d457600080fd5b820160208101903567ffffffffffffffff8111156122f157600080fd5b80360382131561230057600080fd5b60606040860152611b7c60608601828461221d565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061234d60a08301858761221d565b828103608084015261235f8185612266565b9998505050505050505050565b84815260606020820152600061238660608301858761221d565b82810360408401526123988185612266565b979650505050505050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061239860808301848661221d565b838152604060208201526000611b7c60408301848661221d565b60006020828403121561240757600080fd5b5051919050565b60006020828403121561242057600080fd5b81518015158114611a6057600080fd5b60008251612442818460208701612154565b919091019291505056fea2646970667358221220074d716950abba5c0be64fcbc56312f034865a42cd6307352b394a64a7488b7b64736f6c634300081a0033"; type ZetaConnectorNativeConstructorParams = | [signer?: Signer] @@ -715,34 +830,12 @@ export class ZetaConnectorNative__factory extends ContractFactory { } override getDeployTransaction( - gateway_: AddressLike, - zetaToken_: AddressLike, - tssAddress_: AddressLike, - admin_: AddressLike, overrides?: NonPayableOverrides & { from?: string } ): Promise { - return super.getDeployTransaction( - gateway_, - zetaToken_, - tssAddress_, - admin_, - overrides || {} - ); + return super.getDeployTransaction(overrides || {}); } - override deploy( - gateway_: AddressLike, - zetaToken_: AddressLike, - tssAddress_: AddressLike, - admin_: AddressLike, - overrides?: NonPayableOverrides & { from?: string } - ) { - return super.deploy( - gateway_, - zetaToken_, - tssAddress_, - admin_, - overrides || {} - ) as Promise< + override deploy(overrides?: NonPayableOverrides & { from?: string }) { + return super.deploy(overrides || {}) as Promise< ZetaConnectorNative & { deploymentTransaction(): ContractTransactionResponse; } diff --git a/v2/types/factories/ZetaConnectorNonNativeUpgradeTest__factory.ts b/v2/types/factories/ZetaConnectorNonNativeUpgradeTest__factory.ts new file mode 100644 index 000000000..d1e81cdb6 --- /dev/null +++ b/v2/types/factories/ZetaConnectorNonNativeUpgradeTest__factory.ts @@ -0,0 +1,906 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; +import type { NonPayableOverrides } from "../common"; +import type { + ZetaConnectorNonNativeUpgradeTest, + ZetaConnectorNonNativeUpgradeTestInterface, +} from "../ZetaConnectorNonNativeUpgradeTest"; + +const _abi = [ + { + type: "function", + name: "DEFAULT_ADMIN_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "PAUSER_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "TSS_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "UPGRADE_INTERFACE_VERSION", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "WITHDRAWER_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "gateway", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "contract IGatewayEVM", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "getRoleAdmin", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + ], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "grantRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "hasRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "initialize", + inputs: [ + { + name: "gateway_", + type: "address", + internalType: "address", + }, + { + name: "zetaToken_", + type: "address", + internalType: "address", + }, + { + name: "tssAddress_", + type: "address", + internalType: "address", + }, + { + name: "admin_", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "maxSupply", + inputs: [], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "pause", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "paused", + inputs: [], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "proxiableUUID", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "receiveTokens", + inputs: [ + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "renounceRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "callerConfirmation", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "revokeRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setMaxSupply", + inputs: [ + { + name: "maxSupply_", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "supportsInterface", + inputs: [ + { + name: "interfaceId", + type: "bytes4", + internalType: "bytes4", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "tssAddress", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "unpause", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "updateTSSAddress", + inputs: [ + { + name: "newTSSAddress", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "upgradeToAndCall", + inputs: [ + { + name: "newImplementation", + type: "address", + internalType: "address", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "payable", + }, + { + type: "function", + name: "withdraw", + inputs: [ + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "internalSendHash", + type: "bytes32", + internalType: "bytes32", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "withdrawAndCall", + inputs: [ + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + { + name: "internalSendHash", + type: "bytes32", + internalType: "bytes32", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "withdrawAndRevert", + inputs: [ + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + { + name: "internalSendHash", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "revertContext", + type: "tuple", + internalType: "struct RevertContext", + components: [ + { + name: "asset", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint64", + internalType: "uint64", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "zetaToken", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, + { + type: "event", + name: "Initialized", + inputs: [ + { + name: "version", + type: "uint64", + indexed: false, + internalType: "uint64", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "MaxSupplyUpdated", + inputs: [ + { + name: "maxSupply", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Paused", + inputs: [ + { + name: "account", + type: "address", + indexed: false, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleAdminChanged", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "previousAdminRole", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "newAdminRole", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleGranted", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "account", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleRevoked", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "account", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Unpaused", + inputs: [ + { + name: "account", + type: "address", + indexed: false, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "UpdatedZetaConnectorTSSAddress", + inputs: [ + { + name: "oldTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, + { + name: "newTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Upgraded", + inputs: [ + { + name: "implementation", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Withdrawn", + inputs: [ + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "WithdrawnAndCalled", + inputs: [ + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "WithdrawnAndReverted", + inputs: [ + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + { + name: "revertContext", + type: "tuple", + indexed: false, + internalType: "struct RevertContext", + components: [ + { + name: "asset", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint64", + internalType: "uint64", + }, + { + name: "revertMessage", + type: "bytes", + internalType: "bytes", + }, + ], + }, + ], + anonymous: false, + }, + { + type: "event", + name: "WithdrawnV2", + inputs: [ + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "amount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "error", + name: "AccessControlBadConfirmation", + inputs: [], + }, + { + type: "error", + name: "AccessControlUnauthorizedAccount", + inputs: [ + { + name: "account", + type: "address", + internalType: "address", + }, + { + name: "neededRole", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, + { + type: "error", + name: "AddressEmptyCode", + inputs: [ + { + name: "target", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC1967InvalidImplementation", + inputs: [ + { + name: "implementation", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC1967NonPayable", + inputs: [], + }, + { + type: "error", + name: "EnforcedPause", + inputs: [], + }, + { + type: "error", + name: "ExceedsMaxSupply", + inputs: [], + }, + { + type: "error", + name: "ExpectedPause", + inputs: [], + }, + { + type: "error", + name: "FailedInnerCall", + inputs: [], + }, + { + type: "error", + name: "InvalidInitialization", + inputs: [], + }, + { + type: "error", + name: "NotInitializing", + inputs: [], + }, + { + type: "error", + name: "ReentrancyGuardReentrantCall", + inputs: [], + }, + { + type: "error", + name: "UUPSUnauthorizedCallContext", + inputs: [], + }, + { + type: "error", + name: "UUPSUnsupportedProxiableUUID", + inputs: [ + { + name: "slot", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, + { + type: "error", + name: "ZeroAddress", + inputs: [], + }, +] as const; + +const _bytecode = + "0x60a060405230608052348015601357600080fd5b5060805161251761003d6000396000818161145701528181611480015261165601526125176000f3fe6080604052600436106101ac5760003560e01c80635e3e9fef116100ec578063a217fddf1161008a578063d547741f11610064578063d547741f1461057e578063d5abeb011461059e578063e63ab1e9146105b4578063f8c8765e146105e857600080fd5b8063a217fddf146104df578063a783c789146104f4578063ad3cb1cc1461052857600080fd5b80638456cb59116100c65780638456cb591461041157806385f438c11461042657806391d148541461045a578063950837aa146104bf57600080fd5b80635e3e9fef146103b15780636f8b44b0146103d1578063743e0c9b146103f157600080fd5b80632f2ff15d116101595780634f1ef286116101335780634f1ef2861461033257806352d1902d146103455780635b1125911461035a5780635c975abb1461037a57600080fd5b80632f2ff15d146102dd57806336568abe146102fd5780633f4ba83a1461031d57600080fd5b8063116191b61161018a578063116191b61461022857806321e093b114610260578063248a9ca31461028057600080fd5b806301ffc9a7146101b1578063057e0f25146101e6578063106e629014610208575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611e67565b610608565b60405190151581526020015b60405180910390f35b3480156101f257600080fd5b50610206610201366004611f0e565b6106a1565b005b34801561021457600080fd5b50610206610223366004611fa6565b6107f4565b34801561023457600080fd5b50600054610248906001600160a01b031681565b6040516001600160a01b0390911681526020016101dd565b34801561026c57600080fd5b50600154610248906001600160a01b031681565b34801561028c57600080fd5b506102cf61029b366004611fd9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101dd565b3480156102e957600080fd5b506102066102f8366004611ff2565b6108ab565b34801561030957600080fd5b50610206610318366004611ff2565b6108f5565b34801561032957600080fd5b50610206610941565b61020661034036600461204d565b610976565b34801561035157600080fd5b506102cf610995565b34801561036657600080fd5b50600254610248906001600160a01b031681565b34801561038657600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101d1565b3480156103bd57600080fd5b506102066103cc366004612154565b6109c4565b3480156103dd57600080fd5b506102066103ec366004611fd9565b610b12565b3480156103fd57600080fd5b5061020661040c366004611fd9565b610b80565b34801561041d57600080fd5b50610206610c01565b34801561043257600080fd5b506102cf7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561046657600080fd5b506101d1610475366004611ff2565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb57600080fd5b506102066104da3660046121b6565b610c33565b3480156104eb57600080fd5b506102cf600081565b34801561050057600080fd5b506102cf7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561053457600080fd5b506105716040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101dd91906121f5565b34801561058a57600080fd5b50610206610599366004611ff2565b610dc6565b3480156105aa57600080fd5b506102cf60035481565b3480156105c057600080fd5b506102cf7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105f457600080fd5b50610206610603366004612246565b610e0a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061069b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6106a9610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106d381611036565b6106db611040565b6000546106f2906001600160a01b0316878561109e565b6000546001546040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263d0b492c392610749929116908b908b908b908b908a90600401612392565b600060405180830381600087803b15801561076357600080fd5b505af1158015610777573d6000803e3d6000fd5b50505050866001600160a01b03167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516107ba94939291906123e9565b60405180910390a2506107ec60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6107fc610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461082681611036565b61082e611040565b61083984848461109e565b836001600160a01b03167f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee98460405161087491815260200190565b60405180910390a2506108a660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546108e581611036565b6108ef838361120b565b50505050565b6001600160a01b0381163314610937576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108a682826112f8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61096b81611036565b6109736113bc565b50565b61097e61144c565b6109878261151c565b6109918282611527565b5050565b600061099f61164b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6109cc610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109f681611036565b6109fe611040565b600054610a15906001600160a01b0316868461109e565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab5992610a6a929116908a908a908a908a90600401612420565b600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610ad993929190612458565b60405180910390a250610b0b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b3c81611036565b610b44611040565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610b88611040565b6001546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610bed57600080fd5b505af1158015610b0b573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c2b81611036565b6109736116ad565b6000610c3e81611036565b6001600160a01b038216610c7e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610cb5907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166112f8565b50600254610ced907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166112f8565b50610d187f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361120b565b50610d437f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361120b565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e0081611036565b6108ef83836112f8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610eb7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f185784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610f2489898989611726565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003558315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611030576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109738133611a31565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561109c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600354600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612472565b611122908461248b565b111561115a576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f1e458bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526044820184905290911690631e458bee90606401600060405180830381600087803b1580156111c857600080fd5b505af11580156111dc573d6000803e3d6000fd5b50505050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166112ee576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112a43390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061069b565b600091505061069b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156112ee576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061069b565b6113c4611abe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114e557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114d97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061099181611036565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561159f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261159c91810190612472565b60015b6115e5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611641576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016115dc565b6108a68383611b19565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b5611040565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361142e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117715750825b905060008267ffffffffffffffff16600114801561178e5750303b155b90508115801561179c575080155b156117d3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118345784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061185157506001600160a01b038816155b8061186357506001600160a01b038716155b8061187557506001600160a01b038616155b156118ac576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118b4611b6f565b6118bc611b77565b6118c4611b6f565b6118cc611b87565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b1691909216179055611927908761120b565b506119527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48861120b565b5061197d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8861120b565b506119a87f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761120b565b506119d37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8861120b565b508315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610fa1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610991576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016115dc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661109c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b2282611b97565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b67576108a68282611c3f565b610991611cb5565b61109c611ced565b611b7f611ced565b61109c611d54565b611b8f611ced565b61109c611d5c565b806001600160a01b03163b600003611be6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016115dc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611c5c91906124c5565b600060405180830381855af49150503d8060008114611c97576040519150601f19603f3d011682016040523d82523d6000602084013e611c9c565b606091505b5091509150611cac858383611dad565b95945050505050565b341561109c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661109c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111e5611ced565b611d64611ced565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606082611dc257611dbd82611e25565b611e1e565b8151158015611dd957506001600160a01b0384163b155b15611e1b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016115dc565b50805b9392505050565b805115611e355780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611e7957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611e1e57600080fd5b80356001600160a01b0381168114611ec057600080fd5b919050565b60008083601f840112611ed757600080fd5b50813567ffffffffffffffff811115611eef57600080fd5b602083019150836020828501011115611f0757600080fd5b9250929050565b60008060008060008060a08789031215611f2757600080fd5b611f3087611ea9565b955060208701359450604087013567ffffffffffffffff811115611f5357600080fd5b611f5f89828a01611ec5565b90955093505060608701359150608087013567ffffffffffffffff811115611f8657600080fd5b87016060818a031215611f9857600080fd5b809150509295509295509295565b600080600060608486031215611fbb57600080fd5b611fc484611ea9565b95602085013595506040909401359392505050565b600060208284031215611feb57600080fd5b5035919050565b6000806040838503121561200557600080fd5b8235915061201560208401611ea9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561206057600080fd5b61206983611ea9565b9150602083013567ffffffffffffffff81111561208557600080fd5b8301601f8101851361209657600080fd5b803567ffffffffffffffff8111156120b0576120b061201e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561211c5761211c61201e565b60405281815282820160200187101561213457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561216c57600080fd5b61217586611ea9565b945060208601359350604086013567ffffffffffffffff81111561219857600080fd5b6121a488828901611ec5565b96999598509660600135949350505050565b6000602082840312156121c857600080fd5b611e1e82611ea9565b60005b838110156121ec5781810151838201526020016121d4565b50506000910152565b60208152600082518060208401526122148160408501602087016121d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561225c57600080fd5b61226585611ea9565b935061227360208601611ea9565b925061228160408601611ea9565b915061228f60608601611ea9565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b036122f482611ea9565b1682526000602082013567ffffffffffffffff811680821461231557600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261235157600080fd5b820160208101903567ffffffffffffffff81111561236e57600080fd5b80360382131561237d57600080fd5b60606040860152611cac60608601828461229a565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006123ca60a08301858761229a565b82810360808401526123dc81856122e3565b9998505050505050505050565b84815260606020820152600061240360608301858761229a565b828103604084015261241581856122e3565b979650505050505050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061241560808301848661229a565b838152604060208201526000611cac60408301848661229a565b60006020828403121561248457600080fd5b5051919050565b8082018082111561069b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082516124d78184602087016121d1565b919091019291505056fea2646970667358221220eb5f504ed403a8398e7050b33437ff957a84b998c9ce21be698308cae4eb131c64736f6c634300081a0033"; + +type ZetaConnectorNonNativeUpgradeTestConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: ZetaConnectorNonNativeUpgradeTestConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class ZetaConnectorNonNativeUpgradeTest__factory extends ContractFactory { + constructor(...args: ZetaConnectorNonNativeUpgradeTestConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override getDeployTransaction( + overrides?: NonPayableOverrides & { from?: string } + ): Promise { + return super.getDeployTransaction(overrides || {}); + } + override deploy(overrides?: NonPayableOverrides & { from?: string }) { + return super.deploy(overrides || {}) as Promise< + ZetaConnectorNonNativeUpgradeTest & { + deploymentTransaction(): ContractTransactionResponse; + } + >; + } + override connect( + runner: ContractRunner | null + ): ZetaConnectorNonNativeUpgradeTest__factory { + return super.connect(runner) as ZetaConnectorNonNativeUpgradeTest__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): ZetaConnectorNonNativeUpgradeTestInterface { + return new Interface(_abi) as ZetaConnectorNonNativeUpgradeTestInterface; + } + static connect( + address: string, + runner?: ContractRunner | null + ): ZetaConnectorNonNativeUpgradeTest { + return new Contract( + address, + _abi, + runner + ) as unknown as ZetaConnectorNonNativeUpgradeTest; + } +} diff --git a/v2/types/factories/ZetaConnectorNonNative__factory.ts b/v2/types/factories/ZetaConnectorNonNative__factory.ts index 62f4f282f..04600ebe4 100644 --- a/v2/types/factories/ZetaConnectorNonNative__factory.ts +++ b/v2/types/factories/ZetaConnectorNonNative__factory.ts @@ -7,12 +7,7 @@ import { ContractTransactionResponse, Interface, } from "ethers"; -import type { - Signer, - AddressLike, - ContractDeployTransaction, - ContractRunner, -} from "ethers"; +import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; import type { NonPayableOverrides } from "../common"; import type { ZetaConnectorNonNative, @@ -20,32 +15,6 @@ import type { } from "../ZetaConnectorNonNative"; const _abi = [ - { - type: "constructor", - inputs: [ - { - name: "gateway_", - type: "address", - internalType: "address", - }, - { - name: "zetaToken_", - type: "address", - internalType: "address", - }, - { - name: "tssAddress_", - type: "address", - internalType: "address", - }, - { - name: "admin_", - type: "address", - internalType: "address", - }, - ], - stateMutability: "nonpayable", - }, { type: "function", name: "DEFAULT_ADMIN_ROLE", @@ -85,6 +54,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "UPGRADE_INTERFACE_VERSION", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, { type: "function", name: "WITHDRAWER_ROLE", @@ -172,6 +154,34 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "initialize", + inputs: [ + { + name: "gateway_", + type: "address", + internalType: "address", + }, + { + name: "zetaToken_", + type: "address", + internalType: "address", + }, + { + name: "tssAddress_", + type: "address", + internalType: "address", + }, + { + name: "admin_", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, { type: "function", name: "maxSupply", @@ -205,6 +215,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "proxiableUUID", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, { type: "function", name: "receiveTokens", @@ -319,6 +342,24 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, + { + type: "function", + name: "upgradeToAndCall", + inputs: [ + { + name: "newImplementation", + type: "address", + internalType: "address", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "payable", + }, { type: "function", name: "withdraw", @@ -406,8 +447,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -433,6 +474,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "event", + name: "Initialized", + inputs: [ + { + name: "version", + type: "uint64", + indexed: false, + internalType: "uint64", + }, + ], + anonymous: false, + }, { type: "event", name: "MaxSupplyUpdated", @@ -551,6 +605,12 @@ const _abi = [ type: "event", name: "UpdatedZetaConnectorTSSAddress", inputs: [ + { + name: "oldTSSAddress", + type: "address", + indexed: false, + internalType: "address", + }, { name: "newTSSAddress", type: "address", @@ -560,6 +620,19 @@ const _abi = [ ], anonymous: false, }, + { + type: "event", + name: "Upgraded", + inputs: [ + { + name: "implementation", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, { type: "event", name: "Withdrawn", @@ -639,8 +712,8 @@ const _abi = [ }, { name: "amount", - type: "uint256", - internalType: "uint256", + type: "uint64", + internalType: "uint64", }, { name: "revertMessage", @@ -673,6 +746,33 @@ const _abi = [ }, ], }, + { + type: "error", + name: "AddressEmptyCode", + inputs: [ + { + name: "target", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC1967InvalidImplementation", + inputs: [ + { + name: "implementation", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC1967NonPayable", + inputs: [], + }, { type: "error", name: "EnforcedPause", @@ -688,11 +788,42 @@ const _abi = [ name: "ExpectedPause", inputs: [], }, + { + type: "error", + name: "FailedInnerCall", + inputs: [], + }, + { + type: "error", + name: "InvalidInitialization", + inputs: [], + }, + { + type: "error", + name: "NotInitializing", + inputs: [], + }, { type: "error", name: "ReentrancyGuardReentrantCall", inputs: [], }, + { + type: "error", + name: "UUPSUnauthorizedCallContext", + inputs: [], + }, + { + type: "error", + name: "UUPSUnsupportedProxiableUUID", + inputs: [ + { + name: "slot", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, { type: "error", name: "ZeroAddress", @@ -701,7 +832,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405260001960045534801561001657600080fd5b5060405161199338038061199383398101604081905261003591610238565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100dd60008261016c565b506101087f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361016c565b506101337f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361016c565b5061015e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261016c565b50505050505050505061028c565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166102125760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ca3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610216565b5060005b92915050565b80516001600160a01b038116811461023357600080fd5b919050565b6000806000806080858703121561024e57600080fd5b6102578561021c565b93506102656020860161021c565b92506102736040860161021c565b91506102816060860161021c565b905092959194509250565b60805160a0516116a36102f060003960008181610220015281816106d80152818161084a01528181610b6301528181610ce40152610e060152600081816101d401528181610648015281816106ab01528181610ad30152610b3601526116a36000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80636f8b44b0116100e3578063a217fddf1161008c578063d547741f11610066578063d547741f146103cf578063d5abeb01146103e2578063e63ab1e9146103eb57600080fd5b8063a217fddf1461038d578063a783c78914610395578063afd2dce4146103bc57600080fd5b806385f438c1116100bd57806385f438c11461030d57806391d1485414610334578063950837aa1461037a57600080fd5b80636f8b44b0146102df578063743e0c9b146102f25780638456cb591461030557600080fd5b80632f2ff15d116101455780635b1125911161011f5780635b112591146102a15780635c975abb146102c15780635e3e9fef146102cc57600080fd5b80632f2ff15d1461027357806336568abe146102865780633f4ba83a1461029957600080fd5b8063116191b611610176578063116191b6146101cf57806321e093b11461021b578063248a9ca31461024257600080fd5b806301ffc9a714610192578063106e6290146101ba575b600080fd5b6101a56101a03660046111c8565b610412565b60405190151581526020015b60405180910390f35b6101cd6101c836600461123a565b6104ab565b005b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b61026561025036600461126d565b60009081526002602052604090206001015490565b6040519081526020016101b1565b6101cd610281366004611286565b610550565b6101cd610294366004611286565b61057b565b6101cd6105d4565b6003546101f69073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff166101a5565b6101cd6102da3660046112fb565b610609565b6101cd6102ed36600461126d565b61079e565b6101cd61030036600461126d565b61080d565b6101cd6108b7565b6102657f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101a5610342366004611286565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cd61038836600461135d565b6108e9565b610265600081565b6102657f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101cd6103ca366004611378565b610a94565b6101cd6103dd366004611286565b610c2e565b61026560045481565b6102657f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104a557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104b3610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104dd81610c96565b6104e5610ca0565b6104f0848484610cdf565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161053891815260200190565b60405180910390a25061054b6001600055565b505050565b60008281526002602052604090206001015461056b81610c96565b6105758383610e67565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146105ca576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61054b8282610f67565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fe81610c96565b610606611026565b50565b610611610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461063b81610c96565b610643610ca0565b61066e7f00000000000000000000000000000000000000000000000000000000000000008684610cdf565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610708907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611459565b600060405180830381600087803b15801561072257600080fd5b505af1158015610736573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610784939291906114b6565b60405180910390a2506107976001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6107c881610c96565b6107d0610ca0565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c906020015b60405180910390a15050565b610815610ca0565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156108a357600080fd5b505af1158015610797573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108e181610c96565b6106066110a3565b60006108f481610c96565b73ffffffffffffffffffffffffffffffffffffffff8216610941576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354610985907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e49073ffffffffffffffffffffffffffffffffffffffff16610f67565b506003546109ca907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb9073ffffffffffffffffffffffffffffffffffffffff16610f67565b506109f57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610e67565b50610a207f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610e67565b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fa38189053f94a2657ffb2b9fc651eddd1606a7cefc9f08d30eb72e3dbb51c1f190602001610801565b610a9c610c53565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ac681610c96565b610ace610ca0565b610af97f00000000000000000000000000000000000000000000000000000000000000008785610cdf565b6040517fece697b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ece697b390610b95907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161157d565b600060405180830381600087803b158015610baf57600080fd5b505af1158015610bc3573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f56a2fc827d20ff3b62f19b9302a7b18e4c8a011918713faaa6dab6dd0cfd2dac87878786604051610c1394939291906115ee565b60405180910390a250610c266001600055565b505050505050565b600082815260026020526040902060010154610c4981610c96565b6105758383610f67565b600260005403610c8f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61060681336110fc565b60015460ff1615610cdd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d71919061161a565b610d7b9084611633565b1115610db3576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610e4a57600080fd5b505af1158015610e5e573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610efd3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016104a5565b5060006104a5565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610f5f57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104a5565b61102e61118c565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6110ab610ca0565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611079565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611188576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610cdd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156111da57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461120a57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461123557600080fd5b919050565b60008060006060848603121561124f57600080fd5b61125884611211565b95602085013595506040909401359392505050565b60006020828403121561127f57600080fd5b5035919050565b6000806040838503121561129957600080fd5b823591506112a960208401611211565b90509250929050565b60008083601f8401126112c457600080fd5b50813567ffffffffffffffff8111156112dc57600080fd5b6020830191508360208285010111156112f457600080fd5b9250929050565b60008060008060006080868803121561131357600080fd5b61131c86611211565b945060208601359350604086013567ffffffffffffffff81111561133f57600080fd5b61134b888289016112b2565b96999598509660600135949350505050565b60006020828403121561136f57600080fd5b61120a82611211565b60008060008060008060a0878903121561139157600080fd5b61139a87611211565b955060208701359450604087013567ffffffffffffffff8111156113bd57600080fd5b6113c989828a016112b2565b90955093505060608701359150608087013567ffffffffffffffff8111156113f057600080fd5b87016060818a03121561140257600080fd5b809150509295509295509295565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114ab608083018486611410565b979650505050505050565b8381526040602082015260006114d0604083018486611410565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff6114f782611211565b1682526020818101359083015260006040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261153c57600080fd5b820160208101903567ffffffffffffffff81111561155957600080fd5b80360382131561156857600080fd5b606060408601526114d0606086018284611410565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a0606082015260006115cf60a083018587611410565b82810360808401526115e181856114d9565b9998505050505050505050565b848152606060208201526000611608606083018587611410565b82810360408401526114ab81856114d9565b60006020828403121561162c57600080fd5b5051919050565b808201808211156104a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206fa68043397322d1636dba3251c7e40948706562c8e08173e2df059302eb268d64736f6c634300081a0033"; + "0x60a060405230608052348015601357600080fd5b5060805161251761003d6000396000818161145701528181611480015261165601526125176000f3fe6080604052600436106101ac5760003560e01c80635e3e9fef116100ec578063a217fddf1161008a578063d547741f11610064578063d547741f1461057e578063d5abeb011461059e578063e63ab1e9146105b4578063f8c8765e146105e857600080fd5b8063a217fddf146104df578063a783c789146104f4578063ad3cb1cc1461052857600080fd5b80638456cb59116100c65780638456cb591461041157806385f438c11461042657806391d148541461045a578063950837aa146104bf57600080fd5b80635e3e9fef146103b15780636f8b44b0146103d1578063743e0c9b146103f157600080fd5b80632f2ff15d116101595780634f1ef286116101335780634f1ef2861461033257806352d1902d146103455780635b1125911461035a5780635c975abb1461037a57600080fd5b80632f2ff15d146102dd57806336568abe146102fd5780633f4ba83a1461031d57600080fd5b8063116191b61161018a578063116191b61461022857806321e093b114610260578063248a9ca31461028057600080fd5b806301ffc9a7146101b1578063057e0f25146101e6578063106e629014610208575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611e67565b610608565b60405190151581526020015b60405180910390f35b3480156101f257600080fd5b50610206610201366004611f0e565b6106a1565b005b34801561021457600080fd5b50610206610223366004611fa6565b6107f4565b34801561023457600080fd5b50600054610248906001600160a01b031681565b6040516001600160a01b0390911681526020016101dd565b34801561026c57600080fd5b50600154610248906001600160a01b031681565b34801561028c57600080fd5b506102cf61029b366004611fd9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101dd565b3480156102e957600080fd5b506102066102f8366004611ff2565b6108ab565b34801561030957600080fd5b50610206610318366004611ff2565b6108f5565b34801561032957600080fd5b50610206610941565b61020661034036600461204d565b610976565b34801561035157600080fd5b506102cf610995565b34801561036657600080fd5b50600254610248906001600160a01b031681565b34801561038657600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101d1565b3480156103bd57600080fd5b506102066103cc366004612154565b6109c4565b3480156103dd57600080fd5b506102066103ec366004611fd9565b610b12565b3480156103fd57600080fd5b5061020661040c366004611fd9565b610b80565b34801561041d57600080fd5b50610206610c01565b34801561043257600080fd5b506102cf7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561046657600080fd5b506101d1610475366004611ff2565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb57600080fd5b506102066104da3660046121b6565b610c33565b3480156104eb57600080fd5b506102cf600081565b34801561050057600080fd5b506102cf7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561053457600080fd5b506105716040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101dd91906121f5565b34801561058a57600080fd5b50610206610599366004611ff2565b610dc6565b3480156105aa57600080fd5b506102cf60035481565b3480156105c057600080fd5b506102cf7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105f457600080fd5b50610206610603366004612246565b610e0a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061069b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6106a9610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106d381611036565b6106db611040565b6000546106f2906001600160a01b0316878561109e565b6000546001546040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263d0b492c392610749929116908b908b908b908b908a90600401612392565b600060405180830381600087803b15801561076357600080fd5b505af1158015610777573d6000803e3d6000fd5b50505050866001600160a01b03167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516107ba94939291906123e9565b60405180910390a2506107ec60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6107fc610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461082681611036565b61082e611040565b61083984848461109e565b836001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161087491815260200190565b60405180910390a2506108a660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546108e581611036565b6108ef838361120b565b50505050565b6001600160a01b0381163314610937576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108a682826112f8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61096b81611036565b6109736113bc565b50565b61097e61144c565b6109878261151c565b6109918282611527565b5050565b600061099f61164b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6109cc610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109f681611036565b6109fe611040565b600054610a15906001600160a01b0316868461109e565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab5992610a6a929116908a908a908a908a90600401612420565b600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610ad993929190612458565b60405180910390a250610b0b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b3c81611036565b610b44611040565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610b88611040565b6001546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610bed57600080fd5b505af1158015610b0b573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c2b81611036565b6109736116ad565b6000610c3e81611036565b6001600160a01b038216610c7e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610cb5907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166112f8565b50600254610ced907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166112f8565b50610d187f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361120b565b50610d437f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361120b565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e0081611036565b6108ef83836112f8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610eb7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f185784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610f2489898989611726565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003558315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611030576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109738133611a31565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561109c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600354600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612472565b611122908461248b565b111561115a576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f1e458bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526044820184905290911690631e458bee90606401600060405180830381600087803b1580156111c857600080fd5b505af11580156111dc573d6000803e3d6000fd5b50505050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166112ee576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112a43390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061069b565b600091505061069b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156112ee576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061069b565b6113c4611abe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114e557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114d97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061099181611036565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561159f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261159c91810190612472565b60015b6115e5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611641576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016115dc565b6108a68383611b19565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b5611040565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361142e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117715750825b905060008267ffffffffffffffff16600114801561178e5750303b155b90508115801561179c575080155b156117d3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118345784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061185157506001600160a01b038816155b8061186357506001600160a01b038716155b8061187557506001600160a01b038616155b156118ac576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118b4611b6f565b6118bc611b77565b6118c4611b6f565b6118cc611b87565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b1691909216179055611927908761120b565b506119527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48861120b565b5061197d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8861120b565b506119a87f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761120b565b506119d37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8861120b565b508315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610fa1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610991576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016115dc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661109c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b2282611b97565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b67576108a68282611c3f565b610991611cb5565b61109c611ced565b611b7f611ced565b61109c611d54565b611b8f611ced565b61109c611d5c565b806001600160a01b03163b600003611be6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016115dc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611c5c91906124c5565b600060405180830381855af49150503d8060008114611c97576040519150601f19603f3d011682016040523d82523d6000602084013e611c9c565b606091505b5091509150611cac858383611dad565b95945050505050565b341561109c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661109c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111e5611ced565b611d64611ced565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606082611dc257611dbd82611e25565b611e1e565b8151158015611dd957506001600160a01b0384163b155b15611e1b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016115dc565b50805b9392505050565b805115611e355780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611e7957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611e1e57600080fd5b80356001600160a01b0381168114611ec057600080fd5b919050565b60008083601f840112611ed757600080fd5b50813567ffffffffffffffff811115611eef57600080fd5b602083019150836020828501011115611f0757600080fd5b9250929050565b60008060008060008060a08789031215611f2757600080fd5b611f3087611ea9565b955060208701359450604087013567ffffffffffffffff811115611f5357600080fd5b611f5f89828a01611ec5565b90955093505060608701359150608087013567ffffffffffffffff811115611f8657600080fd5b87016060818a031215611f9857600080fd5b809150509295509295509295565b600080600060608486031215611fbb57600080fd5b611fc484611ea9565b95602085013595506040909401359392505050565b600060208284031215611feb57600080fd5b5035919050565b6000806040838503121561200557600080fd5b8235915061201560208401611ea9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561206057600080fd5b61206983611ea9565b9150602083013567ffffffffffffffff81111561208557600080fd5b8301601f8101851361209657600080fd5b803567ffffffffffffffff8111156120b0576120b061201e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561211c5761211c61201e565b60405281815282820160200187101561213457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561216c57600080fd5b61217586611ea9565b945060208601359350604086013567ffffffffffffffff81111561219857600080fd5b6121a488828901611ec5565b96999598509660600135949350505050565b6000602082840312156121c857600080fd5b611e1e82611ea9565b60005b838110156121ec5781810151838201526020016121d4565b50506000910152565b60208152600082518060208401526122148160408501602087016121d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561225c57600080fd5b61226585611ea9565b935061227360208601611ea9565b925061228160408601611ea9565b915061228f60608601611ea9565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b036122f482611ea9565b1682526000602082013567ffffffffffffffff811680821461231557600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261235157600080fd5b820160208101903567ffffffffffffffff81111561236e57600080fd5b80360382131561237d57600080fd5b60606040860152611cac60608601828461229a565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006123ca60a08301858761229a565b82810360808401526123dc81856122e3565b9998505050505050505050565b84815260606020820152600061240360608301858761229a565b828103604084015261241581856122e3565b979650505050505050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061241560808301848661229a565b838152604060208201526000611cac60408301848661229a565b60006020828403121561248457600080fd5b5051919050565b8082018082111561069b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082516124d78184602087016121d1565b919091019291505056fea26469706673582212202fb043a34ee4e9462c9f9506a8ed82f300e4fffb4db3d6b81653b7e1c00e3b8564736f6c634300081a0033"; type ZetaConnectorNonNativeConstructorParams = | [signer?: Signer] @@ -721,34 +852,12 @@ export class ZetaConnectorNonNative__factory extends ContractFactory { } override getDeployTransaction( - gateway_: AddressLike, - zetaToken_: AddressLike, - tssAddress_: AddressLike, - admin_: AddressLike, overrides?: NonPayableOverrides & { from?: string } ): Promise { - return super.getDeployTransaction( - gateway_, - zetaToken_, - tssAddress_, - admin_, - overrides || {} - ); + return super.getDeployTransaction(overrides || {}); } - override deploy( - gateway_: AddressLike, - zetaToken_: AddressLike, - tssAddress_: AddressLike, - admin_: AddressLike, - overrides?: NonPayableOverrides & { from?: string } - ) { - return super.deploy( - gateway_, - zetaToken_, - tssAddress_, - admin_, - overrides || {} - ) as Promise< + override deploy(overrides?: NonPayableOverrides & { from?: string }) { + return super.deploy(overrides || {}) as Promise< ZetaConnectorNonNative & { deploymentTransaction(): ContractTransactionResponse; } diff --git a/v2/types/factories/index.ts b/v2/types/factories/index.ts index b761b7633..af6b26274 100644 --- a/v2/types/factories/index.ts +++ b/v2/types/factories/index.ts @@ -24,23 +24,21 @@ export * as zetaNonEthSol from "./Zeta.non-eth.sol"; export * as draftIerc1822Sol from "./draft-IERC1822.sol"; export * as draftIerc6093Sol from "./draft-IERC6093.sol"; export * as introspection from "./introspection"; -export { AccessControl__factory } from "./AccessControl__factory"; export { AccessControlUpgradeable__factory } from "./AccessControlUpgradeable__factory"; export { Address__factory } from "./Address__factory"; export { BeaconProxy__factory } from "./BeaconProxy__factory"; export { ContextUpgradeable__factory } from "./ContextUpgradeable__factory"; -export { ERC165__factory } from "./ERC165__factory"; export { ERC165Upgradeable__factory } from "./ERC165Upgradeable__factory"; export { ERC1967Proxy__factory } from "./ERC1967Proxy__factory"; export { ERC1967Utils__factory } from "./ERC1967Utils__factory"; export { ERC20__factory } from "./ERC20__factory"; export { ERC20Burnable__factory } from "./ERC20Burnable__factory"; export { ERC20Custody__factory } from "./ERC20Custody__factory"; -export { ERC20CustodyEchidnaTest__factory } from "./ERC20CustodyEchidnaTest__factory"; +export { ERC20CustodyUpgradeTest__factory } from "./ERC20CustodyUpgradeTest__factory"; export { GatewayEVM__factory } from "./GatewayEVM__factory"; -export { GatewayEVMEchidnaTest__factory } from "./GatewayEVMEchidnaTest__factory"; export { GatewayEVMUpgradeTest__factory } from "./GatewayEVMUpgradeTest__factory"; export { GatewayZEVM__factory } from "./GatewayZEVM__factory"; +export { GatewayZEVMUpgradeTest__factory } from "./GatewayZEVMUpgradeTest__factory"; export { IAccessControl__factory } from "./IAccessControl__factory"; export { IBeacon__factory } from "./IBeacon__factory"; export { IERC165__factory } from "./IERC165__factory"; @@ -59,7 +57,6 @@ export { Math__factory } from "./Math__factory"; export { MockERC20__factory } from "./MockERC20__factory"; export { MockERC721__factory } from "./MockERC721__factory"; export { Ownable__factory } from "./Ownable__factory"; -export { Pausable__factory } from "./Pausable__factory"; export { PausableUpgradeable__factory } from "./PausableUpgradeable__factory"; export { Proxy__factory } from "./Proxy__factory"; export { ProxyAdmin__factory } from "./ProxyAdmin__factory"; @@ -78,4 +75,6 @@ export { UUPSUpgradeable__factory } from "./UUPSUpgradeable__factory"; export { UpgradeableBeacon__factory } from "./UpgradeableBeacon__factory"; export { ZetaConnectorBase__factory } from "./ZetaConnectorBase__factory"; export { ZetaConnectorNative__factory } from "./ZetaConnectorNative__factory"; +export { ZetaConnectorNativeUpgradeTest__factory } from "./ZetaConnectorNativeUpgradeTest__factory"; export { ZetaConnectorNonNative__factory } from "./ZetaConnectorNonNative__factory"; +export { ZetaConnectorNonNativeUpgradeTest__factory } from "./ZetaConnectorNonNativeUpgradeTest__factory"; diff --git a/v2/types/index.ts b/v2/types/index.ts index dc864cda6..8aa47d540 100644 --- a/v2/types/index.ts +++ b/v2/types/index.ts @@ -47,23 +47,21 @@ import type * as draftIerc6093Sol from "./draft-IERC6093.sol"; export type { draftIerc6093Sol }; import type * as introspection from "./introspection"; export type { introspection }; -export type { AccessControl } from "./AccessControl"; export type { AccessControlUpgradeable } from "./AccessControlUpgradeable"; export type { Address } from "./Address"; export type { BeaconProxy } from "./BeaconProxy"; export type { ContextUpgradeable } from "./ContextUpgradeable"; -export type { ERC165 } from "./ERC165"; export type { ERC165Upgradeable } from "./ERC165Upgradeable"; export type { ERC1967Proxy } from "./ERC1967Proxy"; export type { ERC1967Utils } from "./ERC1967Utils"; export type { ERC20 } from "./ERC20"; export type { ERC20Burnable } from "./ERC20Burnable"; export type { ERC20Custody } from "./ERC20Custody"; -export type { ERC20CustodyEchidnaTest } from "./ERC20CustodyEchidnaTest"; +export type { ERC20CustodyUpgradeTest } from "./ERC20CustodyUpgradeTest"; export type { GatewayEVM } from "./GatewayEVM"; -export type { GatewayEVMEchidnaTest } from "./GatewayEVMEchidnaTest"; export type { GatewayEVMUpgradeTest } from "./GatewayEVMUpgradeTest"; export type { GatewayZEVM } from "./GatewayZEVM"; +export type { GatewayZEVMUpgradeTest } from "./GatewayZEVMUpgradeTest"; export type { IAccessControl } from "./IAccessControl"; export type { IBeacon } from "./IBeacon"; export type { IERC165 } from "./IERC165"; @@ -82,7 +80,6 @@ export type { Math } from "./Math"; export type { MockERC20 } from "./MockERC20"; export type { MockERC721 } from "./MockERC721"; export type { Ownable } from "./Ownable"; -export type { Pausable } from "./Pausable"; export type { PausableUpgradeable } from "./PausableUpgradeable"; export type { Proxy } from "./Proxy"; export type { ProxyAdmin } from "./ProxyAdmin"; @@ -101,9 +98,10 @@ export type { UUPSUpgradeable } from "./UUPSUpgradeable"; export type { UpgradeableBeacon } from "./UpgradeableBeacon"; export type { ZetaConnectorBase } from "./ZetaConnectorBase"; export type { ZetaConnectorNative } from "./ZetaConnectorNative"; +export type { ZetaConnectorNativeUpgradeTest } from "./ZetaConnectorNativeUpgradeTest"; export type { ZetaConnectorNonNative } from "./ZetaConnectorNonNative"; +export type { ZetaConnectorNonNativeUpgradeTest } from "./ZetaConnectorNonNativeUpgradeTest"; export * as factories from "./factories"; -export { AccessControl__factory } from "./factories/AccessControl__factory"; export { AccessControlUpgradeable__factory } from "./factories/AccessControlUpgradeable__factory"; export { Address__factory } from "./factories/Address__factory"; export { BeaconProxy__factory } from "./factories/BeaconProxy__factory"; @@ -116,7 +114,6 @@ export type { IERC20Errors } from "./draft-IERC6093.sol/IERC20Errors"; export { IERC20Errors__factory } from "./factories/draft-IERC6093.sol/IERC20Errors__factory"; export type { IERC721Errors } from "./draft-IERC6093.sol/IERC721Errors"; export { IERC721Errors__factory } from "./factories/draft-IERC6093.sol/IERC721Errors__factory"; -export { ERC165__factory } from "./factories/ERC165__factory"; export { ERC165Upgradeable__factory } from "./factories/ERC165Upgradeable__factory"; export { ERC1967Proxy__factory } from "./factories/ERC1967Proxy__factory"; export { ERC1967Utils__factory } from "./factories/ERC1967Utils__factory"; @@ -125,11 +122,11 @@ export type { IERC20 } from "./ERC20/IERC20"; export { IERC20__factory } from "./factories/ERC20/IERC20__factory"; export { ERC20Burnable__factory } from "./factories/ERC20Burnable__factory"; export { ERC20Custody__factory } from "./factories/ERC20Custody__factory"; -export { ERC20CustodyEchidnaTest__factory } from "./factories/ERC20CustodyEchidnaTest__factory"; +export { ERC20CustodyUpgradeTest__factory } from "./factories/ERC20CustodyUpgradeTest__factory"; export { GatewayEVM__factory } from "./factories/GatewayEVM__factory"; -export { GatewayEVMEchidnaTest__factory } from "./factories/GatewayEVMEchidnaTest__factory"; export { GatewayEVMUpgradeTest__factory } from "./factories/GatewayEVMUpgradeTest__factory"; export { GatewayZEVM__factory } from "./factories/GatewayZEVM__factory"; +export { GatewayZEVMUpgradeTest__factory } from "./factories/GatewayZEVMUpgradeTest__factory"; export { IAccessControl__factory } from "./factories/IAccessControl__factory"; export { IBeacon__factory } from "./factories/IBeacon__factory"; export { IERC165__factory } from "./factories/IERC165__factory"; @@ -185,13 +182,14 @@ export { Math__factory } from "./factories/Math__factory"; export { MockERC20__factory } from "./factories/MockERC20__factory"; export { MockERC721__factory } from "./factories/MockERC721__factory"; export { Ownable__factory } from "./factories/Ownable__factory"; -export { Pausable__factory } from "./factories/Pausable__factory"; export { PausableUpgradeable__factory } from "./factories/PausableUpgradeable__factory"; export { Proxy__factory } from "./factories/Proxy__factory"; export { ProxyAdmin__factory } from "./factories/ProxyAdmin__factory"; export { ReceiverEVM__factory } from "./factories/ReceiverEVM__factory"; export { ReentrancyGuard__factory } from "./factories/ReentrancyGuard__factory"; export { ReentrancyGuardUpgradeable__factory } from "./factories/ReentrancyGuardUpgradeable__factory"; +export type { INotSupportedMethods } from "./Revert.sol/INotSupportedMethods"; +export { INotSupportedMethods__factory } from "./factories/Revert.sol/INotSupportedMethods__factory"; export type { Revertable } from "./Revert.sol/Revertable"; export { Revertable__factory } from "./factories/Revert.sol/Revertable__factory"; export { SafeERC20__factory } from "./factories/SafeERC20__factory"; @@ -236,7 +234,9 @@ export type { ZetaNonEthInterface } from "./Zeta.non-eth.sol/ZetaNonEthInterface export { ZetaNonEthInterface__factory } from "./factories/Zeta.non-eth.sol/ZetaNonEthInterface__factory"; export { ZetaConnectorBase__factory } from "./factories/ZetaConnectorBase__factory"; export { ZetaConnectorNative__factory } from "./factories/ZetaConnectorNative__factory"; +export { ZetaConnectorNativeUpgradeTest__factory } from "./factories/ZetaConnectorNativeUpgradeTest__factory"; export { ZetaConnectorNonNative__factory } from "./factories/ZetaConnectorNonNative__factory"; +export { ZetaConnectorNonNativeUpgradeTest__factory } from "./factories/ZetaConnectorNonNativeUpgradeTest__factory"; export type { ZRC20 } from "./ZRC20.sol/ZRC20"; export { ZRC20__factory } from "./factories/ZRC20.sol/ZRC20__factory"; export type { ZRC20Errors } from "./ZRC20.sol/ZRC20Errors"; From 7a88fc6343dbd7132eeb7217804629897d0c23c9 Mon Sep 17 00:00:00 2001 From: skosito Date: Tue, 15 Oct 2024 20:06:25 +0200 Subject: [PATCH 12/16] backport oncrosschain call rename --- v2/contracts/zevm/GatewayZEVM.sol | 14 ++-- v2/contracts/zevm/interfaces/IGatewayZEVM.sol | 6 +- .../zevm/interfaces/UniversalContract.sol | 16 ++-- .../gatewayevmzevmtest.go | 2 +- v2/pkg/gatewayzevm.sol/gatewayzevm.go | 36 ++++----- .../gatewayzevminboundtest.go | 2 +- .../gatewayzevmoutboundtest.go | 2 +- .../gatewayzevmupgradetest.go | 36 ++++----- v2/pkg/igatewayzevm.sol/igatewayzevm.go | 34 ++++---- v2/pkg/senderzevm.sol/senderzevm.go | 2 +- v2/pkg/systemcontract.sol/systemcontract.go | 2 +- .../systemcontractmock.go | 2 +- .../testuniversalcontract.go | 42 +++++----- .../universalcontract.go | 40 +++++----- v2/pkg/zrc20.t.sol/zrc20test.go | 2 +- v2/test/GatewayZEVM.t.sol | 80 +++++++++---------- v2/test/utils/TestUniversalContract.sol | 4 +- .../utils/upgrades/GatewayZEVMUpgradeTest.sol | 44 ++++++---- v2/types/GatewayZEVM.ts | 34 +++++--- v2/types/GatewayZEVMUpgradeTest.ts | 34 +++++--- v2/types/IGatewayZEVM.sol/IGatewayZEVM.ts | 34 +++++--- v2/types/TestUniversalContract.ts | 25 +++--- .../UniversalContract.ts | 25 +++--- .../GatewayZEVMUpgradeTest__factory.ts | 18 ++++- v2/types/factories/GatewayZEVM__factory.ts | 8 +- .../IGatewayZEVM.sol/IGatewayZEVM__factory.ts | 6 +- v2/types/factories/SenderZEVM__factory.ts | 2 +- .../SystemContract__factory.ts | 2 +- .../SystemContractMock__factory.ts | 2 +- .../TestUniversalContract__factory.ts | 6 +- .../UniversalContract__factory.ts | 4 +- 31 files changed, 307 insertions(+), 259 deletions(-) diff --git a/v2/contracts/zevm/GatewayZEVM.sol b/v2/contracts/zevm/GatewayZEVM.sol index 787d02749..2d2bd535e 100644 --- a/v2/contracts/zevm/GatewayZEVM.sol +++ b/v2/contracts/zevm/GatewayZEVM.sol @@ -6,7 +6,7 @@ import { IGatewayZEVM } from "./interfaces/IGatewayZEVM.sol"; import { INotSupportedMethods, RevertContext, RevertOptions } from "../../contracts/Revert.sol"; import "./interfaces/IWZETA.sol"; import { IZRC20 } from "./interfaces/IZRC20.sol"; -import { UniversalContract, zContext } from "./interfaces/UniversalContract.sol"; +import { MessageContext, UniversalContract } from "./interfaces/UniversalContract.sol"; import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; @@ -303,7 +303,7 @@ contract GatewayZEVM is /// @param target The target contract to call. /// @param message The calldata to pass to the contract call. function execute( - zContext calldata context, + MessageContext calldata context, address zrc20, uint256 amount, address target, @@ -315,7 +315,7 @@ contract GatewayZEVM is { if (zrc20 == address(0) || target == address(0)) revert ZeroAddress(); - UniversalContract(target).onCrossChainCall(context, zrc20, amount, message); + UniversalContract(target).onCall(context, zrc20, amount, message); } /// @notice Deposit foreign coins into ZRC20 and call a user-specified contract on ZEVM. @@ -325,7 +325,7 @@ contract GatewayZEVM is /// @param target The target contract to call. /// @param message The calldata to pass to the contract call. function depositAndCall( - zContext calldata context, + MessageContext calldata context, address zrc20, uint256 amount, address target, @@ -340,7 +340,7 @@ contract GatewayZEVM is if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); if (!IZRC20(zrc20).deposit(target, amount)) revert ZRC20DepositFailed(); - UniversalContract(target).onCrossChainCall(context, zrc20, amount, message); + UniversalContract(target).onCall(context, zrc20, amount, message); } /// @notice Deposit ZETA and call a user-specified contract on ZEVM. @@ -349,7 +349,7 @@ contract GatewayZEVM is /// @param target The target contract to call. /// @param message The calldata to pass to the contract call. function depositAndCall( - zContext calldata context, + MessageContext calldata context, uint256 amount, address target, bytes calldata message @@ -363,7 +363,7 @@ contract GatewayZEVM is if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); _transferZETA(amount, target); - UniversalContract(target).onCrossChainCall(context, zetaToken, amount, message); + UniversalContract(target).onCall(context, zetaToken, amount, message); } /// @notice Revert a user-specified contract on ZEVM. diff --git a/v2/contracts/zevm/interfaces/IGatewayZEVM.sol b/v2/contracts/zevm/interfaces/IGatewayZEVM.sol index b9d8b2ee3..ff4fc7d3c 100644 --- a/v2/contracts/zevm/interfaces/IGatewayZEVM.sol +++ b/v2/contracts/zevm/interfaces/IGatewayZEVM.sol @@ -180,7 +180,7 @@ interface IGatewayZEVM is IGatewayZEVMErrors, IGatewayZEVMEvents { /// @param target The target contract to call. /// @param message The calldata to pass to the contract call. function execute( - zContext calldata context, + MessageContext calldata context, address zrc20, uint256 amount, address target, @@ -195,7 +195,7 @@ interface IGatewayZEVM is IGatewayZEVMErrors, IGatewayZEVMEvents { /// @param target The target contract to call. /// @param message The calldata to pass to the contract call. function depositAndCall( - zContext calldata context, + MessageContext calldata context, address zrc20, uint256 amount, address target, @@ -209,7 +209,7 @@ interface IGatewayZEVM is IGatewayZEVMErrors, IGatewayZEVMEvents { /// @param target The target contract to call. /// @param message The calldata to pass to the contract call. function depositAndCall( - zContext calldata context, + MessageContext calldata context, uint256 amount, address target, bytes calldata message diff --git a/v2/contracts/zevm/interfaces/UniversalContract.sol b/v2/contracts/zevm/interfaces/UniversalContract.sol index d539516fc..a8668bc98 100644 --- a/v2/contracts/zevm/interfaces/UniversalContract.sol +++ b/v2/contracts/zevm/interfaces/UniversalContract.sol @@ -3,6 +3,8 @@ pragma solidity 0.8.26; import { RevertContext } from "../../../contracts/Revert.sol"; +/// @custom:deprecated should be removed once v2 SystemContract is not used anymore. +/// MessageContext should be used struct zContext { bytes origin; address sender; @@ -21,14 +23,14 @@ interface zContract { external; } +struct MessageContext { + bytes origin; + address sender; + uint256 chainID; +} + interface UniversalContract { - function onCrossChainCall( - zContext calldata context, - address zrc20, - uint256 amount, - bytes calldata message - ) - external; + function onCall(MessageContext calldata context, address zrc20, uint256 amount, bytes calldata message) external; function onRevert(RevertContext calldata revertContext) external; } diff --git a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go index a01f91d3d..980216b71 100644 --- a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go +++ b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go @@ -66,7 +66,7 @@ type StdInvariantFuzzSelector struct { // GatewayEVMZEVMTestMetaData contains all meta data concerning the GatewayEVMZEVMTest contract. var GatewayEVMZEVMTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e82a8061003c6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b6101326112bf565b60405161013f9190617b70565b60405180910390f35b610150611321565b60405161013f9190617c0c565b610132611463565b6101326114c3565b610128611523565b61017d611da7565b60405161013f9190617d72565b610128611f29565b61019a612761565b60405161013f9190617e10565b6101af612831565b60405161013f9190617e87565b61012861292c565b6101af612f2d565b61019a613028565b6101dc6130f8565b604051901515815260200161013f565b6101286131cc565b610132613905565b601f546101dc9060ff1681565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780548216615678179055602d805490911661432117905560405161026790617a76565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617a76565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190851660248201526044810193909352921660648201526000916104a7916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613965565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c000000000000000000000000000000006020820152602754602554925193909504841660248401529383166044830152909116606482015291925061054a9160840161044a565b602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091178255604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c00000000000093810193909352601f546023546027546025549351610100909304851660248401529084166044830152831660648201529116608482015291925061064e9160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e00000000000000000000000000000000000000000000000000000000179052613965565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179091556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b5050601f546020546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b15801561080957600080fd5b505af115801561081d573d6000803e3d6000fd5b5050601f546021546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b15801561088857600080fd5b505af115801561089c573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108fe57600080fd5b505af1158015610912573d6000803e3d6000fd5b50506022546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561098157600080fd5b505af1158015610995573d6000803e3d6000fd5b50506022546020546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af1158015610a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2d9190617f1e565b50604051610a3a90617a83565b604051809103906000f080158015610a56573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316178155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602354602d5492519085169381019390935292166044820152610b3c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613965565b602880546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602980549092168117909155604051610b8d90617a90565b6001600160a01b039091168152602001604051809103906000f080158015610bb9573d6000803e3d6000fd5b50602a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c6e57600080fd5b505af1158015610c82573d6000803e3d6000fd5b505050506000806000604051610c9790617a9d565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610cd3573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602954604051601293600193600093849391921690610d2990617aaa565b610d3896959493929190617f40565b604051809103906000f080158015610d54573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602b546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610deb57600080fd5b505af1158015610dff573d6000803e3d6000fd5b5050602b546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b5050602c54602d546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f159190617f1e565b50602c54602a546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faa9190617f1e565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561100957600080fd5b505af115801561101d573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561109357600080fd5b505af11580156110a7573d6000803e3d6000fd5b5050602c546029546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af115801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190617f1e565b506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506040805160a0810182526103218082526000602080840182815284860193845285519182019095528181526060840181905260808401919091528251602e80549551151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009096166001600160a01b03928316179590951785559151602f8054919093167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179091559093509091506030906112ad9082618100565b50608082015181600301559050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561131757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112f9575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561145a57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114435783829060005260206000200180546113b690618064565b80601f01602080910402602001604051908101604052809291908181526020018280546113e290618064565b801561142f5780601f106114045761010080835404028352916020019161142f565b820191906000526020600020905b81548152906001019060200180831161141257829003601f168201915b505050505081526020019060010190611397565b505050508152505081526020019060010190611345565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602c54602a805493517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03948516600482015292939092600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa1580156115cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f391906181bf565b6040519091506000907fe04d4f970000000000000000000000000000000000000000000000000000000090611630908890889088906024016181d8565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260245490519193506000926116c9926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602c54611700926207a120916001600160a01b0316908690600190602e906024016182f1565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f048ae42c0000000000000000000000000000000000000000000000000000000017905260295490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916117bd916001600160a01b039190911690600090869060040161835a565b600060405180830381600087803b1580156117d757600080fd5b505af11580156117eb573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561186157600080fd5b505af1158015611875573d6000803e3d6000fd5b5050602a5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261190f926207a120916001600160a01b0316908d908d908d90600401618382565b600060405180830381600087803b15801561192957600080fd5b505af115801561193d573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b1580156119be57600080fd5b505af11580156119d2573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a6557600080fd5b505af1158015611a79573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031685898989604051611ac99594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b6357600080fd5b505af1158015611b77573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611bbc9087908690618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c3657600080fd5b505af1158015611c4a573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd93508892611ca39216908790600401618431565b60006040518083038185885af1158015611cc1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611cea919081019061850c565b50602c54602a546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7991906181bf565b9050611d9d816001611d8e6207a12088618570565b611d989190618570565b613984565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561145a5783829060005260206000209060020201604051806040016040529081600082018054611dfe90618064565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2a90618064565b8015611e775780601f10611e4c57610100808354040283529160200191611e77565b820191906000526020600020905b815481529060010190602001808311611e5a57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611f1157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611ebe5790505b50505050508152505081526020019060010190611dcb565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611fa5908790879087906024016181d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000949094169390931790925260295491517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039093166084820152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561209757600080fd5b505af11580156120ab573d6000803e3d6000fd5b5050602d5460245460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f19818403018152828252602c547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216916207a1209188918491634d8943bb916004808201926020929091908290030181865afa158015612180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a491906181bf565b896001602e6040516121bd989796959493929190618583565b60405180910390a3602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561223757600080fd5b505af115801561224b573d6000803e3d6000fd5b505060295460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063048ae42c915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526122e7926207a120916001600160a01b0316908890600190602e906004016185e5565b600060405180830381600087803b15801561230157600080fd5b505af1158015612315573d6000803e3d6000fd5b5050602c54602d546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a591906181bf565b90506123b881611d98846207a120618570565b601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561243557600080fd5b505af1158015612449573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156124dc57600080fd5b505af11580156124f0573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b0316858989896040516125409594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156125da57600080fd5b505af11580156125ee573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506126339087908790618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156126ad57600080fd5b505af11580156126c1573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd9350889261271a9216908890600401618431565b60006040518083038185885af1158015612738573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611d9d919081019061850c565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561145a5783829060005260206000200180546127a490618064565b80601f01602080910402602001604051908101604052809291908181526020018280546127d090618064565b801561281d5780601f106127f25761010080835404028352916020019161281d565b820191906000526020600020905b81548152906001019060200180831161280057829003601f168201915b505050505081526020019060010190612785565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561145a5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561291457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116128c15790505b50505050508152505081526020019060010190612855565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f9700000000000000000000000000000000000000000000000000000000906129a8908790879087906024016181d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602d5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a7b57600080fd5b505af1158015612a8f573d6000803e3d6000fd5b50506029546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612b2157600080fd5b505af1158015612b35573d6000803e3d6000fd5b5050602c54602d5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf9060340160408051601f1981840301815290829052612bb5918690600190602e90618639565b60405180910390a36029546024546040805160609290921b6bffffffffffffffffffffffff19166020830152805180830360140181526034830191829052602c547f1cb5ea75000000000000000000000000000000000000000000000000000000009092526001600160a01b0393841693631cb5ea7593612c459391909116908690600190602e90603801618678565b600060405180830381600087803b158015612c5f57600080fd5b505af1158015612c73573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612cf457600080fd5b505af1158015612d08573d6000803e3d6000fd5b5050601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612d9e57600080fd5b505af1158015612db2573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612df79085908590618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e7157600080fd5b505af1158015612e85573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd93508692612ede9216908690600401618431565b60006040518083038185885af1158015612efc573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612f25919081019061850c565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561145a5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561301057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612fbd5790505b50505050508152505081526020019060010190612f51565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561145a57838290600052602060002001805461306b90618064565b80601f016020809104026020016040519081016040528092919081815260200182805461309790618064565b80156130e45780601f106130b9576101008083540402835291602001916130e4565b820191906000526020600020905b8154815290600101906020018083116130c757829003601f168201915b50505050508152602001906001019061304c565b60085460009060ff1615613110575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156131a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c591906181bf565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090613248908790879087906024016181d8565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260245490519193506000926132e1926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602c54613315926001600160a01b03909116908590600190602e906024016186d2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1cb5ea750000000000000000000000000000000000000000000000000000000017905260295490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916133d2916001600160a01b039190911690600090869060040161835a565b600060405180830381600087803b1580156133ec57600080fd5b505af1158015613400573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561347657600080fd5b505af115801561348a573d6000803e3d6000fd5b5050602a5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637a34d8bb915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352613521926001600160a01b03909116908b908b908b90600401618723565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b1580156135d057600080fd5b505af11580156135e4573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561367757600080fd5b505af115801561368b573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b0316848888886040516136db9594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561377557600080fd5b505af1158015613789573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506137ce9086908690618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561384857600080fd5b505af115801561385c573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd935087926138b59216908790600401618431565b60006040518083038185885af11580156138d3573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526138fc919081019061850c565b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b600061396f617ab7565b61397a848483613a03565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156139ef57600080fd5b505afa158015612f25573d6000803e3d6000fd5b600080613a108584613a7e565b9050613a736040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613a5e929190618431565b60405160208183030381529060405285613a8a565b9150505b9392505050565b6000613a778383613ab8565b60c08101515160009015613aae57613aa784848460c00151613ad3565b9050613a77565b613aa78484613c79565b6000613ac48383613d64565b613a7783836020015184613a8a565b600080613ade613d74565b90506000613aec8683613e47565b90506000613b0382606001518360200151856142ed565b90506000613b13838389896144ff565b90506000613b208261537c565b602081015181519192509060030b15613b9357898260400151604051602001613b4a929190618771565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b8a916004016187f2565b60405180910390fd5b6000613bd66040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161554b565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613c299084906004016187f2565b602060405180830381865afa158015613c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6a9190618805565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613cce9087906004016187f2565b600060405180830381865afa158015613ceb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d13919081019061850c565b90506000613d418285604051602001613d2d92919061882e565b60405160208183030381529060405261574b565b90506001600160a01b03811661397a578484604051602001613b4a92919061885d565b613d708282600061575e565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613dfb908490600401618908565b600060405180830381865afa158015613e18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e40919081019061894f565b9250505090565b613e796040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613ec46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613ecd85615861565b60208201526000613edd86615c46565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613f1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f47919081019061894f565b86838560200151604051602001613f619493929190618998565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613fb99085906004016187f2565b600060405180830381865afa158015613fd6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ffe919081019061894f565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614046908490600401618a9c565b602060405180830381865afa158015614063573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140879190617f1e565b61409c5781604051602001613b4a9190618aee565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906140e1908490600401618b80565b600060405180830381865afa1580156140fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614126919081019061894f565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061416d908490600401618bd2565b602060405180830381865afa15801561418a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ae9190617f1e565b15614243576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906141f8908490600401618bd2565b600060405180830381865afa158015614215573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261423d919081019061894f565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016142689190618c24565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614294929190618c90565b600060405180830381865afa1580156142b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142d9919081019061894f565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816143095790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061436957614369618cb5565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106143bd576143bd618cb5565b6020026020010181905250846040516020016143d99190618ce4565b604051602081830303815290604052816002815181106143fb576143fb618cb5565b6020026020010181905250826040516020016144179190618d50565b6040516020818303038152906040528160038151811061443957614439618cb5565b6020026020010181905250600061444f8261537c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144e09060408051808201825260008082526020918201528151808301909252845182528085019082015290615ec9565b6144f55785604051602001613b4a9190618d91565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561454f565b511590565b6146c35782602001511561460b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b8a565b8260c00151156146c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b8a565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816146dc57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061473790618e22565b935060ff168151811061474c5761474c618cb5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161479d9190618e41565b6040516020818303038152906040528282806147b890618e22565b935060ff16815181106147cd576147cd618cb5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061481a90618e22565b935060ff168151811061482f5761482f618cb5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061487c90618e22565b935060ff168151811061489157614891618cb5565b602002602001018190525087602001518282806148ad90618e22565b935060ff16815181106148c2576148c2618cb5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061490f90618e22565b935060ff168151811061492457614924618cb5565b60209081029190910101528751828261493c81618e22565b935060ff168151811061495157614951618cb5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061499e90618e22565b935060ff16815181106149b3576149b3618cb5565b60200260200101819052506149c746615f2a565b82826149d281618e22565b935060ff16815181106149e7576149e7618cb5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614a3490618e22565b935060ff1681518110614a4957614a49618cb5565b602002602001018190525086828280614a6190618e22565b935060ff1681518110614a7657614a76618cb5565b6020908102919091010152855115614b9d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614ac781618e22565b935060ff1681518110614adc57614adc618cb5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614b2c9089906004016187f2565b600060405180830381865afa158015614b49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b71919081019061894f565b8282614b7c81618e22565b935060ff1681518110614b9157614b91618cb5565b60200260200101819052505b846020015115614c6d5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614be681618e22565b935060ff1681518110614bfb57614bfb618cb5565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614c4890618e22565b935060ff1681518110614c5d57614c5d618cb5565b6020026020010181905250614e34565b614ca561454a8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614d385760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614ce881618e22565b935060ff1681518110614cfd57614cfd618cb5565b60200260200101819052508460a00151604051602001614d1d9190618ce4565b604051602081830303815290604052828280614c4890618e22565b8460c00151158015614d7b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d7990511590565b155b15614e345760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614dbf81618e22565b935060ff1681518110614dd457614dd4618cb5565b6020026020010181905250614de888615fca565b604051602001614df89190618ce4565b604051602081830303815290604052828280614e1390618e22565b935060ff1681518110614e2857614e28618cb5565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e6890511590565b614efd5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614eab81618e22565b935060ff1681518110614ec057614ec0618cb5565b60200260200101819052508460400151828280614edc90618e22565b935060ff1681518110614ef157614ef1618cb5565b60200260200101819052505b60608501511561501e5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614f4681618e22565b935060ff1681518110614f5b57614f5b618cb5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614fca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ff2919081019061894f565b8282614ffd81618e22565b935060ff168151811061501257615012618cb5565b60200260200101819052505b60e085015151156150c55760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261506881618e22565b935060ff168151811061507d5761507d618cb5565b60200260200101819052506150998560e0015160000151615f2a565b82826150a481618e22565b935060ff16815181106150b9576150b9618cb5565b60200260200101819052505b60e0850151602001511561516f5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261511281618e22565b935060ff168151811061512757615127618cb5565b60200260200101819052506151438560e0015160200151615f2a565b828261514e81618e22565b935060ff168151811061516357615163618cb5565b60200260200101819052505b60e085015160400151156152195760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826151bc81618e22565b935060ff16815181106151d1576151d1618cb5565b60200260200101819052506151ed8560e0015160400151615f2a565b82826151f881618e22565b935060ff168151811061520d5761520d618cb5565b60200260200101819052505b60e085015160600151156152c35760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261526681618e22565b935060ff168151811061527b5761527b618cb5565b60200260200101819052506152978560e0015160600151615f2a565b82826152a281618e22565b935060ff16815181106152b7576152b7618cb5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156152e1576152e1618035565b60405190808252806020026020018201604052801561531457816020015b60608152602001906001900390816152ff5790505b50905060005b8260ff168160ff16101561536d57838160ff168151811061533d5761533d618cb5565b6020026020010151828260ff168151811061535a5761535a618cb5565b602090810291909101015260010161531a565b5093505050505b949350505050565b6153a36040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161542991869101618eac565b600060405180830381865afa158015615446573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261546e919081019061894f565b9050600061547c8683616ab9565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016154ac9190617e10565b6000604051808303816000875af11580156154cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154f39190810190618ef3565b805190915060030b1580159061550c5750602081015151155b801561551b5750604081015151155b156144f5578160008151811061553357615533618cb5565b6020026020010151604051602001613b4a9190618fa9565b606060006155808560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155b79082905b90616c0e565b156157145760006156348261562e846156286155fa8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616c35565b90616c97565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615698908290616c0e565b1561570257604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526156ff905b8290616d1c565b90505b61570b81616d42565b92505050613a77565b821561572d578484604051602001613b4a929190619195565b5050604080516020810190915260008152613a77565b509392505050565b6000808251602084016000f09392505050565b8160a001511561576d57505050565b600061577a848484616dab565b905060006157878261537c565b602081015181519192509060030b1580156158235750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615823906040805180820182526000808252602091820152815180830190925284518252808501908201526155b1565b1561583057505050505050565b60408201515115615850578160400151604051602001613b4a919061923c565b80604051602001613b4a919061929a565b606060006158968360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506158fb905b8290615ec9565b1561596a57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a7790615965908390617346565b616d42565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159cc905b82906173d0565b600103615a9957604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a32906156f8565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a7790615965905b8390616d1c565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615af8906158f4565b15615c2f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b6090839061746a565b905060008160018351615b739190618570565b81518110615b8357615b83618cb5565b60200260200101519050615c26615965615bf96040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617346565b95945050505050565b82604051602001613b4a9190619305565b50919050565b60606000615c7b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615cdd906158f4565b15615ceb57613a7781616d42565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d4a906159c5565b600103615db457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a779061596590615a92565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e13906158f4565b15615c2f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e7b90839061746a565b9050600181511115615eb7578060028251615e969190618570565b81518110615ea657615ea6618cb5565b602002602001015192505050919050565b5082604051602001613b4a9190619305565b805182516000911115615ede5750600061397e565b81518351602085015160009291615ef4916193e3565b615efe9190618570565b905082602001518103615f1557600191505061397e565b82516020840151819020912014905092915050565b60606000615f378361750f565b600101905060008167ffffffffffffffff811115615f5757615f57618035565b6040519080825280601f01601f191660200182016040528015615f81576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f8b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616056905b82906175f1565b1561609657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160f59061604f565b1561613557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161949061604f565b156161d457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162339061604f565b806162985750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162989061604f565b156162d857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163379061604f565b8061639c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261639c9061604f565b156163dc57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261643b9061604f565b806164a05750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164a09061604f565b156164e057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653f9061604f565b806165a45750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165a49061604f565b156165e457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166439061604f565b1561668357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166e29061604f565b1561672257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167819061604f565b156167c157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168209061604f565b1561686057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168bf9061604f565b156168ff57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261695e9061604f565b806169c35750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169c39061604f565b15616a0357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a629061604f565b15616aa257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613b4a92906020016193f6565b60608060005b8451811015616b445781858281518110616adb57616adb618cb5565b6020026020010151604051602001616af492919061882e565b604051602081830303815290604052915060018551616b139190618570565b8114616b3c5781604051602001616b2a919061955f565b60405160208183030381529060405291505b600101616abf565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616b5d5790505090508381600081518110616b8857616b88618cb5565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616bdc57616bdc618cb5565b60200260200101819052508181600281518110616bfb57616bfb618cb5565b6020908102919091010152949350505050565b6020808301518351835192840151600093616c2c9291849190617605565b14159392505050565b60408051808201909152600080825260208201526000616c678460000151856020015185600001518660200151617716565b9050836020015181616c799190618570565b84518590616c88908390618570565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616cbc57508161397e565b6020808301519084015160019114616ce35750815160208481015190840151829020919020145b8015616d1457825184518590616cfa908390618570565b9052508251602085018051616d109083906193e3565b9052505b509192915050565b6040805180820190915260008082526020820152616d3b838383617836565b5092915050565b60606000826000015167ffffffffffffffff811115616d6357616d63618035565b6040519080825280601f01601f191660200182016040528015616d8d576020820181803683370190505b5090506000602082019050616d3b81856020015186600001516178e1565b60606000616db7613d74565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616dd457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616e2f90618e22565b935060ff1681518110616e4457616e44618cb5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616e9591906195a0565b604051602081830303815290604052828280616eb090618e22565b935060ff1681518110616ec557616ec5618cb5565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616f1290618e22565b935060ff1681518110616f2757616f27618cb5565b602002602001018190525082604051602001616f439190618d50565b604051602081830303815290604052828280616f5e90618e22565b935060ff1681518110616f7357616f73618cb5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616fc090618e22565b935060ff1681518110616fd557616fd5618cb5565b6020026020010181905250616fea878461795b565b8282616ff581618e22565b935060ff168151811061700a5761700a618cb5565b6020908102919091010152855151156170b65760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261705c81618e22565b935060ff168151811061707157617071618cb5565b602002602001018190525061708a86600001518461795b565b828261709581618e22565b935060ff16815181106170aa576170aa618cb5565b60200260200101819052505b8560800151156171245760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826170ff81618e22565b935060ff168151811061711457617114618cb5565b602002602001018190525061718a565b841561718a5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261716981618e22565b935060ff168151811061717e5761717e618cb5565b60200260200101819052505b604086015151156172265760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171d481618e22565b935060ff16815181106171e9576171e9618cb5565b6020026020010181905250856040015182828061720590618e22565b935060ff168151811061721a5761721a618cb5565b60200260200101819052505b8560600151156172905760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261726f81618e22565b935060ff168151811061728457617284618cb5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156172ae576172ae618035565b6040519080825280602002602001820160405280156172e157816020015b60608152602001906001900390816172cc5790505b50905060005b8260ff168160ff16101561733a57838160ff168151811061730a5761730a618cb5565b6020026020010151828260ff168151811061732757617327618cb5565b60209081029190910101526001016172e7565b50979650505050505050565b604080518082019091526000808252602082015281518351101561736b57508161397e565b81518351602085015160009291617381916193e3565b61738b9190618570565b602084015190915060019082146173ac575082516020840151819020908220145b80156173c7578351855186906173c3908390618570565b9052505b50929392505050565b60008082600001516173f48560000151866020015186600001518760200151617716565b6173fe91906193e3565b90505b8351602085015161741291906193e3565b8111616d3b5781617422816195e5565b925050826000015161745985602001518361743d9190618570565b86516174499190618570565b8386600001518760200151617716565b61746391906193e3565b9050617401565b6060600061747884846173d0565b6174839060016193e3565b67ffffffffffffffff81111561749b5761749b618035565b6040519080825280602002602001820160405280156174ce57816020015b60608152602001906001900390816174b95790505b50905060005b8151811015615743576174ea6159658686616d1c565b8282815181106174fc576174fc618cb5565b60209081029190910101526001016174d4565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617558577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617584576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106175a257662386f26fc10000830492506010015b6305f5e10083106175ba576305f5e100830492506008015b61271083106175ce57612710830492506004015b606483106175e0576064830492506002015b600a831061397e5760010192915050565b60006175fd838361799b565b159392505050565b60008085841161770c57602084116176b8576000841561765057600161762c866020618570565b6176379060086195ff565b6176429060026196fd565b61764c9190618570565b1990505b835181168561765f89896193e3565b6176699190618570565b805190935082165b8181146176a35787841161768b5787945050505050615374565b8361769581619709565b945050828451169050617671565b6176ad87856193e3565b945050505050615374565b8383206176c58588618570565b6176cf90876193e3565b91505b85821061770a578482208082036176f7576176ed86846193e3565b9350505050615374565b617702600184618570565b9250506176d2565b505b5092949350505050565b6000838186851161782157602085116177d0576000851561776257600161773e876020618570565b6177499060086195ff565b6177549060026196fd565b61775e9190618570565b1990505b845181166000876177738b8b6193e3565b61777d9190618570565b855190915083165b8281146177c2578186106177aa5761779d8b8b6193e3565b9650505050505050615374565b856177b4816195e5565b965050838651169050617785565b859650505050505050615374565b508383206000905b6177e28689618570565b821161781f578583208082036177fe5783945050505050615374565b6178096001856193e3565b9350508180617817906195e5565b9250506177d8565b505b61782b87876193e3565b979650505050505050565b604080518082019091526000808252602082015260006178688560000151866020015186600001518760200151617716565b6020808701805191860191909152519091506178849082618570565b83528451602086015161789791906193e3565b81036178a657600085526178d8565b835183516178b491906193e3565b855186906178c3908390618570565b90525083516178d290826193e3565b60208601525b50909392505050565b6020811061791957815183526178f86020846193e3565b92506179056020836193e3565b9150617912602082618570565b90506178e1565b600019811561794857600161792f836020618570565b61793b906101006196fd565b6179459190618570565b90505b9151835183169219169190911790915250565b606060006179698484613e47565b805160208083015160405193945061798393909101619720565b60405160208183030381529060405291505092915050565b81518151600091908111156179ae575081515b6020808501519084015160005b83811015617a675782518251808214617a37576000196020871015617a16576001846179e8896020618570565b6179f291906193e3565b6179fd9060086195ff565b617a089060026196fd565b617a129190618570565b1990505b8181168382168181039114617a3457975061397e9650505050505050565b50505b617a426020866193e3565b9450617a4f6020856193e3565b93505050602081617a6091906193e3565b90506179bb565b50845186516144f59190619778565b610c9f8061979983390190565b610de08061a43883390190565b610a2c8061b21883390190565b610b3f8061bc4483390190565b6120728061c78383390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617afa617aff565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617afa6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617bb15783516001600160a01b0316835260209384019390920191600101617b8a565b509095945050505050565b60005b83811015617bd7578181015183820152602001617bbf565b50506000910152565b60008151808452617bf8816020860160208601617bbc565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617cee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617cd8848651617be0565b6020958601959094509290920191600101617c9e565b509197505050602094850194929092019150600101617c34565b50929695505050505050565b600081518084526020840193506020830160005b82811015617d685781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617d28565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617dde6040880182617be0565b9050602082015191508681036020880152617df98183617d14565b965050506020938401939190910190600101617d9a565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e72858351617be0565b94506020938401939190910190600101617e38565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617f086040870182617d14565b9550506020938401939190910190600101617eaf565b600060208284031215617f3057600080fd5b81518015158114613a7757600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617ffa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261801b60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061807857607f821691505b602082108103615c40577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f8211156180fb57806000526020600020601f840160051c810160208510156180d85750805b601f840160051c820191505b818110156180f857600081556001016180e4565b50505b505050565b815167ffffffffffffffff81111561811a5761811a618035565b61812e816181288454618064565b846180b1565b6020601f821160018114618162576000831561814a5750848201515b600019600385901b1c1916600184901b1784556180f8565b600084815260208120601f198516915b828110156181925787850151825560209485019460019092019101618172565b50848210156181b05786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156181d157600080fd5b5051919050565b6060815260006181eb6060830186617be0565b602083019490945250901515604090910152919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a060608501526000815461824c81618064565b8060a0880152600182166000811461826b57600181146182a5576182d9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b89010193506182d9565b84600052602060002060005b838110156182d05781548a820160c001526001909101906020016182b1565b890160c0019450505b50505060038401546080860152809250505092915050565b60c08152600061830460c0830189617be0565b62ffffff881660208401526001600160a01b038716604084015282810360608401526183308187617be0565b905060ff8516608084015282810360a084015261834d8185618202565b9998505050505050505050565b6001600160a01b0384168152826020820152606060408201526000615c266060830184617be0565b60c08152600061839560c0830189617be0565b8760208401526001600160a01b038716604084015282810360608401526183bc8187617be0565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a0604082015260006183ff60a0830186617be0565b6060830194909452509015156080909101529392505050565b8281526040602082015260006153746040830184617be0565b6001600160a01b03831681526040602082015260006153746040830184617be0565b6040516060810167ffffffffffffffff8111828210171561847657618476618035565b60405290565b60008067ffffffffffffffff84111561849757618497618035565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156184c6576184c6618035565b6040528381529050808284018510156184de57600080fd5b615743846020830185617bbc565b600082601f8301126184fd57600080fd5b613a778383516020850161847c565b60006020828403121561851e57600080fd5b815167ffffffffffffffff81111561853557600080fd5b61397a848285016184ec565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561397e5761397e618541565b6101008152600061859861010083018b617be0565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a08401526185cb8187617be0565b90508460c084015282810360e0840152613c6a8185618202565b60c0815260006185f860c0830189617be0565b8760208401526001600160a01b0387166040840152828103606084015261861f8187617be0565b905084608084015282810360a084015261834d8185618202565b60808152600061864c6080830187617be0565b828103602084015261865e8187617be0565b9050846040840152828103606084015261782b8185618202565b60a08152600061868b60a0830188617be0565b6001600160a01b038716602084015282810360408401526186ac8187617be0565b905084606084015282810360808401526186c68185618202565b98975050505050505050565b60a0815260006186e560a0830188617be0565b6001600160a01b038716602084015282810360408401526187068187617be0565b905060ff8516606084015282810360808401526186c68185618202565b60a08152600061873660a0830188617be0565b6001600160a01b038716602084015282810360408401526187578187617be0565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516187a981601a850160208801617bbc565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516187e681601c840160208801617bbc565b01601c01949350505050565b602081526000613a776020830184617be0565b60006020828403121561881757600080fd5b81516001600160a01b0381168114613a7757600080fd5b60008351618840818460208801617bbc565b835190830190618854818360208801617bbc565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161889581601a850160208801617bbc565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516188d2816033840160208801617bbc565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a776080830184617be0565b60006020828403121561896157600080fd5b815167ffffffffffffffff81111561897857600080fd5b8201601f8101841361898957600080fd5b61397a8482516020840161847c565b600085516189aa818460208a01617bbc565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516189e4816001840160208a01617bbc565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618a22816002840160208901617bbc565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618a64816002840160208801617bbc565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618aaf6040830184617be0565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618b2681601f850160208701617bbc565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618b936040830184617be0565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618be56040830184617be0565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618c5c816014850160208701617bbc565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618ca36040830185617be0565b8281036020840152613a738185617be0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618d1c816001850160208701617bbc565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618d62818460208701617bbc565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618e1581604b850160208701617bbc565b91909101604b0192915050565b600060ff821660ff8103618e3857618e38618541565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618e9f816029850160208701617bbc565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a776080830184617be0565b600060208284031215618f0557600080fd5b815167ffffffffffffffff811115618f1c57600080fd5b820160608185031215618f2e57600080fd5b618f36618453565b81518060030b8114618f4757600080fd5b8152602082015167ffffffffffffffff811115618f6357600080fd5b618f6f868285016184ec565b602083015250604082015167ffffffffffffffff811115618f8f57600080fd5b618f9b868285016184ec565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619007816021850160208701617bbc565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516191f3816021850160208801617bbc565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161923081602e840160208801617bbc565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618e9f816029850160208701617bbc565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516192f8816022850160208701617bbc565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161933d81600e850160208701617bbc565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561397e5761397e618541565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161942e816018850160208801617bbc565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161946b81601c840160208801617bbc565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619571818460208701617bbc565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516195d881601c850160208701617bbc565b91909101601c0192915050565b600060001982036195f8576195f8618541565b5060010190565b808202811582820484141761397e5761397e618541565b6001815b60018411156196515780850481111561963557619635618541565b600184161561964357908102905b60019390931c92800261961a565b935093915050565b6000826196685750600161397e565b816196755750600061397e565b816001811461968b5760028114619695576196b1565b600191505061397e565b60ff8411156196a6576196a6618541565b50506001821b61397e565b5060208310610133831016604e8410600b84101617156196d4575081810a61397e565b6196e16000198484619616565b80600019048211156196f5576196f5618541565b029392505050565b6000613a778383619659565b60008161971857619718618541565b506000190190565b60008351619732818460208801617bbc565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161976c816001840160208801617bbc565b01600101949350505050565b8181036000831280158383131683831282161715616d3b57616d3b61854156fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610dbc806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c578063660b9de01461008c5780636ed70169146100ac57005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6100a73660046106f9565b6101aa565b3480156100b857600080fd5b5061006a6101e6565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e33826040516101db929190610a78565b60405180910390a150565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61022361036f565b6000610230600285610b57565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610c00565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c8a565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d4d565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d6a565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610ab683610694565b1660408201526000602083013567ffffffffffffffff8116808214610ada57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610b1657600080fd5b830160208101903567ffffffffffffffff811115610b3357600080fd5b803603821315610b4257600080fd5b606060808501526105b660a085018284610a2f565b600082610b8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610bad578181015183820152602001610b95565b50506000910152565b60008151808452610bce816020860160208601610b92565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c3560a0830186610bb6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c80578151865260209586019590910190600101610c62565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610d1d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610d08858351610bb6565b94506020938401939190910190600101610cce565b505050508281036040840152610d338186610c4e565b915050610d44606083018415159052565b95945050505050565b600060208284031215610d5f57600080fd5b81516104f681610840565b60008251610d7c818460208701610b92565b919091019291505056fea2646970667358221220084d92a79207d5024a4431b52d5d0038017908edb40aae1ce1d94a5ec3de914064736f6c634300081a00336080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220d7e1a9075911564d308c037a0af9765ff7f3977eee9652547da152cb6de1448964736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220cc406cf4b9f9cfbacfa9f32870eb254a68b539001bcca4f238577e817f73a2ab64736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220f2cd66c5095466094d1853cde0efc766bf28b466754455677816c60dd94be00564736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e82a8061003c6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b6101326112bf565b60405161013f9190617b70565b60405180910390f35b610150611321565b60405161013f9190617c0c565b610132611463565b6101326114c3565b610128611523565b61017d611da7565b60405161013f9190617d72565b610128611f29565b61019a612761565b60405161013f9190617e10565b6101af612831565b60405161013f9190617e87565b61012861292c565b6101af612f2d565b61019a613028565b6101dc6130f8565b604051901515815260200161013f565b6101286131cc565b610132613905565b601f546101dc9060ff1681565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780548216615678179055602d805490911661432117905560405161026790617a76565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617a76565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190851660248201526044810193909352921660648201526000916104a7916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613965565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c000000000000000000000000000000006020820152602754602554925193909504841660248401529383166044830152909116606482015291925061054a9160840161044a565b602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091178255604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c00000000000093810193909352601f546023546027546025549351610100909304851660248401529084166044830152831660648201529116608482015291925061064e9160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e00000000000000000000000000000000000000000000000000000000179052613965565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179091556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b5050601f546020546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b15801561080957600080fd5b505af115801561081d573d6000803e3d6000fd5b5050601f546021546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b15801561088857600080fd5b505af115801561089c573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108fe57600080fd5b505af1158015610912573d6000803e3d6000fd5b50506022546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561098157600080fd5b505af1158015610995573d6000803e3d6000fd5b50506022546020546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af1158015610a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2d9190617f1e565b50604051610a3a90617a83565b604051809103906000f080158015610a56573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316178155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602354602d5492519085169381019390935292166044820152610b3c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613965565b602880546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602980549092168117909155604051610b8d90617a90565b6001600160a01b039091168152602001604051809103906000f080158015610bb9573d6000803e3d6000fd5b50602a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c6e57600080fd5b505af1158015610c82573d6000803e3d6000fd5b505050506000806000604051610c9790617a9d565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610cd3573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602954604051601293600193600093849391921690610d2990617aaa565b610d3896959493929190617f40565b604051809103906000f080158015610d54573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602b546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610deb57600080fd5b505af1158015610dff573d6000803e3d6000fd5b5050602b546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b5050602c54602d546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f159190617f1e565b50602c54602a546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faa9190617f1e565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561100957600080fd5b505af115801561101d573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561109357600080fd5b505af11580156110a7573d6000803e3d6000fd5b5050602c546029546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af115801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190617f1e565b506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506040805160a0810182526103218082526000602080840182815284860193845285519182019095528181526060840181905260808401919091528251602e80549551151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009096166001600160a01b03928316179590951785559151602f8054919093167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179091559093509091506030906112ad9082618100565b50608082015181600301559050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561131757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112f9575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561145a57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114435783829060005260206000200180546113b690618064565b80601f01602080910402602001604051908101604052809291908181526020018280546113e290618064565b801561142f5780601f106114045761010080835404028352916020019161142f565b820191906000526020600020905b81548152906001019060200180831161141257829003601f168201915b505050505081526020019060010190611397565b505050508152505081526020019060010190611345565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602c54602a805493517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03948516600482015292939092600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa1580156115cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f391906181bf565b6040519091506000907fe04d4f970000000000000000000000000000000000000000000000000000000090611630908890889088906024016181d8565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260245490519193506000926116c9926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602c54611700926207a120916001600160a01b0316908690600190602e906024016182f1565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f048ae42c0000000000000000000000000000000000000000000000000000000017905260295490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916117bd916001600160a01b039190911690600090869060040161835a565b600060405180830381600087803b1580156117d757600080fd5b505af11580156117eb573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561186157600080fd5b505af1158015611875573d6000803e3d6000fd5b5050602a5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261190f926207a120916001600160a01b0316908d908d908d90600401618382565b600060405180830381600087803b15801561192957600080fd5b505af115801561193d573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b1580156119be57600080fd5b505af11580156119d2573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a6557600080fd5b505af1158015611a79573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031685898989604051611ac99594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b6357600080fd5b505af1158015611b77573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611bbc9087908690618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c3657600080fd5b505af1158015611c4a573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd93508892611ca39216908790600401618431565b60006040518083038185885af1158015611cc1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611cea919081019061850c565b50602c54602a546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7991906181bf565b9050611d9d816001611d8e6207a12088618570565b611d989190618570565b613984565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561145a5783829060005260206000209060020201604051806040016040529081600082018054611dfe90618064565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2a90618064565b8015611e775780601f10611e4c57610100808354040283529160200191611e77565b820191906000526020600020905b815481529060010190602001808311611e5a57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611f1157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611ebe5790505b50505050508152505081526020019060010190611dcb565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611fa5908790879087906024016181d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000949094169390931790925260295491517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039093166084820152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561209757600080fd5b505af11580156120ab573d6000803e3d6000fd5b5050602d5460245460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f19818403018152828252602c547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216916207a1209188918491634d8943bb916004808201926020929091908290030181865afa158015612180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a491906181bf565b896001602e6040516121bd989796959493929190618583565b60405180910390a3602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561223757600080fd5b505af115801561224b573d6000803e3d6000fd5b505060295460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063048ae42c915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526122e7926207a120916001600160a01b0316908890600190602e906004016185e5565b600060405180830381600087803b15801561230157600080fd5b505af1158015612315573d6000803e3d6000fd5b5050602c54602d546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a591906181bf565b90506123b881611d98846207a120618570565b601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561243557600080fd5b505af1158015612449573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156124dc57600080fd5b505af11580156124f0573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b0316858989896040516125409594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156125da57600080fd5b505af11580156125ee573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506126339087908790618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156126ad57600080fd5b505af11580156126c1573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd9350889261271a9216908890600401618431565b60006040518083038185885af1158015612738573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611d9d919081019061850c565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561145a5783829060005260206000200180546127a490618064565b80601f01602080910402602001604051908101604052809291908181526020018280546127d090618064565b801561281d5780601f106127f25761010080835404028352916020019161281d565b820191906000526020600020905b81548152906001019060200180831161280057829003601f168201915b505050505081526020019060010190612785565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561145a5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561291457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116128c15790505b50505050508152505081526020019060010190612855565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f9700000000000000000000000000000000000000000000000000000000906129a8908790879087906024016181d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602d5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a7b57600080fd5b505af1158015612a8f573d6000803e3d6000fd5b50506029546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612b2157600080fd5b505af1158015612b35573d6000803e3d6000fd5b5050602c54602d5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf9060340160408051601f1981840301815290829052612bb5918690600190602e90618639565b60405180910390a36029546024546040805160609290921b6bffffffffffffffffffffffff19166020830152805180830360140181526034830191829052602c547f1cb5ea75000000000000000000000000000000000000000000000000000000009092526001600160a01b0393841693631cb5ea7593612c459391909116908690600190602e90603801618678565b600060405180830381600087803b158015612c5f57600080fd5b505af1158015612c73573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612cf457600080fd5b505af1158015612d08573d6000803e3d6000fd5b5050601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612d9e57600080fd5b505af1158015612db2573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612df79085908590618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e7157600080fd5b505af1158015612e85573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd93508692612ede9216908690600401618431565b60006040518083038185885af1158015612efc573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612f25919081019061850c565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561145a5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561301057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612fbd5790505b50505050508152505081526020019060010190612f51565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561145a57838290600052602060002001805461306b90618064565b80601f016020809104026020016040519081016040528092919081815260200182805461309790618064565b80156130e45780601f106130b9576101008083540402835291602001916130e4565b820191906000526020600020905b8154815290600101906020018083116130c757829003601f168201915b50505050508152602001906001019061304c565b60085460009060ff1615613110575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156131a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c591906181bf565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090613248908790879087906024016181d8565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260245490519193506000926132e1926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602c54613315926001600160a01b03909116908590600190602e906024016186d2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1cb5ea750000000000000000000000000000000000000000000000000000000017905260295490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916133d2916001600160a01b039190911690600090869060040161835a565b600060405180830381600087803b1580156133ec57600080fd5b505af1158015613400573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561347657600080fd5b505af115801561348a573d6000803e3d6000fd5b5050602a5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637a34d8bb915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352613521926001600160a01b03909116908b908b908b90600401618723565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b1580156135d057600080fd5b505af11580156135e4573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561367757600080fd5b505af115801561368b573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b0316848888886040516136db9594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561377557600080fd5b505af1158015613789573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506137ce9086908690618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561384857600080fd5b505af115801561385c573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd935087926138b59216908790600401618431565b60006040518083038185885af11580156138d3573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526138fc919081019061850c565b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b600061396f617ab7565b61397a848483613a03565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156139ef57600080fd5b505afa158015612f25573d6000803e3d6000fd5b600080613a108584613a7e565b9050613a736040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613a5e929190618431565b60405160208183030381529060405285613a8a565b9150505b9392505050565b6000613a778383613ab8565b60c08101515160009015613aae57613aa784848460c00151613ad3565b9050613a77565b613aa78484613c79565b6000613ac48383613d64565b613a7783836020015184613a8a565b600080613ade613d74565b90506000613aec8683613e47565b90506000613b0382606001518360200151856142ed565b90506000613b13838389896144ff565b90506000613b208261537c565b602081015181519192509060030b15613b9357898260400151604051602001613b4a929190618771565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b8a916004016187f2565b60405180910390fd5b6000613bd66040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161554b565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613c299084906004016187f2565b602060405180830381865afa158015613c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6a9190618805565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613cce9087906004016187f2565b600060405180830381865afa158015613ceb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d13919081019061850c565b90506000613d418285604051602001613d2d92919061882e565b60405160208183030381529060405261574b565b90506001600160a01b03811661397a578484604051602001613b4a92919061885d565b613d708282600061575e565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613dfb908490600401618908565b600060405180830381865afa158015613e18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e40919081019061894f565b9250505090565b613e796040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613ec46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613ecd85615861565b60208201526000613edd86615c46565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613f1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f47919081019061894f565b86838560200151604051602001613f619493929190618998565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613fb99085906004016187f2565b600060405180830381865afa158015613fd6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ffe919081019061894f565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614046908490600401618a9c565b602060405180830381865afa158015614063573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140879190617f1e565b61409c5781604051602001613b4a9190618aee565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906140e1908490600401618b80565b600060405180830381865afa1580156140fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614126919081019061894f565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061416d908490600401618bd2565b602060405180830381865afa15801561418a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ae9190617f1e565b15614243576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906141f8908490600401618bd2565b600060405180830381865afa158015614215573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261423d919081019061894f565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016142689190618c24565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614294929190618c90565b600060405180830381865afa1580156142b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142d9919081019061894f565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816143095790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061436957614369618cb5565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106143bd576143bd618cb5565b6020026020010181905250846040516020016143d99190618ce4565b604051602081830303815290604052816002815181106143fb576143fb618cb5565b6020026020010181905250826040516020016144179190618d50565b6040516020818303038152906040528160038151811061443957614439618cb5565b6020026020010181905250600061444f8261537c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144e09060408051808201825260008082526020918201528151808301909252845182528085019082015290615ec9565b6144f55785604051602001613b4a9190618d91565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561454f565b511590565b6146c35782602001511561460b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b8a565b8260c00151156146c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b8a565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816146dc57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061473790618e22565b935060ff168151811061474c5761474c618cb5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161479d9190618e41565b6040516020818303038152906040528282806147b890618e22565b935060ff16815181106147cd576147cd618cb5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061481a90618e22565b935060ff168151811061482f5761482f618cb5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061487c90618e22565b935060ff168151811061489157614891618cb5565b602002602001018190525087602001518282806148ad90618e22565b935060ff16815181106148c2576148c2618cb5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061490f90618e22565b935060ff168151811061492457614924618cb5565b60209081029190910101528751828261493c81618e22565b935060ff168151811061495157614951618cb5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061499e90618e22565b935060ff16815181106149b3576149b3618cb5565b60200260200101819052506149c746615f2a565b82826149d281618e22565b935060ff16815181106149e7576149e7618cb5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614a3490618e22565b935060ff1681518110614a4957614a49618cb5565b602002602001018190525086828280614a6190618e22565b935060ff1681518110614a7657614a76618cb5565b6020908102919091010152855115614b9d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614ac781618e22565b935060ff1681518110614adc57614adc618cb5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614b2c9089906004016187f2565b600060405180830381865afa158015614b49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b71919081019061894f565b8282614b7c81618e22565b935060ff1681518110614b9157614b91618cb5565b60200260200101819052505b846020015115614c6d5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614be681618e22565b935060ff1681518110614bfb57614bfb618cb5565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614c4890618e22565b935060ff1681518110614c5d57614c5d618cb5565b6020026020010181905250614e34565b614ca561454a8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614d385760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614ce881618e22565b935060ff1681518110614cfd57614cfd618cb5565b60200260200101819052508460a00151604051602001614d1d9190618ce4565b604051602081830303815290604052828280614c4890618e22565b8460c00151158015614d7b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d7990511590565b155b15614e345760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614dbf81618e22565b935060ff1681518110614dd457614dd4618cb5565b6020026020010181905250614de888615fca565b604051602001614df89190618ce4565b604051602081830303815290604052828280614e1390618e22565b935060ff1681518110614e2857614e28618cb5565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e6890511590565b614efd5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614eab81618e22565b935060ff1681518110614ec057614ec0618cb5565b60200260200101819052508460400151828280614edc90618e22565b935060ff1681518110614ef157614ef1618cb5565b60200260200101819052505b60608501511561501e5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614f4681618e22565b935060ff1681518110614f5b57614f5b618cb5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614fca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ff2919081019061894f565b8282614ffd81618e22565b935060ff168151811061501257615012618cb5565b60200260200101819052505b60e085015151156150c55760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261506881618e22565b935060ff168151811061507d5761507d618cb5565b60200260200101819052506150998560e0015160000151615f2a565b82826150a481618e22565b935060ff16815181106150b9576150b9618cb5565b60200260200101819052505b60e0850151602001511561516f5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261511281618e22565b935060ff168151811061512757615127618cb5565b60200260200101819052506151438560e0015160200151615f2a565b828261514e81618e22565b935060ff168151811061516357615163618cb5565b60200260200101819052505b60e085015160400151156152195760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826151bc81618e22565b935060ff16815181106151d1576151d1618cb5565b60200260200101819052506151ed8560e0015160400151615f2a565b82826151f881618e22565b935060ff168151811061520d5761520d618cb5565b60200260200101819052505b60e085015160600151156152c35760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261526681618e22565b935060ff168151811061527b5761527b618cb5565b60200260200101819052506152978560e0015160600151615f2a565b82826152a281618e22565b935060ff16815181106152b7576152b7618cb5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156152e1576152e1618035565b60405190808252806020026020018201604052801561531457816020015b60608152602001906001900390816152ff5790505b50905060005b8260ff168160ff16101561536d57838160ff168151811061533d5761533d618cb5565b6020026020010151828260ff168151811061535a5761535a618cb5565b602090810291909101015260010161531a565b5093505050505b949350505050565b6153a36040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161542991869101618eac565b600060405180830381865afa158015615446573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261546e919081019061894f565b9050600061547c8683616ab9565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016154ac9190617e10565b6000604051808303816000875af11580156154cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154f39190810190618ef3565b805190915060030b1580159061550c5750602081015151155b801561551b5750604081015151155b156144f5578160008151811061553357615533618cb5565b6020026020010151604051602001613b4a9190618fa9565b606060006155808560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155b79082905b90616c0e565b156157145760006156348261562e846156286155fa8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616c35565b90616c97565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615698908290616c0e565b1561570257604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526156ff905b8290616d1c565b90505b61570b81616d42565b92505050613a77565b821561572d578484604051602001613b4a929190619195565b5050604080516020810190915260008152613a77565b509392505050565b6000808251602084016000f09392505050565b8160a001511561576d57505050565b600061577a848484616dab565b905060006157878261537c565b602081015181519192509060030b1580156158235750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615823906040805180820182526000808252602091820152815180830190925284518252808501908201526155b1565b1561583057505050505050565b60408201515115615850578160400151604051602001613b4a919061923c565b80604051602001613b4a919061929a565b606060006158968360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506158fb905b8290615ec9565b1561596a57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a7790615965908390617346565b616d42565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159cc905b82906173d0565b600103615a9957604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a32906156f8565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a7790615965905b8390616d1c565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615af8906158f4565b15615c2f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b6090839061746a565b905060008160018351615b739190618570565b81518110615b8357615b83618cb5565b60200260200101519050615c26615965615bf96040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617346565b95945050505050565b82604051602001613b4a9190619305565b50919050565b60606000615c7b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615cdd906158f4565b15615ceb57613a7781616d42565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d4a906159c5565b600103615db457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a779061596590615a92565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e13906158f4565b15615c2f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e7b90839061746a565b9050600181511115615eb7578060028251615e969190618570565b81518110615ea657615ea6618cb5565b602002602001015192505050919050565b5082604051602001613b4a9190619305565b805182516000911115615ede5750600061397e565b81518351602085015160009291615ef4916193e3565b615efe9190618570565b905082602001518103615f1557600191505061397e565b82516020840151819020912014905092915050565b60606000615f378361750f565b600101905060008167ffffffffffffffff811115615f5757615f57618035565b6040519080825280601f01601f191660200182016040528015615f81576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f8b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616056905b82906175f1565b1561609657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160f59061604f565b1561613557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161949061604f565b156161d457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162339061604f565b806162985750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162989061604f565b156162d857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163379061604f565b8061639c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261639c9061604f565b156163dc57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261643b9061604f565b806164a05750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164a09061604f565b156164e057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653f9061604f565b806165a45750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165a49061604f565b156165e457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166439061604f565b1561668357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166e29061604f565b1561672257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167819061604f565b156167c157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168209061604f565b1561686057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168bf9061604f565b156168ff57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261695e9061604f565b806169c35750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169c39061604f565b15616a0357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a629061604f565b15616aa257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613b4a92906020016193f6565b60608060005b8451811015616b445781858281518110616adb57616adb618cb5565b6020026020010151604051602001616af492919061882e565b604051602081830303815290604052915060018551616b139190618570565b8114616b3c5781604051602001616b2a919061955f565b60405160208183030381529060405291505b600101616abf565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616b5d5790505090508381600081518110616b8857616b88618cb5565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616bdc57616bdc618cb5565b60200260200101819052508181600281518110616bfb57616bfb618cb5565b6020908102919091010152949350505050565b6020808301518351835192840151600093616c2c9291849190617605565b14159392505050565b60408051808201909152600080825260208201526000616c678460000151856020015185600001518660200151617716565b9050836020015181616c799190618570565b84518590616c88908390618570565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616cbc57508161397e565b6020808301519084015160019114616ce35750815160208481015190840151829020919020145b8015616d1457825184518590616cfa908390618570565b9052508251602085018051616d109083906193e3565b9052505b509192915050565b6040805180820190915260008082526020820152616d3b838383617836565b5092915050565b60606000826000015167ffffffffffffffff811115616d6357616d63618035565b6040519080825280601f01601f191660200182016040528015616d8d576020820181803683370190505b5090506000602082019050616d3b81856020015186600001516178e1565b60606000616db7613d74565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616dd457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616e2f90618e22565b935060ff1681518110616e4457616e44618cb5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616e9591906195a0565b604051602081830303815290604052828280616eb090618e22565b935060ff1681518110616ec557616ec5618cb5565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616f1290618e22565b935060ff1681518110616f2757616f27618cb5565b602002602001018190525082604051602001616f439190618d50565b604051602081830303815290604052828280616f5e90618e22565b935060ff1681518110616f7357616f73618cb5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616fc090618e22565b935060ff1681518110616fd557616fd5618cb5565b6020026020010181905250616fea878461795b565b8282616ff581618e22565b935060ff168151811061700a5761700a618cb5565b6020908102919091010152855151156170b65760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261705c81618e22565b935060ff168151811061707157617071618cb5565b602002602001018190525061708a86600001518461795b565b828261709581618e22565b935060ff16815181106170aa576170aa618cb5565b60200260200101819052505b8560800151156171245760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826170ff81618e22565b935060ff168151811061711457617114618cb5565b602002602001018190525061718a565b841561718a5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261716981618e22565b935060ff168151811061717e5761717e618cb5565b60200260200101819052505b604086015151156172265760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171d481618e22565b935060ff16815181106171e9576171e9618cb5565b6020026020010181905250856040015182828061720590618e22565b935060ff168151811061721a5761721a618cb5565b60200260200101819052505b8560600151156172905760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261726f81618e22565b935060ff168151811061728457617284618cb5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156172ae576172ae618035565b6040519080825280602002602001820160405280156172e157816020015b60608152602001906001900390816172cc5790505b50905060005b8260ff168160ff16101561733a57838160ff168151811061730a5761730a618cb5565b6020026020010151828260ff168151811061732757617327618cb5565b60209081029190910101526001016172e7565b50979650505050505050565b604080518082019091526000808252602082015281518351101561736b57508161397e565b81518351602085015160009291617381916193e3565b61738b9190618570565b602084015190915060019082146173ac575082516020840151819020908220145b80156173c7578351855186906173c3908390618570565b9052505b50929392505050565b60008082600001516173f48560000151866020015186600001518760200151617716565b6173fe91906193e3565b90505b8351602085015161741291906193e3565b8111616d3b5781617422816195e5565b925050826000015161745985602001518361743d9190618570565b86516174499190618570565b8386600001518760200151617716565b61746391906193e3565b9050617401565b6060600061747884846173d0565b6174839060016193e3565b67ffffffffffffffff81111561749b5761749b618035565b6040519080825280602002602001820160405280156174ce57816020015b60608152602001906001900390816174b95790505b50905060005b8151811015615743576174ea6159658686616d1c565b8282815181106174fc576174fc618cb5565b60209081029190910101526001016174d4565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617558577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617584576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106175a257662386f26fc10000830492506010015b6305f5e10083106175ba576305f5e100830492506008015b61271083106175ce57612710830492506004015b606483106175e0576064830492506002015b600a831061397e5760010192915050565b60006175fd838361799b565b159392505050565b60008085841161770c57602084116176b8576000841561765057600161762c866020618570565b6176379060086195ff565b6176429060026196fd565b61764c9190618570565b1990505b835181168561765f89896193e3565b6176699190618570565b805190935082165b8181146176a35787841161768b5787945050505050615374565b8361769581619709565b945050828451169050617671565b6176ad87856193e3565b945050505050615374565b8383206176c58588618570565b6176cf90876193e3565b91505b85821061770a578482208082036176f7576176ed86846193e3565b9350505050615374565b617702600184618570565b9250506176d2565b505b5092949350505050565b6000838186851161782157602085116177d0576000851561776257600161773e876020618570565b6177499060086195ff565b6177549060026196fd565b61775e9190618570565b1990505b845181166000876177738b8b6193e3565b61777d9190618570565b855190915083165b8281146177c2578186106177aa5761779d8b8b6193e3565b9650505050505050615374565b856177b4816195e5565b965050838651169050617785565b859650505050505050615374565b508383206000905b6177e28689618570565b821161781f578583208082036177fe5783945050505050615374565b6178096001856193e3565b9350508180617817906195e5565b9250506177d8565b505b61782b87876193e3565b979650505050505050565b604080518082019091526000808252602082015260006178688560000151866020015186600001518760200151617716565b6020808701805191860191909152519091506178849082618570565b83528451602086015161789791906193e3565b81036178a657600085526178d8565b835183516178b491906193e3565b855186906178c3908390618570565b90525083516178d290826193e3565b60208601525b50909392505050565b6020811061791957815183526178f86020846193e3565b92506179056020836193e3565b9150617912602082618570565b90506178e1565b600019811561794857600161792f836020618570565b61793b906101006196fd565b6179459190618570565b90505b9151835183169219169190911790915250565b606060006179698484613e47565b805160208083015160405193945061798393909101619720565b60405160208183030381529060405291505092915050565b81518151600091908111156179ae575081515b6020808501519084015160005b83811015617a675782518251808214617a37576000196020871015617a16576001846179e8896020618570565b6179f291906193e3565b6179fd9060086195ff565b617a089060026196fd565b617a129190618570565b1990505b8181168382168181039114617a3457975061397e9650505050505050565b50505b617a426020866193e3565b9450617a4f6020856193e3565b93505050602081617a6091906193e3565b90506179bb565b50845186516144f59190619778565b610c9f8061979983390190565b610de08061a43883390190565b610a2c8061b21883390190565b610b3f8061bc4483390190565b6120728061c78383390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617afa617aff565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617afa6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617bb15783516001600160a01b0316835260209384019390920191600101617b8a565b509095945050505050565b60005b83811015617bd7578181015183820152602001617bbf565b50506000910152565b60008151808452617bf8816020860160208601617bbc565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617cee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617cd8848651617be0565b6020958601959094509290920191600101617c9e565b509197505050602094850194929092019150600101617c34565b50929695505050505050565b600081518084526020840193506020830160005b82811015617d685781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617d28565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617dde6040880182617be0565b9050602082015191508681036020880152617df98183617d14565b965050506020938401939190910190600101617d9a565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e72858351617be0565b94506020938401939190910190600101617e38565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617f086040870182617d14565b9550506020938401939190910190600101617eaf565b600060208284031215617f3057600080fd5b81518015158114613a7757600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617ffa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261801b60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061807857607f821691505b602082108103615c40577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f8211156180fb57806000526020600020601f840160051c810160208510156180d85750805b601f840160051c820191505b818110156180f857600081556001016180e4565b50505b505050565b815167ffffffffffffffff81111561811a5761811a618035565b61812e816181288454618064565b846180b1565b6020601f821160018114618162576000831561814a5750848201515b600019600385901b1c1916600184901b1784556180f8565b600084815260208120601f198516915b828110156181925787850151825560209485019460019092019101618172565b50848210156181b05786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156181d157600080fd5b5051919050565b6060815260006181eb6060830186617be0565b602083019490945250901515604090910152919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a060608501526000815461824c81618064565b8060a0880152600182166000811461826b57600181146182a5576182d9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b89010193506182d9565b84600052602060002060005b838110156182d05781548a820160c001526001909101906020016182b1565b890160c0019450505b50505060038401546080860152809250505092915050565b60c08152600061830460c0830189617be0565b62ffffff881660208401526001600160a01b038716604084015282810360608401526183308187617be0565b905060ff8516608084015282810360a084015261834d8185618202565b9998505050505050505050565b6001600160a01b0384168152826020820152606060408201526000615c266060830184617be0565b60c08152600061839560c0830189617be0565b8760208401526001600160a01b038716604084015282810360608401526183bc8187617be0565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a0604082015260006183ff60a0830186617be0565b6060830194909452509015156080909101529392505050565b8281526040602082015260006153746040830184617be0565b6001600160a01b03831681526040602082015260006153746040830184617be0565b6040516060810167ffffffffffffffff8111828210171561847657618476618035565b60405290565b60008067ffffffffffffffff84111561849757618497618035565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156184c6576184c6618035565b6040528381529050808284018510156184de57600080fd5b615743846020830185617bbc565b600082601f8301126184fd57600080fd5b613a778383516020850161847c565b60006020828403121561851e57600080fd5b815167ffffffffffffffff81111561853557600080fd5b61397a848285016184ec565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561397e5761397e618541565b6101008152600061859861010083018b617be0565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a08401526185cb8187617be0565b90508460c084015282810360e0840152613c6a8185618202565b60c0815260006185f860c0830189617be0565b8760208401526001600160a01b0387166040840152828103606084015261861f8187617be0565b905084608084015282810360a084015261834d8185618202565b60808152600061864c6080830187617be0565b828103602084015261865e8187617be0565b9050846040840152828103606084015261782b8185618202565b60a08152600061868b60a0830188617be0565b6001600160a01b038716602084015282810360408401526186ac8187617be0565b905084606084015282810360808401526186c68185618202565b98975050505050505050565b60a0815260006186e560a0830188617be0565b6001600160a01b038716602084015282810360408401526187068187617be0565b905060ff8516606084015282810360808401526186c68185618202565b60a08152600061873660a0830188617be0565b6001600160a01b038716602084015282810360408401526187578187617be0565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516187a981601a850160208801617bbc565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516187e681601c840160208801617bbc565b01601c01949350505050565b602081526000613a776020830184617be0565b60006020828403121561881757600080fd5b81516001600160a01b0381168114613a7757600080fd5b60008351618840818460208801617bbc565b835190830190618854818360208801617bbc565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161889581601a850160208801617bbc565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516188d2816033840160208801617bbc565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a776080830184617be0565b60006020828403121561896157600080fd5b815167ffffffffffffffff81111561897857600080fd5b8201601f8101841361898957600080fd5b61397a8482516020840161847c565b600085516189aa818460208a01617bbc565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516189e4816001840160208a01617bbc565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618a22816002840160208901617bbc565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618a64816002840160208801617bbc565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618aaf6040830184617be0565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618b2681601f850160208701617bbc565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618b936040830184617be0565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618be56040830184617be0565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618c5c816014850160208701617bbc565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618ca36040830185617be0565b8281036020840152613a738185617be0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618d1c816001850160208701617bbc565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618d62818460208701617bbc565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618e1581604b850160208701617bbc565b91909101604b0192915050565b600060ff821660ff8103618e3857618e38618541565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618e9f816029850160208701617bbc565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a776080830184617be0565b600060208284031215618f0557600080fd5b815167ffffffffffffffff811115618f1c57600080fd5b820160608185031215618f2e57600080fd5b618f36618453565b81518060030b8114618f4757600080fd5b8152602082015167ffffffffffffffff811115618f6357600080fd5b618f6f868285016184ec565b602083015250604082015167ffffffffffffffff811115618f8f57600080fd5b618f9b868285016184ec565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619007816021850160208701617bbc565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516191f3816021850160208801617bbc565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161923081602e840160208801617bbc565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618e9f816029850160208701617bbc565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516192f8816022850160208701617bbc565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161933d81600e850160208701617bbc565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561397e5761397e618541565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161942e816018850160208801617bbc565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161946b81601c840160208801617bbc565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619571818460208701617bbc565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516195d881601c850160208701617bbc565b91909101601c0192915050565b600060001982036195f8576195f8618541565b5060010190565b808202811582820484141761397e5761397e618541565b6001815b60018411156196515780850481111561963557619635618541565b600184161561964357908102905b60019390931c92800261961a565b935093915050565b6000826196685750600161397e565b816196755750600061397e565b816001811461968b5760028114619695576196b1565b600191505061397e565b60ff8411156196a6576196a6618541565b50506001821b61397e565b5060208310610133831016604e8410600b84101617156196d4575081810a61397e565b6196e16000198484619616565b80600019048211156196f5576196f5618541565b029392505050565b6000613a778383619659565b60008161971857619718618541565b506000190190565b60008351619732818460208801617bbc565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161976c816001840160208801617bbc565b01600101949350505050565b8181036000831280158383131683831282161715616d3b57616d3b61854156fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610dbc806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c578063660b9de01461008c5780636ed70169146100ac57005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6100a73660046106f9565b6101aa565b3480156100b857600080fd5b5061006a6101e6565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e33826040516101db929190610a78565b60405180910390a150565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61022361036f565b6000610230600285610b57565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610c00565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c8a565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d4d565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d6a565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610ab683610694565b1660408201526000602083013567ffffffffffffffff8116808214610ada57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610b1657600080fd5b830160208101903567ffffffffffffffff811115610b3357600080fd5b803603821315610b4257600080fd5b606060808501526105b660a085018284610a2f565b600082610b8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610bad578181015183820152602001610b95565b50506000910152565b60008151808452610bce816020860160208601610b92565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c3560a0830186610bb6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c80578151865260209586019590910190600101610c62565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610d1d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610d08858351610bb6565b94506020938401939190910190600101610cce565b505050508281036040840152610d338186610c4e565b915050610d44606083018415159052565b95945050505050565b600060208284031215610d5f57600080fd5b81516104f681610840565b60008251610d7c818460208701610b92565b919091019291505056fea2646970667358221220084d92a79207d5024a4431b52d5d0038017908edb40aae1ce1d94a5ec3de914064736f6c634300081a00336080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea264697066735822122037e9f02c9f1066889aa75870351a007a7daaa8277c5c9d435a858ffde2091b1364736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220e349eeb22d87c24401c0e0a954fb5e1774b175448e0269cf8092b426d6a4912864736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220a624b17ead6bcd172bd741c1161f6b8ae9f0161a6cc69edb1d1a9b34e35d3bea64736f6c634300081a0033", } // GatewayEVMZEVMTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.sol/gatewayzevm.go b/v2/pkg/gatewayzevm.sol/gatewayzevm.go index 8ac9b84d4..23b601156 100644 --- a/v2/pkg/gatewayzevm.sol/gatewayzevm.go +++ b/v2/pkg/gatewayzevm.sol/gatewayzevm.go @@ -29,6 +29,13 @@ var ( _ = abi.ConvertType ) +// MessageContext is an auto generated low-level Go binding around an user-defined struct. +type MessageContext struct { + Origin []byte + Sender common.Address + ChainID *big.Int +} + // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address @@ -45,17 +52,10 @@ type RevertOptions struct { OnRevertGasLimit *big.Int } -// ZContext is an auto generated low-level Go binding around an user-defined struct. -type ZContext struct { - Origin []byte - Sender common.Address - ChainID *big.Int -} - // GatewayZEVMMetaData contains all meta data concerning the GatewayZEVM contract. var GatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_MESSAGE_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallOnRevertNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZETANotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e9261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e9061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea2646970667358221220d6295002fd18ec461c02f99613a4db51b8eca02e82f77afc8b206b54bd8363c364736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_MESSAGE_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallOnRevertNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZETANotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b0380861692635bcfd6169261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b03841690635bcfd6169061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea26469706673582212205b760c9072c4b8b5ebc94339927027ff9e67d3127c5bf7f24bb821ffbe32443064736f6c634300081a0033", } // GatewayZEVMABI is the input ABI used to generate the binding from. @@ -611,42 +611,42 @@ func (_GatewayZEVM *GatewayZEVMTransactorSession) Deposit(zrc20 common.Address, // DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. // // Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMTransactor) DepositAndCall(opts *bind.TransactOpts, context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVM *GatewayZEVMTransactor) DepositAndCall(opts *bind.TransactOpts, context MessageContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVM.contract.Transact(opts, "depositAndCall", context, amount, target, message) } // DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. // // Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMSession) DepositAndCall(context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVM *GatewayZEVMSession) DepositAndCall(context MessageContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVM.Contract.DepositAndCall(&_GatewayZEVM.TransactOpts, context, amount, target, message) } // DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. // // Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMTransactorSession) DepositAndCall(context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVM *GatewayZEVMTransactorSession) DepositAndCall(context MessageContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVM.Contract.DepositAndCall(&_GatewayZEVM.TransactOpts, context, amount, target, message) } // DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. // // Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMTransactor) DepositAndCall0(opts *bind.TransactOpts, context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVM *GatewayZEVMTransactor) DepositAndCall0(opts *bind.TransactOpts, context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVM.contract.Transact(opts, "depositAndCall0", context, zrc20, amount, target, message) } // DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. // // Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMSession) DepositAndCall0(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVM *GatewayZEVMSession) DepositAndCall0(context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVM.Contract.DepositAndCall0(&_GatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } // DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. // // Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMTransactorSession) DepositAndCall0(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVM *GatewayZEVMTransactorSession) DepositAndCall0(context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVM.Contract.DepositAndCall0(&_GatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } @@ -674,21 +674,21 @@ func (_GatewayZEVM *GatewayZEVMTransactorSession) DepositAndRevert(zrc20 common. // Execute is a paid mutator transaction binding the contract method 0xbcf7f32b. // // Solidity: function execute((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMTransactor) Execute(opts *bind.TransactOpts, context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVM *GatewayZEVMTransactor) Execute(opts *bind.TransactOpts, context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVM.contract.Transact(opts, "execute", context, zrc20, amount, target, message) } // Execute is a paid mutator transaction binding the contract method 0xbcf7f32b. // // Solidity: function execute((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMSession) Execute(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVM *GatewayZEVMSession) Execute(context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVM.Contract.Execute(&_GatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } // Execute is a paid mutator transaction binding the contract method 0xbcf7f32b. // // Solidity: function execute((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMTransactorSession) Execute(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVM *GatewayZEVMTransactorSession) Execute(context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVM.Contract.Execute(&_GatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go index feb3900d9..5870a7671 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go @@ -59,7 +59,7 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMInboundTestMetaData contains all meta data concerning the GatewayZEVMInboundTest contract. var GatewayZEVMInboundTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfGasLimitIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfMessageSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfGasLimitIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfMessageSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfMessageSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIsAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f4968061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c806385226c811161012a578063ba9adeef116100bd578063dde7e9671161008c578063fa7626d411610071578063fa7626d41461037f578063fbc611c81461038c578063fdad0ad01461039457600080fd5b8063dde7e9671461036f578063e20c9f711461037757600080fd5b8063ba9adeef1461034f578063bed3e81314610357578063ceccfab31461035f578063d5a446891461036757600080fd5b8063b5508aa9116100f9578063b5508aa91461031f578063b7f0583614610327578063ba414fa61461032f578063ba800c911461034757600080fd5b806385226c81146102e5578063916a17c6146102fa578063ae9da0881461030f578063b0464fdc1461031757600080fd5b806339cbb457116101bd5780635006fd801161018c5780636221b509116101715780636221b509146102c057806366d9a9a0146102c857806383ababa9146102dd57600080fd5b80635006fd80146102b05780635d72228f146102b857600080fd5b806339cbb457146102905780633e5e3c23146102985780633f7286f4146102a05780634ffab9de146102a857600080fd5b806320dee15f116101f957806320dee15f14610263578063264b524c1461026b5780632ade38801461027357806336431b3f1461028857600080fd5b80630a9254e41461022b5780631238212c146102355780631e63d2b91461023d5780631ed7831c14610245575b600080fd5b61023361039c565b005b610233610eec565b6102336112c1565b61024d6116d4565b60405161025a9190619611565b60405180910390f35b610233611736565b610233611b13565b61027b611d4e565b60405161025a91906196ad565b610233611e90565b61023361204f565b61024d6121d9565b61024d612239565b610233612299565b610233612536565b6102336129f7565b610233612d49565b6102d0612f6e565b60405161025a9190619813565b6102336130f0565b6102ed6131ed565b60405161025a91906198b1565b6103026132bd565b60405161025a9190619928565b6102336133b8565b610302613560565b6102ed61365b565b61023361372b565b61033761390a565b604051901515815260200161025a565b6102336139de565b610233613b0d565b610233613cb6565b610233613e5f565b6102336141c4565b610233614461565b61024d6148a0565b601f546103379060ff1681565b610233614900565b610233614c7c565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680549091166112341790556040516103e290619524565b604051809103906000f0801580156103fe573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260255491516024810193909352921660448201526104e2919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614e0b565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa1580156105a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c891906199bf565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161060c90619531565b604051809103906000f080158015610628573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b1580156106c457600080fd5b505af11580156106d8573d6000803e3d6000fd5b5050505060008060006040516106ed9061953e565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610729573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560205460405160129360019384936000939192169061077f9061954b565b61078e969594939291906199e8565b604051809103906000f0801580156107aa573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b1580156108bf57600080fd5b505af11580156108d3573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561095357600080fd5b505af1158015610967573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156109bc57600080fd5b505af11580156109d0573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190619add565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afd9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610be657600080fd5b505af1158015610bfa573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190619add565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ce457600080fd5b505af1158015610cf8573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d909190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b50506040805160a0810182526103218082526000602080840182815284860193845285519182019095528181526060840181905260808401919091528251602880549551151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009096166001600160a01b0392831617959095178555915160298054919093167fffffffffffffffffffffffff00000000000000000000000000000000000000009190911617909155909350909150602a90610edc9082619bc2565b5060808201518160030155905050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f619190619c81565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110809190619add565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561115c57600080fd5b505af1158015611170573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261120a9288916001600160a01b0316908790600190602890600401619d89565b600060405180830381600087803b15801561122457600080fd5b505af1158015611238573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af9190619c81565b90506112bb8382614e2a565b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113369190619c81565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039092166084820152919250908190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561144157600080fd5b505af1158015611455573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216918b9189918491634d8943bb916004808201926020929091908290030181865afa158015611527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154b9190619c81565b8a896028604051611563989796959493929190619dea565b60405180910390a3602080546026546040516001600160a01b039283169363048ae42c936115ab9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611607928a916001600160a01b03169089908890602890600401619d89565b600060405180830381600087803b15801561162157600080fd5b505af1158015611635573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac9190619c81565b90506116cc836116bc8888619e7b565b6116c69190619e7b565b82614e2a565b505050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561172c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161170e575b5050505050905090565b601f54604080518082018252601a81527f476174657761795a45564d55706772616465546573742e736f6c00000000000060208083019190915282519081019092526000825260255461179b936001600160a01b036101009091048116939116614ea9565b601f546021546025546040516370a0823160e01b81526001600160a01b03918216600482015261010090930481169260019260009216906370a0823190602401602060405180830381865afa1580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190619c81565b6040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0385166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156118a957600080fd5b505af11580156118bd573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d355789060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b49190619c81565b600060286040516119cb9796959493929190619e8e565b60405180910390a360265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03841690637c0dcb5f9060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611a5f9287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015611a7957600080fd5b505af1158015611a8d573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b049190619c81565b90506112bb6116c68484619e7b565b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216926397d340f5926004808401938290030181865afa158015611b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b959190619c81565b611ba0906001619f36565b67ffffffffffffffff811115611bb857611bb8619aff565b6040519080825280601f01601f191660200182016040528015611be2576020820181803683370190505b50602a90611bf09082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611c7657600080fd5b505af1158015611c8a573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611d20926002916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015611d3a57600080fd5b505af11580156112bb573d6000803e3d6000fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611e8757600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611e70578382906000526020600020018054611de390619b2e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0f90619b2e565b8015611e5c5780601f10611e3157610100808354040283529160200191611e5c565b820191906000526020600020905b815481529060010190602001808311611e3f57829003601f168201915b505050505081526020019060010190611dc4565b505050508152505081526020019060010190611d72565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611f8a57600080fd5b505af1158015611f9e573d6000803e3d6000fd5b5050602080546040516001600160a01b03909116935063048ae42c9250015b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001916001600160a01b03169087908390602890600401619d89565b600060405180830381600087803b15801561203457600080fd5b505af1158015612048573d6000803e3d6000fd5b5050505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561214957600080fd5b505af115801561215d573d6000803e3d6000fd5b5050602080546040516001600160a01b039091169350631cb5ea759250015b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001600160a01b03909116908690600190602890600401619f49565b6060601880548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516000936002936001600160a01b0316926397d340f592600480830193928290030181865afa1580156122fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123209190619c81565b61232a9190619fa3565b67ffffffffffffffff81111561234257612342619aff565b6040519080825280601f01601f19166020018201604052801561236c576020820181803683370190505b5060208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b03909216926397d340f5926004808401938290030181865afa1580156123d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f59190619c81565b6123ff9190619fa3565b61240a906001619f36565b67ffffffffffffffff81111561242257612422619aff565b6040519080825280601f01601f19166020018201604052801561244c576020820181803683370190505b50602a9061245a9082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156124e057600080fd5b505af11580156124f4573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c9150603401611fbd565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ab9190619c81565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156125fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126219190619c81565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561271557600080fd5b505af1158015612729573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561279b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127bf9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561281e57600080fd5b505af1158015612832573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250633b283933915060340160405160208183030381529060405288848660286040518663ffffffff1660e01b81526004016128a3959493929190619fde565b600060405180830381600087803b1580156128bd57600080fd5b505af11580156128d1573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129489190619c81565b90506129548682614e2a565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190619c81565b90506129d58682614e2a565b6027546129ed9086906001600160a01b031631614e2a565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6c9190619c81565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ae157600080fd5b505af1158015612af5573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8b9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612bea57600080fd5b505af1158015612bfe573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352612c939287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015612cad57600080fd5b505af1158015612cc1573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d389190619c81565b9050612d448282614e2a565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbe9190619c81565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015612e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4f9190619add565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612eb457600080fd5b505af1158015612ec8573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052858460286040518563ffffffff1660e01b8152600401612f37949392919061a023565b600060405180830381600087803b158015612f5157600080fd5b505af1158015612f65573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611e875783829060005260206000209060020201604051806040016040529081600082018054612fc590619b2e565b80601f0160208091040260200160405190810160405280929190818152602001828054612ff190619b2e565b801561303e5780601f106130135761010080835404028352916020019161303e565b820191906000526020600020905b81548152906001019060200180831161302157829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156130d857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116130855790505b50505050508152505081526020019060010190612f92565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561317557600080fd5b505af1158015613189573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7c0dcb5f000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637c0dcb5f9350611d20929160019116602860248401619efc565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611e8757838290600052602060002001805461323090619b2e565b80601f016020809104026020016040519081016040528092919081815260200182805461325c90619b2e565b80156132a95780601f1061327e576101008083540402835291602001916132a9565b820191906000526020600020905b81548152906001019060200180831161328c57829003601f168201915b505050505081526020019060010190613211565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611e875760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156133a057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161334d5790505b505050505081525050815260200190600101906132e1565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f60ee1247000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134b257600080fd5b505af11580156134c6573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250631cb5ea75915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001600160a01b03909116908690600090602890600401619f49565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611e875760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561364357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135f05790505b50505050508152505081526020019060010190613584565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611e8757838290600052602060002001805461369e90619b2e565b80601f01602080910402602001604051908101604052809291908181526020018280546136ca90619b2e565b80156137175780601f106136ec57610100808354040283529160200191613717565b820191906000526020600020905b8154815290600101906020018083116136fa57829003601f168201915b50505050508152602001906001019061367f565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561382e57600080fd5b505af1158015613842573d6000803e3d6000fd5b505060215460255460265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf9060340160408051601f19818403018152908290526138c291869060019060289061a054565b60405180910390a3602080546026546040516001600160a01b0392831693631cb5ea759361217c9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60085460009060ff1615613922575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156139b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d79190619c81565b1415905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613a6357600080fd5b505af1158015613a77573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611d20926000916001600160a01b031690602890600401619efc565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613c0757600080fd5b505af1158015613c1b573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926000916001600160a01b0316908790600190602890600401619d89565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f60ee1247000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613db057600080fd5b505af1158015613dc4573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001916001600160a01b0316908790600090602890600401619d89565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed49190619c81565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190619add565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613fd857600080fd5b505af1158015613fec573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b15801561404f57600080fd5b505af1158015614063573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156140ed57600080fd5b505af1158015614101573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526141969287916001600160a01b031690602890600401619efc565b600060405180830381600087803b1580156141b057600080fd5b505af11580156116cc573d6000803e3d6000fd5b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516000936002936001600160a01b0316926397d340f592600480830193928290030181865afa158015614227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424b9190619c81565b6142559190619fa3565b67ffffffffffffffff81111561426d5761426d619aff565b6040519080825280601f01601f191660200182016040528015614297576020820181803683370190505b5060208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b03909216926397d340f5926004808401938290030181865afa1580156142fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143209190619c81565b61432a9190619fa3565b614335906001619f36565b67ffffffffffffffff81111561434d5761434d619aff565b6040519080825280601f01601f191660200182016040528015614377576020820181803683370190505b50602a906143859082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561440b57600080fd5b505af115801561441f573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250631cb5ea75915060340161217c565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156144b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d69190619c81565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454c9190619c81565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156145ca57600080fd5b505af11580156145de573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015614650573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146749190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156146d357600080fd5b505af11580156146e7573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052878460286040518563ffffffff1660e01b8152600401614756949392919061a023565b600060405180830381600087803b15801561477057600080fd5b505af1158015614784573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156147d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fb9190619c81565b90506148078582614e2a565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061487c9190619c81565b90506148888582614e2a565b602754612f659085906001600160a01b031631614e2a565b6060601580548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149759190619c81565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614a0657600080fd5b505af1158015614a1a573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015614aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b119190619c81565b60006028604051614b289796959493929190619e8e565b60405180910390a3602080546026546040516001600160a01b0392831693637c0dcb5f93614b709316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352614bc89287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015614be257600080fd5b505af1158015614bf6573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6d9190619c81565b9050612d446116c68484619e7b565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa158015614ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cf19190619c81565b6021549091506001600160a01b031663a9059cbb610123614d13600185619e7b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015614d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d9a9190619add565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024016140d3565b6000614e15619558565b614e20848483614ebe565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614e9557600080fd5b505afa1580156116cc573d6000803e3d6000fd5b614eb1619558565b6120488585858486614f39565b600080614ecb8584615039565b9050614f2e6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f1992919061a093565b60405160208183030381529060405285615045565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015614fab57600080fd5b505af1925050508015614fbc575060015b614fd157614fcc87878787615073565b612f65565b614fdd87878787615073565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561501857600080fd5b505af115801561502c573d6000803e3d6000fd5b5050505050505050505050565b6000614f32838361508c565b60c081015151600090156150695761506284848460c001516150a7565b9050614f32565b615062848461524d565b600061507f8483615338565b9050612048858285615344565b6000615098838361570e565b614f3283836020015184615045565b6000806150b261571e565b905060006150c086836157f1565b905060006150d78260600151836020015185615c97565b905060006150e783838989615ea9565b905060006150f482616d26565b602081015181519192509060030b156151675789826040015160405160200161511e92919061a0b5565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261515e9160040161a136565b60405180910390fd5b60006151aa6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616ef5565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906151fd90849060040161a136565b602060405180830381865afa15801561521a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061523e91906199bf565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906152a290879060040161a136565b600060405180830381865afa1580156152bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152e7919081019061a202565b90506000615315828560405160200161530192919061a237565b6040516020818303038152906040526170f5565b90506001600160a01b038116614e2057848460405160200161511e92919061a266565b60006150988383617108565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa1580156153e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906154049190619c81565b9050806155ab57600061541686617114565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506154a1905b6040805180820182526000808252602091820152815180830190925284518252808501908201529061720c565b806154ad575060008451115b15615530576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906154f9908890889060040161a093565b600060405180830381600087803b15801561551357600080fd5b505af1158015615527573d6000803e3d6000fd5b505050506155a5565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561558c57600080fd5b505af11580156155a0573d6000803e3d6000fd5b505050505b50612048565b8060006155b782617114565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061561990615474565b80615625575060008551115b156156aa576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90615673908a908a908a9060040161a311565b600060405180830381600087803b15801561568d57600080fd5b505af11580156156a1573d6000803e3d6000fd5b50505050612f65565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b15801561501857600080fd5b61571a82826000617220565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906157a590849060040161a342565b600060405180830381865afa1580156157c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157ea919081019061a389565b9250505090565b6158236040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061586e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61587785617323565b6020820152600061588786617708565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156158c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158f1919081019061a389565b8683856020015160405160200161590b949392919061a3d2565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061596390859060040161a136565b600060405180830381865afa158015615980573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526159a8919081019061a389565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906159f090849060040161a4d6565b602060405180830381865afa158015615a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615a319190619add565b615a46578160405160200161511e919061a528565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615a8b90849060040161a5ba565b600060405180830381865afa158015615aa8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ad0919081019061a389565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615b1790849060040161a60c565b602060405180830381865afa158015615b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615b589190619add565b15615bed576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615ba290849060040161a60c565b600060405180830381865afa158015615bbf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615be7919081019061a389565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615c12919061a65e565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615c3e92919061a6ca565b600060405180830381865afa158015615c5b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615c83919081019061a389565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615cb35790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615d1357615d1361a6ef565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615d6757615d6761a6ef565b602002602001018190525084604051602001615d83919061a71e565b60405160208183030381529060405281600281518110615da557615da561a6ef565b602002602001018190525082604051602001615dc1919061a78a565b60405160208183030381529060405281600381518110615de357615de361a6ef565b60200260200101819052506000615df982616d26565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615e8a906040805180820182526000808252602091820152815180830190925284518252808501908201529061798b565b615e9f578560405160200161511e919061a7cb565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615ef9565b511590565b61606d57826020015115615fb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161515e565b8260c001511561606d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161515e565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161608657905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806160e19061a85c565b935060ff16815181106160f6576160f661a6ef565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616147919061a87b565b6040516020818303038152906040528282806161629061a85c565b935060ff16815181106161775761617761a6ef565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806161c49061a85c565b935060ff16815181106161d9576161d961a6ef565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806162269061a85c565b935060ff168151811061623b5761623b61a6ef565b602002602001018190525087602001518282806162579061a85c565b935060ff168151811061626c5761626c61a6ef565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806162b99061a85c565b935060ff16815181106162ce576162ce61a6ef565b6020908102919091010152875182826162e68161a85c565b935060ff16815181106162fb576162fb61a6ef565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806163489061a85c565b935060ff168151811061635d5761635d61a6ef565b6020026020010181905250616371466179ec565b828261637c8161a85c565b935060ff16815181106163915761639161a6ef565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806163de9061a85c565b935060ff16815181106163f3576163f361a6ef565b60200260200101819052508682828061640b9061a85c565b935060ff16815181106164205761642061a6ef565b60209081029190910101528551156165475760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826164718161a85c565b935060ff16815181106164865761648661a6ef565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906164d690899060040161a136565b600060405180830381865afa1580156164f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261651b919081019061a389565b82826165268161a85c565b935060ff168151811061653b5761653b61a6ef565b60200260200101819052505b8460200151156166175760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826165908161a85c565b935060ff16815181106165a5576165a561a6ef565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806165f29061a85c565b935060ff16815181106166075761660761a6ef565b60200260200101819052506167de565b61664f615ef48660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6166e25760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826166928161a85c565b935060ff16815181106166a7576166a761a6ef565b60200260200101819052508460a001516040516020016166c7919061a71e565b6040516020818303038152906040528282806165f29061a85c565b8460c0015115801561672557506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261672390511590565b155b156167de5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826167698161a85c565b935060ff168151811061677e5761677e61a6ef565b602002602001018190525061679288617a8c565b6040516020016167a2919061a71e565b6040516020818303038152906040528282806167bd9061a85c565b935060ff16815181106167d2576167d261a6ef565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261681290511590565b6168a75760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826168558161a85c565b935060ff168151811061686a5761686a61a6ef565b602002602001018190525084604001518282806168869061a85c565b935060ff168151811061689b5761689b61a6ef565b60200260200101819052505b6060850151156169c85760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826168f08161a85c565b935060ff16815181106169055761690561a6ef565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616974573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261699c919081019061a389565b82826169a78161a85c565b935060ff16815181106169bc576169bc61a6ef565b60200260200101819052505b60e08501515115616a6f5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616a128161a85c565b935060ff1681518110616a2757616a2761a6ef565b6020026020010181905250616a438560e00151600001516179ec565b8282616a4e8161a85c565b935060ff1681518110616a6357616a6361a6ef565b60200260200101819052505b60e08501516020015115616b195760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616abc8161a85c565b935060ff1681518110616ad157616ad161a6ef565b6020026020010181905250616aed8560e00151602001516179ec565b8282616af88161a85c565b935060ff1681518110616b0d57616b0d61a6ef565b60200260200101819052505b60e08501516040015115616bc35760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282616b668161a85c565b935060ff1681518110616b7b57616b7b61a6ef565b6020026020010181905250616b978560e00151604001516179ec565b8282616ba28161a85c565b935060ff1681518110616bb757616bb761a6ef565b60200260200101819052505b60e08501516060015115616c6d5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616c108161a85c565b935060ff1681518110616c2557616c2561a6ef565b6020026020010181905250616c418560e00151606001516179ec565b8282616c4c8161a85c565b935060ff1681518110616c6157616c6161a6ef565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616c8b57616c8b619aff565b604051908082528060200260200182016040528015616cbe57816020015b6060815260200190600190039081616ca95790505b50905060005b8260ff168160ff161015616d1757838160ff1681518110616ce757616ce761a6ef565b6020026020010151828260ff1681518110616d0457616d0461a6ef565b6020908102919091010152600101616cc4565b5093505050505b949350505050565b616d4d6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91616dd39186910161a8e6565b600060405180830381865afa158015616df0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616e18919081019061a389565b90506000616e26868361857b565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401616e5691906198b1565b6000604051808303816000875af1158015616e75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616e9d919081019061a92d565b805190915060030b15801590616eb65750602081015151155b8015616ec55750604081015151155b15615e9f5781600081518110616edd57616edd61a6ef565b602002602001015160405160200161511e919061a9e3565b60606000616f2a8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616f619082905b906186d0565b156170be576000616fde82616fd884616fd2616fa48a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906186f7565b90618759565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506170429082906186d0565b156170ac57604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170a9905b82906187de565b90505b6170b581618804565b92505050614f32565b82156170d757848460405160200161511e92919061abcf565b5050604080516020810190915260008152614f32565b509392505050565b6000808251602084016000f09392505050565b61571a82826001617220565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691617189919061ac76565b600060405180830381855afa9150503d80600081146171c4576040519150601f19603f3d011682016040523d82523d6000602084013e6171c9565b606091505b50915091508180156171dc575060208151115b156171f55780806020019051810190616d1e919061a389565b505060408051602081019091526000815292915050565b6000617218838361886d565b159392505050565b8160a001511561722f57505050565b600061723c848484618948565b9050600061724982616d26565b602081015181519192509060030b1580156172e55750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172e590604080518082018252600080825260209182015281518083019092528451825280850190820152616f5b565b156172f257505050505050565b6040820151511561731257816040015160405160200161511e919061ac92565b8060405160200161511e919061acf0565b606060006173588360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506173bd905b829061798b565b1561742c57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f3290617427908390618ee3565b618804565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261748e905b8290618f6d565b60010361755b57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174f4906170a2565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f3290617427905b83906187de565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ba906173b6565b156176f157604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617622908390619007565b9050600081600183516176359190619e7b565b815181106176455761764561a6ef565b602002602001015190506176e86174276176bb6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618ee3565b95945050505050565b8260405160200161511e919061ad5b565b50919050565b6060600061773d8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061779f906173b6565b156177ad57614f3281618804565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261780c90617487565b60010361787657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f329061742790617554565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178d5906173b6565b156176f157604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061793d908390619007565b90506001815111156179795780600282516179589190619e7b565b815181106179685761796861a6ef565b602002602001015192505050919050565b508260405160200161511e919061ad5b565b8051825160009111156179a057506000614e24565b815183516020850151600092916179b691619f36565b6179c09190619e7b565b9050826020015181036179d7576001915050614e24565b82516020840151819020912014905092915050565b606060006179f9836190ac565b600101905060008167ffffffffffffffff811115617a1957617a19619aff565b6040519080825280601f01601f191660200182016040528015617a43576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617a4d57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617b18905b829061720c565b15617b5857505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bb790617b11565b15617bf757505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c5690617b11565b15617c9657505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cf590617b11565b80617d5a5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d5a90617b11565b15617d9a57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617df990617b11565b80617e5e5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5e90617b11565b15617e9e57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617efd90617b11565b80617f625750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f6290617b11565b15617fa257505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261800190617b11565b806180665750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261806690617b11565b156180a657505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261810590617b11565b1561814557505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526181a490617b11565b156181e457505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261824390617b11565b1561828357505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182e290617b11565b1561832257505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261838190617b11565b156183c157505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261842090617b11565b806184855750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261848590617b11565b156184c557505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261852490617b11565b1561856457505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161511e929060200161ae39565b60608060005b8451811015618606578185828151811061859d5761859d61a6ef565b60200260200101516040516020016185b692919061a237565b6040516020818303038152906040529150600185516185d59190619e7b565b81146185fe57816040516020016185ec919061afa2565b60405160208183030381529060405291505b600101618581565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161861f579050509050838160008151811061864a5761864a61a6ef565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061869e5761869e61a6ef565b602002602001018190525081816002815181106186bd576186bd61a6ef565b6020908102919091010152949350505050565b60208083015183518351928401516000936186ee929184919061918e565b14159392505050565b60408051808201909152600080825260208201526000618729846000015185602001518560000151866020015161929f565b905083602001518161873b9190619e7b565b8451859061874a908390619e7b565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561877e575081614e24565b60208083015190840151600191146187a55750815160208481015190840151829020919020145b80156187d6578251845185906187bc908390619e7b565b90525082516020850180516187d2908390619f36565b9052505b509192915050565b60408051808201909152600080825260208201526187fd8383836193bf565b5092915050565b60606000826000015167ffffffffffffffff81111561882557618825619aff565b6040519080825280601f01601f19166020018201604052801561884f576020820181803683370190505b50905060006020820190506187fd818560200151866000015161946a565b8151815160009190811115618880575081515b6020808501519084015160005b8381101561893957825182518082146189095760001960208710156188e8576001846188ba896020619e7b565b6188c49190619f36565b6188cf90600861afe3565b6188da90600261b0e1565b6188e49190619e7b565b1990505b8181168382168181039114618906579750614e249650505050505050565b50505b618914602086619f36565b9450618921602085619f36565b935050506020816189329190619f36565b905061888d565b5084518651615e9f919061b0ed565b6060600061895461571e565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161897157905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806189cc9061a85c565b935060ff16815181106189e1576189e161a6ef565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618a32919061b10d565b604051602081830303815290604052828280618a4d9061a85c565b935060ff1681518110618a6257618a6261a6ef565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618aaf9061a85c565b935060ff1681518110618ac457618ac461a6ef565b602002602001018190525082604051602001618ae0919061a78a565b604051602081830303815290604052828280618afb9061a85c565b935060ff1681518110618b1057618b1061a6ef565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618b5d9061a85c565b935060ff1681518110618b7257618b7261a6ef565b6020026020010181905250618b8787846194e4565b8282618b928161a85c565b935060ff1681518110618ba757618ba761a6ef565b602090810291909101015285515115618c535760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282618bf98161a85c565b935060ff1681518110618c0e57618c0e61a6ef565b6020026020010181905250618c278660000151846194e4565b8282618c328161a85c565b935060ff1681518110618c4757618c4761a6ef565b60200260200101819052505b856080015115618cc15760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282618c9c8161a85c565b935060ff1681518110618cb157618cb161a6ef565b6020026020010181905250618d27565b8415618d275760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282618d068161a85c565b935060ff1681518110618d1b57618d1b61a6ef565b60200260200101819052505b60408601515115618dc35760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618d718161a85c565b935060ff1681518110618d8657618d8661a6ef565b60200260200101819052508560400151828280618da29061a85c565b935060ff1681518110618db757618db761a6ef565b60200260200101819052505b856060015115618e2d5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618e0c8161a85c565b935060ff1681518110618e2157618e2161a6ef565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618e4b57618e4b619aff565b604051908082528060200260200182016040528015618e7e57816020015b6060815260200190600190039081618e695790505b50905060005b8260ff168160ff161015618ed757838160ff1681518110618ea757618ea761a6ef565b6020026020010151828260ff1681518110618ec457618ec461a6ef565b6020908102919091010152600101618e84565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618f08575081614e24565b81518351602085015160009291618f1e91619f36565b618f289190619e7b565b60208401519091506001908214618f49575082516020840151819020908220145b8015618f6457835185518690618f60908390619e7b565b9052505b50929392505050565b6000808260000151618f91856000015186602001518660000151876020015161929f565b618f9b9190619f36565b90505b83516020850151618faf9190619f36565b81116187fd5781618fbf8161b152565b9250508260000151618ff6856020015183618fda9190619e7b565b8651618fe69190619e7b565b838660000151876020015161929f565b6190009190619f36565b9050618f9e565b606060006190158484618f6d565b619020906001619f36565b67ffffffffffffffff81111561903857619038619aff565b60405190808252806020026020018201604052801561906b57816020015b60608152602001906001900390816190565790505b50905060005b81518110156170ed5761908761742786866187de565b8282815181106190995761909961a6ef565b6020908102919091010152600101619071565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106190f5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619121576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061913f57662386f26fc10000830492506010015b6305f5e1008310619157576305f5e100830492506008015b612710831061916b57612710830492506004015b6064831061917d576064830492506002015b600a8310614e245760010192915050565b600080858411619295576020841161924157600084156191d95760016191b5866020619e7b565b6191c090600861afe3565b6191cb90600261b0e1565b6191d59190619e7b565b1990505b83518116856191e88989619f36565b6191f29190619e7b565b805190935082165b81811461922c578784116192145787945050505050616d1e565b8361921e8161b16c565b9450508284511690506191fa565b6192368785619f36565b945050505050616d1e565b83832061924e8588619e7b565b6192589087619f36565b91505b85821061929357848220808203619280576192768684619f36565b9350505050616d1e565b61928b600184619e7b565b92505061925b565b505b5092949350505050565b600083818685116193aa576020851161935957600085156192eb5760016192c7876020619e7b565b6192d290600861afe3565b6192dd90600261b0e1565b6192e79190619e7b565b1990505b845181166000876192fc8b8b619f36565b6193069190619e7b565b855190915083165b82811461934b57818610619333576193268b8b619f36565b9650505050505050616d1e565b8561933d8161b152565b96505083865116905061930e565b859650505050505050616d1e565b508383206000905b61936b8689619e7b565b82116193a8578583208082036193875783945050505050616d1e565b619392600185619f36565b93505081806193a09061b152565b925050619361565b505b6193b48787619f36565b979650505050505050565b604080518082019091526000808252602082015260006193f1856000015186602001518660000151876020015161929f565b60208087018051918601919091525190915061940d9082619e7b565b8352845160208601516194209190619f36565b810361942f5760008552619461565b8351835161943d9190619f36565b8551869061944c908390619e7b565b905250835161945b9082619f36565b60208601525b50909392505050565b602081106194a25781518352619481602084619f36565b925061948e602083619f36565b915061949b602082619e7b565b905061946a565b60001981156194d15760016194b8836020619e7b565b6194c49061010061b0e1565b6194ce9190619e7b565b90505b9151835183169219169190911790915250565b606060006194f284846157f1565b805160208083015160405193945061950c9390910161b183565b60405160208183030381529060405291505092915050565b610b678061b1dc83390190565b61063d8061bd4383390190565b61106f8061c38083390190565b6120728061d3ef83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161959b6195a0565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161959b6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156196525783516001600160a01b031683526020938401939092019160010161962b565b509095945050505050565b60005b83811015619678578181015183820152602001619660565b50506000910152565b6000815180845261969981602086016020860161965d565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561978f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352619779848651619681565b602095860195909450929092019160010161973f565b5091975050506020948501949290920191506001016196d5565b50929695505050505050565b600081518084526020840193506020830160005b828110156198095781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016197c9565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261987f6040880182619681565b905060208201519150868103602088015261989a81836197b5565b96505050602093840193919091019060010161983b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619913858351619681565b945060209384019391909101906001016198d9565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526199a960408701826197b5565b9550506020938401939190910190600101619950565b6000602082840312156199d157600080fd5b81516001600160a01b0381168114614f3257600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619aa2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152619ac360c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215619aef57600080fd5b81518015158114614f3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c90821680619b4257607f821691505b602082108103617702577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115612d4457806000526020600020601f840160051c81016020851015619ba25750805b601f840160051c820191505b818110156120485760008155600101619bae565b815167ffffffffffffffff811115619bdc57619bdc619aff565b619bf081619bea8454619b2e565b84619b7b565b6020601f821160018114619c245760008315619c0c5750848201515b600019600385901b1c1916600184901b178455612048565b600084815260208120601f198516915b82811015619c545787850151825560209485019460019092019101619c34565b5084821015619c725786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215619c9357600080fd5b5051919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a0606085015260008154619ce481619b2e565b8060a08801526001821660008114619d035760018114619d3d57619d71565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b8901019350619d71565b84600052602060002060005b83811015619d685781548a820160c00152600190910190602001619d49565b890160c0019450505b50505060038401546080860152809250505092915050565b60c081526000619d9c60c0830189619681565b8760208401526001600160a01b03871660408401528281036060840152619dc38187619681565b905084608084015282810360a0840152619ddd8185619c9a565b9998505050505050505050565b61010081526000619dff61010083018b619681565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a0840152619e328187619681565b90508460c084015282810360e084015261523e8185619c9a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614e2457614e24619e4c565b61010081526000619ea361010083018a619681565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e085015250619eee6020820185619c9a565b9a9950505050505050505050565b608081526000619f0f6080830187619681565b8560208401526001600160a01b038516604084015282810360608401526193b48185619c9a565b80820180821115614e2457614e24619e4c565b60a081526000619f5c60a0830188619681565b6001600160a01b03871660208401528281036040840152619f7d8187619681565b90508460608401528281036080840152619f978185619c9a565b98975050505050505050565b600082619fd9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60a081526000619ff160a0830188619681565b866020840152856040840152828103606084015261a00f8186619681565b90508281036080840152619f978185619c9a565b60808152600061a0366080830187619681565b85602084015284604084015282810360608401526193b48185619c9a565b60808152600061a0676080830187619681565b828103602084015261a0798187619681565b905084604084015282810360608401526193b48185619c9a565b6001600160a01b0383168152604060208201526000616d1e6040830184619681565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a0ed81601a85016020880161965d565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a12a81601c84016020880161965d565b01601c01949350505050565b602081526000614f326020830184619681565b6040516060810167ffffffffffffffff8111828210171561a16c5761a16c619aff565b60405290565b60008067ffffffffffffffff84111561a18d5761a18d619aff565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a1bc5761a1bc619aff565b60405283815290508082840185101561a1d457600080fd5b6170ed84602083018561965d565b600082601f83011261a1f357600080fd5b614f328383516020850161a172565b60006020828403121561a21457600080fd5b815167ffffffffffffffff81111561a22b57600080fd5b614e208482850161a1e2565b6000835161a24981846020880161965d565b83519083019061a25d81836020880161965d565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a29e81601a85016020880161965d565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a2db81603384016020880161965d565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006176e86060830184619681565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f326080830184619681565b60006020828403121561a39b57600080fd5b815167ffffffffffffffff81111561a3b257600080fd5b8201601f8101841361a3c357600080fd5b614e208482516020840161a172565b6000855161a3e4818460208a0161965d565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a41e816001840160208a0161965d565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a45c81600284016020890161965d565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a49e81600284016020880161965d565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a4e96040830184619681565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a56081601f85016020870161965d565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a5cd6040830184619681565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a61f6040830184619681565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a69681601485016020870161965d565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061a6dd6040830185619681565b8281036020840152614f2e8185619681565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a75681600185016020870161965d565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a79c81846020870161965d565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a84f81604b85016020870161965d565b91909101604b0192915050565b600060ff821660ff810361a8725761a872619e4c565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a8d981602985016020870161965d565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f326080830184619681565b60006020828403121561a93f57600080fd5b815167ffffffffffffffff81111561a95657600080fd5b82016060818503121561a96857600080fd5b61a97061a149565b81518060030b811461a98157600080fd5b8152602082015167ffffffffffffffff81111561a99d57600080fd5b61a9a98682850161a1e2565b602083015250604082015167ffffffffffffffff81111561a9c957600080fd5b61a9d58682850161a1e2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161aa4181602185016020870161965d565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161ac2d81602185016020880161965d565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161ac6a81602e84016020880161965d565b01602e01949350505050565b6000825161ac8881846020870161965d565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a8d981602985016020870161965d565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161ad4e81602285016020870161965d565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161ad9381600e85016020870161965d565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161ae7181601885016020880161965d565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161aeae81601c84016020880161965d565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161afb481846020870161965d565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417614e2457614e24619e4c565b6001815b600184111561b0355780850481111561b0195761b019619e4c565b600184161561b02757908102905b60019390931c92800261affe565b935093915050565b60008261b04c57506001614e24565b8161b05957506000614e24565b816001811461b06f576002811461b0795761b095565b6001915050614e24565b60ff84111561b08a5761b08a619e4c565b50506001821b614e24565b5060208310610133831016604e8410600b841016171561b0b8575081810a614e24565b61b0c5600019848461affa565b806000190482111561b0d95761b0d9619e4c565b029392505050565b6000614f32838361b03d565b81810360008312801583831316838312821617156187fd576187fd619e4c565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b14581601c85016020870161965d565b91909101601c0192915050565b6000600019820361b1655761b165619e4c565b5060010190565b60008161b17b5761b17b619e4c565b506000190190565b6000835161b19581846020880161965d565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161b1cf81600184016020880161965d565b0160010194935050505056fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c8063660b9de014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c1828401846103a2565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610498565b6100ff60408a0160208b01610504565b8960400135338660405161011896959493929190610526565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b1660208201526000602083013567ffffffffffffffff81168082146102ed57600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261032a57600080fd5b830160208101903567ffffffffffffffff81111561034757600080fd5b80360382131561035657600080fd5b60608085015261036a60808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103b457600080fd5b813567ffffffffffffffff8111156103cb57600080fd5b8201601f810184136103dc57600080fd5b803567ffffffffffffffff8111156103f6576103f6610373565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561046257610462610373565b60405281815282820160200186101561047a57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104cd57600080fd5b83018035915067ffffffffffffffff8211156104e857600080fd5b6020019150368190038213156104fd57600080fd5b9250929050565b60006020828403121561051657600080fd5b61051f8261017d565b9392505050565b60a08152600061053a60a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105a457602081870181015184830182015201610588565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122002711b914cfa85869597d761ee7a81ae9c55589f2201dbf0c65836b421bff96564736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201bc2c2e5533a7390cd5c9f230b641bee17c3057fdf7a0f92b4302cd8cea1ce6764736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a26469706673582212204a2268975f088dea0c025591efb2b0ff98ddc080ba9d663d379e21327fd63def64736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f4968061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c806385226c811161012a578063ba9adeef116100bd578063dde7e9671161008c578063fa7626d411610071578063fa7626d41461037f578063fbc611c81461038c578063fdad0ad01461039457600080fd5b8063dde7e9671461036f578063e20c9f711461037757600080fd5b8063ba9adeef1461034f578063bed3e81314610357578063ceccfab31461035f578063d5a446891461036757600080fd5b8063b5508aa9116100f9578063b5508aa91461031f578063b7f0583614610327578063ba414fa61461032f578063ba800c911461034757600080fd5b806385226c81146102e5578063916a17c6146102fa578063ae9da0881461030f578063b0464fdc1461031757600080fd5b806339cbb457116101bd5780635006fd801161018c5780636221b509116101715780636221b509146102c057806366d9a9a0146102c857806383ababa9146102dd57600080fd5b80635006fd80146102b05780635d72228f146102b857600080fd5b806339cbb457146102905780633e5e3c23146102985780633f7286f4146102a05780634ffab9de146102a857600080fd5b806320dee15f116101f957806320dee15f14610263578063264b524c1461026b5780632ade38801461027357806336431b3f1461028857600080fd5b80630a9254e41461022b5780631238212c146102355780631e63d2b91461023d5780631ed7831c14610245575b600080fd5b61023361039c565b005b610233610eec565b6102336112c1565b61024d6116d4565b60405161025a9190619611565b60405180910390f35b610233611736565b610233611b13565b61027b611d4e565b60405161025a91906196ad565b610233611e90565b61023361204f565b61024d6121d9565b61024d612239565b610233612299565b610233612536565b6102336129f7565b610233612d49565b6102d0612f6e565b60405161025a9190619813565b6102336130f0565b6102ed6131ed565b60405161025a91906198b1565b6103026132bd565b60405161025a9190619928565b6102336133b8565b610302613560565b6102ed61365b565b61023361372b565b61033761390a565b604051901515815260200161025a565b6102336139de565b610233613b0d565b610233613cb6565b610233613e5f565b6102336141c4565b610233614461565b61024d6148a0565b601f546103379060ff1681565b610233614900565b610233614c7c565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680549091166112341790556040516103e290619524565b604051809103906000f0801580156103fe573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260255491516024810193909352921660448201526104e2919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614e0b565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa1580156105a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c891906199bf565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161060c90619531565b604051809103906000f080158015610628573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b1580156106c457600080fd5b505af11580156106d8573d6000803e3d6000fd5b5050505060008060006040516106ed9061953e565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610729573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560205460405160129360019384936000939192169061077f9061954b565b61078e969594939291906199e8565b604051809103906000f0801580156107aa573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b1580156108bf57600080fd5b505af11580156108d3573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561095357600080fd5b505af1158015610967573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156109bc57600080fd5b505af11580156109d0573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190619add565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afd9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610be657600080fd5b505af1158015610bfa573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190619add565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ce457600080fd5b505af1158015610cf8573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d909190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b50506040805160a0810182526103218082526000602080840182815284860193845285519182019095528181526060840181905260808401919091528251602880549551151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009096166001600160a01b0392831617959095178555915160298054919093167fffffffffffffffffffffffff00000000000000000000000000000000000000009190911617909155909350909150602a90610edc9082619bc2565b5060808201518160030155905050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f619190619c81565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110809190619add565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561115c57600080fd5b505af1158015611170573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261120a9288916001600160a01b0316908790600190602890600401619d89565b600060405180830381600087803b15801561122457600080fd5b505af1158015611238573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af9190619c81565b90506112bb8382614e2a565b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113369190619c81565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039092166084820152919250908190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561144157600080fd5b505af1158015611455573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216918b9189918491634d8943bb916004808201926020929091908290030181865afa158015611527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154b9190619c81565b8a896028604051611563989796959493929190619dea565b60405180910390a3602080546026546040516001600160a01b039283169363048ae42c936115ab9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611607928a916001600160a01b03169089908890602890600401619d89565b600060405180830381600087803b15801561162157600080fd5b505af1158015611635573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac9190619c81565b90506116cc836116bc8888619e7b565b6116c69190619e7b565b82614e2a565b505050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561172c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161170e575b5050505050905090565b601f54604080518082018252601a81527f476174657761795a45564d55706772616465546573742e736f6c00000000000060208083019190915282519081019092526000825260255461179b936001600160a01b036101009091048116939116614ea9565b601f546021546025546040516370a0823160e01b81526001600160a01b03918216600482015261010090930481169260019260009216906370a0823190602401602060405180830381865afa1580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190619c81565b6040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0385166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156118a957600080fd5b505af11580156118bd573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d355789060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b49190619c81565b600060286040516119cb9796959493929190619e8e565b60405180910390a360265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03841690637c0dcb5f9060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611a5f9287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015611a7957600080fd5b505af1158015611a8d573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b049190619c81565b90506112bb6116c68484619e7b565b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216926397d340f5926004808401938290030181865afa158015611b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b959190619c81565b611ba0906001619f36565b67ffffffffffffffff811115611bb857611bb8619aff565b6040519080825280601f01601f191660200182016040528015611be2576020820181803683370190505b50602a90611bf09082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611c7657600080fd5b505af1158015611c8a573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611d20926002916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015611d3a57600080fd5b505af11580156112bb573d6000803e3d6000fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611e8757600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611e70578382906000526020600020018054611de390619b2e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0f90619b2e565b8015611e5c5780601f10611e3157610100808354040283529160200191611e5c565b820191906000526020600020905b815481529060010190602001808311611e3f57829003601f168201915b505050505081526020019060010190611dc4565b505050508152505081526020019060010190611d72565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611f8a57600080fd5b505af1158015611f9e573d6000803e3d6000fd5b5050602080546040516001600160a01b03909116935063048ae42c9250015b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001916001600160a01b03169087908390602890600401619d89565b600060405180830381600087803b15801561203457600080fd5b505af1158015612048573d6000803e3d6000fd5b5050505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561214957600080fd5b505af115801561215d573d6000803e3d6000fd5b5050602080546040516001600160a01b039091169350631cb5ea759250015b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001600160a01b03909116908690600190602890600401619f49565b6060601880548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516000936002936001600160a01b0316926397d340f592600480830193928290030181865afa1580156122fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123209190619c81565b61232a9190619fa3565b67ffffffffffffffff81111561234257612342619aff565b6040519080825280601f01601f19166020018201604052801561236c576020820181803683370190505b5060208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b03909216926397d340f5926004808401938290030181865afa1580156123d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f59190619c81565b6123ff9190619fa3565b61240a906001619f36565b67ffffffffffffffff81111561242257612422619aff565b6040519080825280601f01601f19166020018201604052801561244c576020820181803683370190505b50602a9061245a9082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156124e057600080fd5b505af11580156124f4573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c9150603401611fbd565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ab9190619c81565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156125fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126219190619c81565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561271557600080fd5b505af1158015612729573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561279b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127bf9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561281e57600080fd5b505af1158015612832573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250633b283933915060340160405160208183030381529060405288848660286040518663ffffffff1660e01b81526004016128a3959493929190619fde565b600060405180830381600087803b1580156128bd57600080fd5b505af11580156128d1573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129489190619c81565b90506129548682614e2a565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190619c81565b90506129d58682614e2a565b6027546129ed9086906001600160a01b031631614e2a565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6c9190619c81565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ae157600080fd5b505af1158015612af5573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8b9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612bea57600080fd5b505af1158015612bfe573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352612c939287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015612cad57600080fd5b505af1158015612cc1573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d389190619c81565b9050612d448282614e2a565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbe9190619c81565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015612e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4f9190619add565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612eb457600080fd5b505af1158015612ec8573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052858460286040518563ffffffff1660e01b8152600401612f37949392919061a023565b600060405180830381600087803b158015612f5157600080fd5b505af1158015612f65573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611e875783829060005260206000209060020201604051806040016040529081600082018054612fc590619b2e565b80601f0160208091040260200160405190810160405280929190818152602001828054612ff190619b2e565b801561303e5780601f106130135761010080835404028352916020019161303e565b820191906000526020600020905b81548152906001019060200180831161302157829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156130d857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116130855790505b50505050508152505081526020019060010190612f92565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561317557600080fd5b505af1158015613189573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7c0dcb5f000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637c0dcb5f9350611d20929160019116602860248401619efc565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611e8757838290600052602060002001805461323090619b2e565b80601f016020809104026020016040519081016040528092919081815260200182805461325c90619b2e565b80156132a95780601f1061327e576101008083540402835291602001916132a9565b820191906000526020600020905b81548152906001019060200180831161328c57829003601f168201915b505050505081526020019060010190613211565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611e875760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156133a057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161334d5790505b505050505081525050815260200190600101906132e1565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f60ee1247000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134b257600080fd5b505af11580156134c6573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250631cb5ea75915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001600160a01b03909116908690600090602890600401619f49565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611e875760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561364357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135f05790505b50505050508152505081526020019060010190613584565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611e8757838290600052602060002001805461369e90619b2e565b80601f01602080910402602001604051908101604052809291908181526020018280546136ca90619b2e565b80156137175780601f106136ec57610100808354040283529160200191613717565b820191906000526020600020905b8154815290600101906020018083116136fa57829003601f168201915b50505050508152602001906001019061367f565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561382e57600080fd5b505af1158015613842573d6000803e3d6000fd5b505060215460255460265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf9060340160408051601f19818403018152908290526138c291869060019060289061a054565b60405180910390a3602080546026546040516001600160a01b0392831693631cb5ea759361217c9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60085460009060ff1615613922575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156139b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d79190619c81565b1415905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613a6357600080fd5b505af1158015613a77573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611d20926000916001600160a01b031690602890600401619efc565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613c0757600080fd5b505af1158015613c1b573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926000916001600160a01b0316908790600190602890600401619d89565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f60ee1247000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613db057600080fd5b505af1158015613dc4573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001916001600160a01b0316908790600090602890600401619d89565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed49190619c81565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190619add565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613fd857600080fd5b505af1158015613fec573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b15801561404f57600080fd5b505af1158015614063573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156140ed57600080fd5b505af1158015614101573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526141969287916001600160a01b031690602890600401619efc565b600060405180830381600087803b1580156141b057600080fd5b505af11580156116cc573d6000803e3d6000fd5b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516000936002936001600160a01b0316926397d340f592600480830193928290030181865afa158015614227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424b9190619c81565b6142559190619fa3565b67ffffffffffffffff81111561426d5761426d619aff565b6040519080825280601f01601f191660200182016040528015614297576020820181803683370190505b5060208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b03909216926397d340f5926004808401938290030181865afa1580156142fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143209190619c81565b61432a9190619fa3565b614335906001619f36565b67ffffffffffffffff81111561434d5761434d619aff565b6040519080825280601f01601f191660200182016040528015614377576020820181803683370190505b50602a906143859082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561440b57600080fd5b505af115801561441f573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250631cb5ea75915060340161217c565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156144b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d69190619c81565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454c9190619c81565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156145ca57600080fd5b505af11580156145de573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015614650573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146749190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156146d357600080fd5b505af11580156146e7573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052878460286040518563ffffffff1660e01b8152600401614756949392919061a023565b600060405180830381600087803b15801561477057600080fd5b505af1158015614784573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156147d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fb9190619c81565b90506148078582614e2a565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061487c9190619c81565b90506148888582614e2a565b602754612f659085906001600160a01b031631614e2a565b6060601580548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149759190619c81565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614a0657600080fd5b505af1158015614a1a573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015614aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b119190619c81565b60006028604051614b289796959493929190619e8e565b60405180910390a3602080546026546040516001600160a01b0392831693637c0dcb5f93614b709316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352614bc89287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015614be257600080fd5b505af1158015614bf6573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6d9190619c81565b9050612d446116c68484619e7b565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa158015614ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cf19190619c81565b6021549091506001600160a01b031663a9059cbb610123614d13600185619e7b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015614d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d9a9190619add565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024016140d3565b6000614e15619558565b614e20848483614ebe565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614e9557600080fd5b505afa1580156116cc573d6000803e3d6000fd5b614eb1619558565b6120488585858486614f39565b600080614ecb8584615039565b9050614f2e6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f1992919061a093565b60405160208183030381529060405285615045565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015614fab57600080fd5b505af1925050508015614fbc575060015b614fd157614fcc87878787615073565b612f65565b614fdd87878787615073565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561501857600080fd5b505af115801561502c573d6000803e3d6000fd5b5050505050505050505050565b6000614f32838361508c565b60c081015151600090156150695761506284848460c001516150a7565b9050614f32565b615062848461524d565b600061507f8483615338565b9050612048858285615344565b6000615098838361570e565b614f3283836020015184615045565b6000806150b261571e565b905060006150c086836157f1565b905060006150d78260600151836020015185615c97565b905060006150e783838989615ea9565b905060006150f482616d26565b602081015181519192509060030b156151675789826040015160405160200161511e92919061a0b5565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261515e9160040161a136565b60405180910390fd5b60006151aa6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616ef5565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906151fd90849060040161a136565b602060405180830381865afa15801561521a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061523e91906199bf565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906152a290879060040161a136565b600060405180830381865afa1580156152bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152e7919081019061a202565b90506000615315828560405160200161530192919061a237565b6040516020818303038152906040526170f5565b90506001600160a01b038116614e2057848460405160200161511e92919061a266565b60006150988383617108565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa1580156153e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906154049190619c81565b9050806155ab57600061541686617114565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506154a1905b6040805180820182526000808252602091820152815180830190925284518252808501908201529061720c565b806154ad575060008451115b15615530576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906154f9908890889060040161a093565b600060405180830381600087803b15801561551357600080fd5b505af1158015615527573d6000803e3d6000fd5b505050506155a5565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561558c57600080fd5b505af11580156155a0573d6000803e3d6000fd5b505050505b50612048565b8060006155b782617114565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061561990615474565b80615625575060008551115b156156aa576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90615673908a908a908a9060040161a311565b600060405180830381600087803b15801561568d57600080fd5b505af11580156156a1573d6000803e3d6000fd5b50505050612f65565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b15801561501857600080fd5b61571a82826000617220565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906157a590849060040161a342565b600060405180830381865afa1580156157c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157ea919081019061a389565b9250505090565b6158236040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061586e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61587785617323565b6020820152600061588786617708565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156158c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158f1919081019061a389565b8683856020015160405160200161590b949392919061a3d2565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061596390859060040161a136565b600060405180830381865afa158015615980573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526159a8919081019061a389565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906159f090849060040161a4d6565b602060405180830381865afa158015615a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615a319190619add565b615a46578160405160200161511e919061a528565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615a8b90849060040161a5ba565b600060405180830381865afa158015615aa8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ad0919081019061a389565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615b1790849060040161a60c565b602060405180830381865afa158015615b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615b589190619add565b15615bed576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615ba290849060040161a60c565b600060405180830381865afa158015615bbf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615be7919081019061a389565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615c12919061a65e565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615c3e92919061a6ca565b600060405180830381865afa158015615c5b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615c83919081019061a389565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615cb35790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615d1357615d1361a6ef565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615d6757615d6761a6ef565b602002602001018190525084604051602001615d83919061a71e565b60405160208183030381529060405281600281518110615da557615da561a6ef565b602002602001018190525082604051602001615dc1919061a78a565b60405160208183030381529060405281600381518110615de357615de361a6ef565b60200260200101819052506000615df982616d26565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615e8a906040805180820182526000808252602091820152815180830190925284518252808501908201529061798b565b615e9f578560405160200161511e919061a7cb565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615ef9565b511590565b61606d57826020015115615fb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161515e565b8260c001511561606d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161515e565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161608657905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806160e19061a85c565b935060ff16815181106160f6576160f661a6ef565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616147919061a87b565b6040516020818303038152906040528282806161629061a85c565b935060ff16815181106161775761617761a6ef565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806161c49061a85c565b935060ff16815181106161d9576161d961a6ef565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806162269061a85c565b935060ff168151811061623b5761623b61a6ef565b602002602001018190525087602001518282806162579061a85c565b935060ff168151811061626c5761626c61a6ef565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806162b99061a85c565b935060ff16815181106162ce576162ce61a6ef565b6020908102919091010152875182826162e68161a85c565b935060ff16815181106162fb576162fb61a6ef565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806163489061a85c565b935060ff168151811061635d5761635d61a6ef565b6020026020010181905250616371466179ec565b828261637c8161a85c565b935060ff16815181106163915761639161a6ef565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806163de9061a85c565b935060ff16815181106163f3576163f361a6ef565b60200260200101819052508682828061640b9061a85c565b935060ff16815181106164205761642061a6ef565b60209081029190910101528551156165475760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826164718161a85c565b935060ff16815181106164865761648661a6ef565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906164d690899060040161a136565b600060405180830381865afa1580156164f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261651b919081019061a389565b82826165268161a85c565b935060ff168151811061653b5761653b61a6ef565b60200260200101819052505b8460200151156166175760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826165908161a85c565b935060ff16815181106165a5576165a561a6ef565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806165f29061a85c565b935060ff16815181106166075761660761a6ef565b60200260200101819052506167de565b61664f615ef48660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6166e25760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826166928161a85c565b935060ff16815181106166a7576166a761a6ef565b60200260200101819052508460a001516040516020016166c7919061a71e565b6040516020818303038152906040528282806165f29061a85c565b8460c0015115801561672557506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261672390511590565b155b156167de5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826167698161a85c565b935060ff168151811061677e5761677e61a6ef565b602002602001018190525061679288617a8c565b6040516020016167a2919061a71e565b6040516020818303038152906040528282806167bd9061a85c565b935060ff16815181106167d2576167d261a6ef565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261681290511590565b6168a75760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826168558161a85c565b935060ff168151811061686a5761686a61a6ef565b602002602001018190525084604001518282806168869061a85c565b935060ff168151811061689b5761689b61a6ef565b60200260200101819052505b6060850151156169c85760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826168f08161a85c565b935060ff16815181106169055761690561a6ef565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616974573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261699c919081019061a389565b82826169a78161a85c565b935060ff16815181106169bc576169bc61a6ef565b60200260200101819052505b60e08501515115616a6f5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616a128161a85c565b935060ff1681518110616a2757616a2761a6ef565b6020026020010181905250616a438560e00151600001516179ec565b8282616a4e8161a85c565b935060ff1681518110616a6357616a6361a6ef565b60200260200101819052505b60e08501516020015115616b195760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616abc8161a85c565b935060ff1681518110616ad157616ad161a6ef565b6020026020010181905250616aed8560e00151602001516179ec565b8282616af88161a85c565b935060ff1681518110616b0d57616b0d61a6ef565b60200260200101819052505b60e08501516040015115616bc35760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282616b668161a85c565b935060ff1681518110616b7b57616b7b61a6ef565b6020026020010181905250616b978560e00151604001516179ec565b8282616ba28161a85c565b935060ff1681518110616bb757616bb761a6ef565b60200260200101819052505b60e08501516060015115616c6d5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616c108161a85c565b935060ff1681518110616c2557616c2561a6ef565b6020026020010181905250616c418560e00151606001516179ec565b8282616c4c8161a85c565b935060ff1681518110616c6157616c6161a6ef565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616c8b57616c8b619aff565b604051908082528060200260200182016040528015616cbe57816020015b6060815260200190600190039081616ca95790505b50905060005b8260ff168160ff161015616d1757838160ff1681518110616ce757616ce761a6ef565b6020026020010151828260ff1681518110616d0457616d0461a6ef565b6020908102919091010152600101616cc4565b5093505050505b949350505050565b616d4d6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91616dd39186910161a8e6565b600060405180830381865afa158015616df0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616e18919081019061a389565b90506000616e26868361857b565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401616e5691906198b1565b6000604051808303816000875af1158015616e75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616e9d919081019061a92d565b805190915060030b15801590616eb65750602081015151155b8015616ec55750604081015151155b15615e9f5781600081518110616edd57616edd61a6ef565b602002602001015160405160200161511e919061a9e3565b60606000616f2a8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616f619082905b906186d0565b156170be576000616fde82616fd884616fd2616fa48a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906186f7565b90618759565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506170429082906186d0565b156170ac57604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170a9905b82906187de565b90505b6170b581618804565b92505050614f32565b82156170d757848460405160200161511e92919061abcf565b5050604080516020810190915260008152614f32565b509392505050565b6000808251602084016000f09392505050565b61571a82826001617220565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691617189919061ac76565b600060405180830381855afa9150503d80600081146171c4576040519150601f19603f3d011682016040523d82523d6000602084013e6171c9565b606091505b50915091508180156171dc575060208151115b156171f55780806020019051810190616d1e919061a389565b505060408051602081019091526000815292915050565b6000617218838361886d565b159392505050565b8160a001511561722f57505050565b600061723c848484618948565b9050600061724982616d26565b602081015181519192509060030b1580156172e55750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172e590604080518082018252600080825260209182015281518083019092528451825280850190820152616f5b565b156172f257505050505050565b6040820151511561731257816040015160405160200161511e919061ac92565b8060405160200161511e919061acf0565b606060006173588360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506173bd905b829061798b565b1561742c57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f3290617427908390618ee3565b618804565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261748e905b8290618f6d565b60010361755b57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174f4906170a2565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f3290617427905b83906187de565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ba906173b6565b156176f157604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617622908390619007565b9050600081600183516176359190619e7b565b815181106176455761764561a6ef565b602002602001015190506176e86174276176bb6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618ee3565b95945050505050565b8260405160200161511e919061ad5b565b50919050565b6060600061773d8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061779f906173b6565b156177ad57614f3281618804565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261780c90617487565b60010361787657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f329061742790617554565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178d5906173b6565b156176f157604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061793d908390619007565b90506001815111156179795780600282516179589190619e7b565b815181106179685761796861a6ef565b602002602001015192505050919050565b508260405160200161511e919061ad5b565b8051825160009111156179a057506000614e24565b815183516020850151600092916179b691619f36565b6179c09190619e7b565b9050826020015181036179d7576001915050614e24565b82516020840151819020912014905092915050565b606060006179f9836190ac565b600101905060008167ffffffffffffffff811115617a1957617a19619aff565b6040519080825280601f01601f191660200182016040528015617a43576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617a4d57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617b18905b829061720c565b15617b5857505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bb790617b11565b15617bf757505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c5690617b11565b15617c9657505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cf590617b11565b80617d5a5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d5a90617b11565b15617d9a57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617df990617b11565b80617e5e5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5e90617b11565b15617e9e57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617efd90617b11565b80617f625750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f6290617b11565b15617fa257505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261800190617b11565b806180665750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261806690617b11565b156180a657505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261810590617b11565b1561814557505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526181a490617b11565b156181e457505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261824390617b11565b1561828357505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182e290617b11565b1561832257505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261838190617b11565b156183c157505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261842090617b11565b806184855750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261848590617b11565b156184c557505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261852490617b11565b1561856457505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161511e929060200161ae39565b60608060005b8451811015618606578185828151811061859d5761859d61a6ef565b60200260200101516040516020016185b692919061a237565b6040516020818303038152906040529150600185516185d59190619e7b565b81146185fe57816040516020016185ec919061afa2565b60405160208183030381529060405291505b600101618581565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161861f579050509050838160008151811061864a5761864a61a6ef565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061869e5761869e61a6ef565b602002602001018190525081816002815181106186bd576186bd61a6ef565b6020908102919091010152949350505050565b60208083015183518351928401516000936186ee929184919061918e565b14159392505050565b60408051808201909152600080825260208201526000618729846000015185602001518560000151866020015161929f565b905083602001518161873b9190619e7b565b8451859061874a908390619e7b565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561877e575081614e24565b60208083015190840151600191146187a55750815160208481015190840151829020919020145b80156187d6578251845185906187bc908390619e7b565b90525082516020850180516187d2908390619f36565b9052505b509192915050565b60408051808201909152600080825260208201526187fd8383836193bf565b5092915050565b60606000826000015167ffffffffffffffff81111561882557618825619aff565b6040519080825280601f01601f19166020018201604052801561884f576020820181803683370190505b50905060006020820190506187fd818560200151866000015161946a565b8151815160009190811115618880575081515b6020808501519084015160005b8381101561893957825182518082146189095760001960208710156188e8576001846188ba896020619e7b565b6188c49190619f36565b6188cf90600861afe3565b6188da90600261b0e1565b6188e49190619e7b565b1990505b8181168382168181039114618906579750614e249650505050505050565b50505b618914602086619f36565b9450618921602085619f36565b935050506020816189329190619f36565b905061888d565b5084518651615e9f919061b0ed565b6060600061895461571e565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161897157905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806189cc9061a85c565b935060ff16815181106189e1576189e161a6ef565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618a32919061b10d565b604051602081830303815290604052828280618a4d9061a85c565b935060ff1681518110618a6257618a6261a6ef565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618aaf9061a85c565b935060ff1681518110618ac457618ac461a6ef565b602002602001018190525082604051602001618ae0919061a78a565b604051602081830303815290604052828280618afb9061a85c565b935060ff1681518110618b1057618b1061a6ef565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618b5d9061a85c565b935060ff1681518110618b7257618b7261a6ef565b6020026020010181905250618b8787846194e4565b8282618b928161a85c565b935060ff1681518110618ba757618ba761a6ef565b602090810291909101015285515115618c535760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282618bf98161a85c565b935060ff1681518110618c0e57618c0e61a6ef565b6020026020010181905250618c278660000151846194e4565b8282618c328161a85c565b935060ff1681518110618c4757618c4761a6ef565b60200260200101819052505b856080015115618cc15760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282618c9c8161a85c565b935060ff1681518110618cb157618cb161a6ef565b6020026020010181905250618d27565b8415618d275760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282618d068161a85c565b935060ff1681518110618d1b57618d1b61a6ef565b60200260200101819052505b60408601515115618dc35760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618d718161a85c565b935060ff1681518110618d8657618d8661a6ef565b60200260200101819052508560400151828280618da29061a85c565b935060ff1681518110618db757618db761a6ef565b60200260200101819052505b856060015115618e2d5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618e0c8161a85c565b935060ff1681518110618e2157618e2161a6ef565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618e4b57618e4b619aff565b604051908082528060200260200182016040528015618e7e57816020015b6060815260200190600190039081618e695790505b50905060005b8260ff168160ff161015618ed757838160ff1681518110618ea757618ea761a6ef565b6020026020010151828260ff1681518110618ec457618ec461a6ef565b6020908102919091010152600101618e84565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618f08575081614e24565b81518351602085015160009291618f1e91619f36565b618f289190619e7b565b60208401519091506001908214618f49575082516020840151819020908220145b8015618f6457835185518690618f60908390619e7b565b9052505b50929392505050565b6000808260000151618f91856000015186602001518660000151876020015161929f565b618f9b9190619f36565b90505b83516020850151618faf9190619f36565b81116187fd5781618fbf8161b152565b9250508260000151618ff6856020015183618fda9190619e7b565b8651618fe69190619e7b565b838660000151876020015161929f565b6190009190619f36565b9050618f9e565b606060006190158484618f6d565b619020906001619f36565b67ffffffffffffffff81111561903857619038619aff565b60405190808252806020026020018201604052801561906b57816020015b60608152602001906001900390816190565790505b50905060005b81518110156170ed5761908761742786866187de565b8282815181106190995761909961a6ef565b6020908102919091010152600101619071565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106190f5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619121576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061913f57662386f26fc10000830492506010015b6305f5e1008310619157576305f5e100830492506008015b612710831061916b57612710830492506004015b6064831061917d576064830492506002015b600a8310614e245760010192915050565b600080858411619295576020841161924157600084156191d95760016191b5866020619e7b565b6191c090600861afe3565b6191cb90600261b0e1565b6191d59190619e7b565b1990505b83518116856191e88989619f36565b6191f29190619e7b565b805190935082165b81811461922c578784116192145787945050505050616d1e565b8361921e8161b16c565b9450508284511690506191fa565b6192368785619f36565b945050505050616d1e565b83832061924e8588619e7b565b6192589087619f36565b91505b85821061929357848220808203619280576192768684619f36565b9350505050616d1e565b61928b600184619e7b565b92505061925b565b505b5092949350505050565b600083818685116193aa576020851161935957600085156192eb5760016192c7876020619e7b565b6192d290600861afe3565b6192dd90600261b0e1565b6192e79190619e7b565b1990505b845181166000876192fc8b8b619f36565b6193069190619e7b565b855190915083165b82811461934b57818610619333576193268b8b619f36565b9650505050505050616d1e565b8561933d8161b152565b96505083865116905061930e565b859650505050505050616d1e565b508383206000905b61936b8689619e7b565b82116193a8578583208082036193875783945050505050616d1e565b619392600185619f36565b93505081806193a09061b152565b925050619361565b505b6193b48787619f36565b979650505050505050565b604080518082019091526000808252602082015260006193f1856000015186602001518660000151876020015161929f565b60208087018051918601919091525190915061940d9082619e7b565b8352845160208601516194209190619f36565b810361942f5760008552619461565b8351835161943d9190619f36565b8551869061944c908390619e7b565b905250835161945b9082619f36565b60208601525b50909392505050565b602081106194a25781518352619481602084619f36565b925061948e602083619f36565b915061949b602082619e7b565b905061946a565b60001981156194d15760016194b8836020619e7b565b6194c49061010061b0e1565b6194ce9190619e7b565b90505b9151835183169219169190911790915250565b606060006194f284846157f1565b805160208083015160405193945061950c9390910161b183565b60405160208183030381529060405291505092915050565b610b678061b1dc83390190565b61063d8061bd4383390190565b61106f8061c38083390190565b6120728061d3ef83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161959b6195a0565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161959b6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156196525783516001600160a01b031683526020938401939092019160010161962b565b509095945050505050565b60005b83811015619678578181015183820152602001619660565b50506000910152565b6000815180845261969981602086016020860161965d565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561978f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352619779848651619681565b602095860195909450929092019160010161973f565b5091975050506020948501949290920191506001016196d5565b50929695505050505050565b600081518084526020840193506020830160005b828110156198095781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016197c9565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261987f6040880182619681565b905060208201519150868103602088015261989a81836197b5565b96505050602093840193919091019060010161983b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619913858351619681565b945060209384019391909101906001016198d9565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526199a960408701826197b5565b9550506020938401939190910190600101619950565b6000602082840312156199d157600080fd5b81516001600160a01b0381168114614f3257600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619aa2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152619ac360c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215619aef57600080fd5b81518015158114614f3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c90821680619b4257607f821691505b602082108103617702577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115612d4457806000526020600020601f840160051c81016020851015619ba25750805b601f840160051c820191505b818110156120485760008155600101619bae565b815167ffffffffffffffff811115619bdc57619bdc619aff565b619bf081619bea8454619b2e565b84619b7b565b6020601f821160018114619c245760008315619c0c5750848201515b600019600385901b1c1916600184901b178455612048565b600084815260208120601f198516915b82811015619c545787850151825560209485019460019092019101619c34565b5084821015619c725786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215619c9357600080fd5b5051919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a0606085015260008154619ce481619b2e565b8060a08801526001821660008114619d035760018114619d3d57619d71565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b8901019350619d71565b84600052602060002060005b83811015619d685781548a820160c00152600190910190602001619d49565b890160c0019450505b50505060038401546080860152809250505092915050565b60c081526000619d9c60c0830189619681565b8760208401526001600160a01b03871660408401528281036060840152619dc38187619681565b905084608084015282810360a0840152619ddd8185619c9a565b9998505050505050505050565b61010081526000619dff61010083018b619681565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a0840152619e328187619681565b90508460c084015282810360e084015261523e8185619c9a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614e2457614e24619e4c565b61010081526000619ea361010083018a619681565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e085015250619eee6020820185619c9a565b9a9950505050505050505050565b608081526000619f0f6080830187619681565b8560208401526001600160a01b038516604084015282810360608401526193b48185619c9a565b80820180821115614e2457614e24619e4c565b60a081526000619f5c60a0830188619681565b6001600160a01b03871660208401528281036040840152619f7d8187619681565b90508460608401528281036080840152619f978185619c9a565b98975050505050505050565b600082619fd9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60a081526000619ff160a0830188619681565b866020840152856040840152828103606084015261a00f8186619681565b90508281036080840152619f978185619c9a565b60808152600061a0366080830187619681565b85602084015284604084015282810360608401526193b48185619c9a565b60808152600061a0676080830187619681565b828103602084015261a0798187619681565b905084604084015282810360608401526193b48185619c9a565b6001600160a01b0383168152604060208201526000616d1e6040830184619681565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a0ed81601a85016020880161965d565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a12a81601c84016020880161965d565b01601c01949350505050565b602081526000614f326020830184619681565b6040516060810167ffffffffffffffff8111828210171561a16c5761a16c619aff565b60405290565b60008067ffffffffffffffff84111561a18d5761a18d619aff565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a1bc5761a1bc619aff565b60405283815290508082840185101561a1d457600080fd5b6170ed84602083018561965d565b600082601f83011261a1f357600080fd5b614f328383516020850161a172565b60006020828403121561a21457600080fd5b815167ffffffffffffffff81111561a22b57600080fd5b614e208482850161a1e2565b6000835161a24981846020880161965d565b83519083019061a25d81836020880161965d565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a29e81601a85016020880161965d565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a2db81603384016020880161965d565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006176e86060830184619681565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f326080830184619681565b60006020828403121561a39b57600080fd5b815167ffffffffffffffff81111561a3b257600080fd5b8201601f8101841361a3c357600080fd5b614e208482516020840161a172565b6000855161a3e4818460208a0161965d565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a41e816001840160208a0161965d565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a45c81600284016020890161965d565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a49e81600284016020880161965d565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a4e96040830184619681565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a56081601f85016020870161965d565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a5cd6040830184619681565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a61f6040830184619681565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a69681601485016020870161965d565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061a6dd6040830185619681565b8281036020840152614f2e8185619681565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a75681600185016020870161965d565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a79c81846020870161965d565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a84f81604b85016020870161965d565b91909101604b0192915050565b600060ff821660ff810361a8725761a872619e4c565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a8d981602985016020870161965d565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f326080830184619681565b60006020828403121561a93f57600080fd5b815167ffffffffffffffff81111561a95657600080fd5b82016060818503121561a96857600080fd5b61a97061a149565b81518060030b811461a98157600080fd5b8152602082015167ffffffffffffffff81111561a99d57600080fd5b61a9a98682850161a1e2565b602083015250604082015167ffffffffffffffff81111561a9c957600080fd5b61a9d58682850161a1e2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161aa4181602185016020870161965d565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161ac2d81602185016020880161965d565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161ac6a81602e84016020880161965d565b01602e01949350505050565b6000825161ac8881846020870161965d565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a8d981602985016020870161965d565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161ad4e81602285016020870161965d565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161ad9381600e85016020870161965d565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161ae7181601885016020880161965d565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161aeae81601c84016020880161965d565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161afb481846020870161965d565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417614e2457614e24619e4c565b6001815b600184111561b0355780850481111561b0195761b019619e4c565b600184161561b02757908102905b60019390931c92800261affe565b935093915050565b60008261b04c57506001614e24565b8161b05957506000614e24565b816001811461b06f576002811461b0795761b095565b6001915050614e24565b60ff84111561b08a5761b08a619e4c565b50506001821b614e24565b5060208310610133831016604e8410600b841016171561b0b8575081810a614e24565b61b0c5600019848461affa565b806000190482111561b0d95761b0d9619e4c565b029392505050565b6000614f32838361b03d565b81810360008312801583831316838312821617156187fd576187fd619e4c565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b14581601c85016020870161965d565b91909101601c0192915050565b6000600019820361b1655761b165619e4c565b5060010190565b60008161b17b5761b17b619e4c565b506000190190565b6000835161b19581846020880161965d565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161b1cf81600184016020880161965d565b0160010194935050505056fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c80635bcfd61614610033578063660b9de01461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610169565b610073565b34801561005f57600080fd5b5061003161006e366004610221565b6100ee565b6060811561008a576100878284018461028d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610383565b6100c560408a0160208b016103ef565b896040013533866040516100de9695949392919061045a565b60405180910390a1505050505050565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c768160405161011d919061051c565b60405180910390a150565b60006060828403121561013a57600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016457600080fd5b919050565b60008060008060006080868803121561018157600080fd5b853567ffffffffffffffff81111561019857600080fd5b6101a488828901610128565b9550506101b360208701610140565b935060408601359250606086013567ffffffffffffffff8111156101d657600080fd5b8601601f810188136101e757600080fd5b803567ffffffffffffffff8111156101fe57600080fd5b88602082840101111561021057600080fd5b959894975092955050506020019190565b60006020828403121561023357600080fd5b813567ffffffffffffffff81111561024a57600080fd5b61025684828501610128565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561029f57600080fd5b813567ffffffffffffffff8111156102b657600080fd5b8201601f810184136102c757600080fd5b803567ffffffffffffffff8111156102e1576102e161025e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561034d5761034d61025e565b60405281815282820160200186101561036557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126103b857600080fd5b83018035915067ffffffffffffffff8211156103d357600080fd5b6020019150368190038213156103e857600080fd5b9250929050565b60006020828403121561040157600080fd5b61040a82610140565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a08152600061046e60a08301888a610411565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156104d8576020818701810151848301820152016104bc565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683010192505050979650505050505050565b6020815273ffffffffffffffffffffffffffffffffffffffff61053e83610140565b1660208201526000602083013567ffffffffffffffff811680821461056257600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261059f57600080fd5b830160208101903567ffffffffffffffff8111156105bc57600080fd5b8036038213156105cb57600080fd5b6060808501526105df608085018284610411565b9594505050505056fea2646970667358221220cb26ed07348041180f6631404fac1759ff8efa800dbae7e9722129211743d1d664736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212206cfc8728f3e6a008fa60110012d328f8d2a859ba07c5fdfb6776051dc27a333964736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a264697066735822122070883b1fc1f38da59f714f15aedf2da85315e7fcdd5f1808c397f95c29b3418564736f6c634300081a0033", } // GatewayZEVMInboundTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go index 7c515c247..3cdf826ce 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go @@ -66,7 +66,7 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMOutboundTestMetaData contains all meta data concerning the GatewayZEVMOutboundTest contract. var GatewayZEVMOutboundTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversal\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ff488061003c6000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c806385226c81116101bd578063ba414fa6116100f9578063e20c9f71116100a2578063ec294d9f1161007c578063ec294d9f1461054a578063ef2b539414610552578063fa7626d41461055a578063fb339a1c1461056757600080fd5b8063e20c9f7114610505578063e63ab1e91461050d578063eab7674e1461054257600080fd5b8063d9978513116100d3578063d9978513146104ed578063d9a4fa16146104f5578063e09bc659146104fd57600080fd5b8063ba414fa6146104c5578063c7b388b1146104dd578063c8814d2e146104e557600080fd5b80639c9acd5d11610166578063b0464fdc11610140578063b0464fdc146104a5578063b5508aa9146104ad578063b8f2b821146104b5578063b936be8c146104bd57600080fd5b80639c9acd5d1461048d5780639ca37e9214610495578063a0b2c7b11461049d57600080fd5b806396d9d8761161019757806396d9d8761461047d57806397f7661f14610443578063996b76751461048557600080fd5b806385226c811461044b578063884660a314610460578063916a17c61461046857600080fd5b80633f7286f41161028c5780635cec7db5116102355780636efa04b51161020f5780636efa04b51461042b5780637cec29b0146104335780637f924c4e1461043b578063828d267c1461044357600080fd5b80635cec7db51461040657806366d9a9a01461040e578063671b91e21461042357600080fd5b806351336fb01161026657806351336fb0146103f657806358c9987f146103fe5780635b4c90e1146103a157600080fd5b80633f7286f4146103de57806344b2a40b146103e657806348f4fd07146103ee57600080fd5b80632468bc0f116102f95780632fa381f4116102d35780632fa381f4146103be578063339bd828146103c65780633ab5b199146103ce5780633e5e3c23146103d657600080fd5b80632468bc0f146103995780632948df41146103a15780632ade3880146103a957600080fd5b8063198d5ca41161032a578063198d5ca41461036b5780631c785a14146103735780631ed7831c1461037b57600080fd5b8063084fafab146103515780630a9254e41461035b57806314b7a6da14610363575b600080fd5b61035961056f565b005b610359610745565b610359611252565b6103596113a2565b610359611625565b610383611f3c565b604051610390919061a1f6565b60405180910390f35b610359611f9e565b610359612469565b6103b1612652565b604051610390919061a292565b610359612794565b610359612986565b610359612ad2565b610383612c83565b610383612ce3565b610359612d43565b610359612ecb565b610359613016565b610359613161565b610359613316565b6104166134cd565b604051610390919061a3f8565b61035961364f565b61035961379d565b610359613b41565b610359613db4565b610359613ded565b610453613f99565b604051610390919061a496565b610359614069565b610470614348565b604051610390919061a50d565b610359614443565b610359614596565b6103596146ea565b61035961483a565b610359614971565b610470614b2c565b610453614c27565b610359614cf7565b610359614e45565b6104cd615128565b6040519015158152602001610390565b6103596151fc565b6103596153ba565b6103596154fc565b6103596155c4565b610359615782565b61038361593b565b6105347f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b604051908152602001610390565b61035961599b565b610359615ae9565b610359615c98565b601f546104cd9060ff1681565b610359615e49565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156105fe57600080fd5b505af1158015610612573d6000803e3d6000fd5b505050507f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76602c604051610646919061a6c6565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156106a857600080fd5b505af11580156106bc573d6000803e3d6000fd5b50506020546024546040517f717d335f0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063717d335f93506107119290911690602c9060040161a6d9565b600060405180830381600087803b15801561072b57600080fd5b505af115801561073f573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161078b9061a109565b604051809103906000f0801580156107a7573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602554915160248101939093529216604482015261088b919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052615ffc565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610971919061a6fb565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516109b59061a116565b604051809103906000f0801580156109d1573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610a6d57600080fd5b505af1158015610a81573d6000803e3d6000fd5b505050506000806000604051610a969061a123565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610ad2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610b289061a130565b610b379695949392919061a724565b604051809103906000f080158015610b53573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610c6857600080fd5b505af1158015610c7c573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610cfc57600080fd5b505af1158015610d10573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e11919061a819565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea6919061a819565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b919061a819565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015611115573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611139919061a819565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505060408051606081018252600080825260016020808401918252845190810185529182529282018190528151602c8054945167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009095166001600160a01b039290921691909117939093178355909350909150602d9061124d908261a8b1565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156112ab57600080fd5b505af11580156112bf573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561132f57600080fd5b505af1158015611343573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc9150606401610711565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156113f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611417919061a970565b905061142460008261601b565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561147d57600080fd5b505af1158015611491573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561150157600080fd5b505af1158015611515573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561158d57600080fd5b505af11580156115a1573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611618919061a970565b905061124d60008261601b565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561167e57600080fd5b505af1158015611692573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061177d919060040161a989565b600060405180830381600087803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117ff57600080fd5b505af1158015611813573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561187057600080fd5b505af1158015611884573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061196f919060040161a989565b600060405180830381600087803b15801561198957600080fd5b505af115801561199d573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119f157600080fd5b505af1158015611a05573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a6257600080fd5b505af1158015611a76573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611aca57600080fd5b505af1158015611ade573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b158015611b5157600080fd5b505af1158015611b65573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611bc257600080fd5b505af1158015611bd6573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611c4e57600080fd5b505af1158015611c62573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611cbf57600080fd5b505af1158015611cd3573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d2757600080fd5b505af1158015611d3b573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db3919061a970565b9050611dc060008261601b565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611e1957600080fd5b505af1158015611e2d573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611ea557600080fd5b505af1158015611eb9573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f30919061a970565b905061124d838261601b565b60606016805480602002602001604051908101604052809291908181526020018280548015611f9457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f76575b5050505050905090565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611fef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612013919061a970565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061a970565b6024546040519192506001600160a01b031631906000906120ac9060200161a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061220993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054612239936001600160a01b03928316928c92169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561229a57600080fd5b505af11580156122ae573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506123059286928c92911690889060040161aa8a565b600060405180830381600087803b15801561231f57600080fd5b505af1158015612333573d6000803e3d6000fd5b50506022546027546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612386573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123aa919061a970565b90506123bf6123b9888861aaf3565b8261601b565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612410573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612434919061a970565b9050612440868261601b565b61245f61244d898761ab06565b6024546001600160a01b03163161601b565b5050505050505050565b600060405160200161247a9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561252857600080fd5b505af115801561253c573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156125ac57600080fd5b505af11580156125c0573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061261c92869260009260019290911690899060040161ab19565b600060405180830381600087803b15801561263657600080fd5b505af115801561264a573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561278b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156127745783829060005260206000200180546126e79061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546127139061a5a4565b80156127605780601f1061273557610100808354040283529160200191612760565b820191906000526020600020905b81548152906001019060200180831161274357829003601f168201915b5050505050815260200190600101906126c8565b505050508152505081526020019060010190612676565b50505050905090565b6040516001906000906127a99060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561287357600080fd5b505af1158015612887573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156128e457600080fd5b505af11580156128f8573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061294f9286928992911690889060040161aa8a565b600060405180830381600087803b15801561296957600080fd5b505af115801561297d573d6000803e3d6000fd5b50505050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156129df57600080fd5b505af11580156129f3573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612a6357600080fd5b505af1158015612a77573d6000803e3d6000fd5b50506020546021546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb7693506107119290911690600190600090602c9060040161ab6e565b6000604051602001612ae39061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612b9157600080fd5b505af1158015612ba5573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612c1557600080fd5b505af1158015612c29573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061261c9286921690600190600090899060040161ab19565b60606018805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d9f57600080fd5b505af1158015612db3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612e2357600080fd5b505af1158015612e37573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015612eb057600080fd5b505af1158015612ec4573d6000803e3d6000fd5b5050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f2457600080fd5b505af1158015612f38573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612fa857600080fd5b505af1158015612fbc573d6000803e3d6000fd5b50506020546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb76935061071192600092600192911690602c9060040161ab6e565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561308257600080fd5b505af1158015613096573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156130f357600080fd5b505af1158015613107573d6000803e3d6000fd5b50506020546021546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb76935061071192909116906001908590602c9060040161ab6e565b60006040516020016131729061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561322057600080fd5b505af1158015613234573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156132a457600080fd5b505af11580156132b8573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600092911690899060040161ab19565b60405160019060009061332b9060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156133f557600080fd5b505af1158015613409573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561346657600080fd5b505af115801561347a573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061294f90849087908590889060040161aa8a565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561278b57838290600052602060002090600202016040518060400160405290816000820180546135249061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546135509061a5a4565b801561359d5780601f106135725761010080835404028352916020019161359d565b820191906000526020600020905b81548152906001019060200180831161358057829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561363757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135e45790505b505050505081525050815260200190600101906134f1565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156136bb57600080fd5b505af11580156136cf573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561372c57600080fd5b505af1158015613740573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926001921690602c9060040161ab6e565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156137ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613811919061a970565b905061381e60008261601b565b600060405160200161382f9061a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561391d57600080fd5b505af1158015613931573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061398c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526027546020546139bd936001600160a01b0392831692600192169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a1e57600080fd5b505af1158015613a32573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613a90938793811692600192911690899060040161ab19565b600060405180830381600087803b158015613aaa57600080fd5b505af1158015613abe573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b34919061a970565b905061073f60018261601b565b6000604051602001613b529061a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c4057600080fd5b505af1158015613c54573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613caf93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613ce0936001600160a01b0392831692600192169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015613d4257600080fd5b505af1158015613d56573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061261c938793811692600192911690899060040161ab19565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401611d72565b6000604051602001613dfe9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015613eac57600080fd5b505af1158015613ec0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613f3057600080fd5b505af1158015613f44573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061261c908490600190600090889060040161aa8a565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561278b578382906000526020600020018054613fdc9061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546140089061a5a4565b80156140555780601f1061402a57610100808354040283529160200191614055565b820191906000526020600020905b81548152906001019060200180831161403857829003601f168201915b505050505081526020019060010190613fbd565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156140b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140dd919061a970565b90506140ea60008261601b565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561417957600080fd5b505af115801561418d573d6000803e3d6000fd5b505050507f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76602c6040516141c1919061a6c6565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561422257600080fd5b505af1158015614236573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061429393928316926001921690602c9060040161ab6e565b600060405180830381600087803b1580156142ad57600080fd5b505af11580156142c1573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015614313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614337919061a970565b905061434460018261601b565b5050565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561278b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561442b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116143d85790505b5050505050815250508152602001906001019061436c565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561449f57600080fd5b505af11580156144b3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561452357600080fd5b505af1158015614537573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401612e96565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156145ef57600080fd5b505af1158015614603573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561467357600080fd5b505af1158015614687573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc9150606401610711565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561474357600080fd5b505af1158015614757573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156147c757600080fd5b505af11580156147db573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc9150606401610711565b600060405160200161484b9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561491557600080fd5b505af1158015614929573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401613d28565b6040516001906000906149869060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015614a5057600080fd5b505af1158015614a64573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614ac157600080fd5b505af1158015614ad5573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061294f9286928992911690889060040161aa8a565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561278b5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015614c0f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411614bbc5790505b50505050508152505081526020019060010190614b50565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561278b578382906000526020600020018054614c6a9061a5a4565b80601f0160208091040260200160405190810160405280929190818152602001828054614c969061a5a4565b8015614ce35780601f10614cb857610100808354040283529160200191614ce3565b820191906000526020600020905b815481529060010190602001808311614cc657829003601f168201915b505050505081526020019060010190614c4b565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614d6357600080fd5b505af1158015614d77573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614dd457600080fd5b505af1158015614de8573d6000803e3d6000fd5b50506020546021546027546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926001921690602c9060040161ab6e565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614eba919061a970565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f30919061a970565b6024546040519192506001600160a01b03163190600090614f539060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561500157600080fd5b505af1158015615015573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561508557600080fd5b505af1158015615099573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a9591506150ee908490600190600090889060040161aa8a565b600060405180830381600087803b15801561510857600080fd5b505af115801561511c573d6000803e3d6000fd5b50505050505050505050565b60085460009060ff1615615140575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156151d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151f5919061a970565b1415905090565b600060405160200161520d9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156152d757600080fd5b505af11580156152eb573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561534857600080fd5b505af115801561535c573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600192911690899060040161ab19565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561541357600080fd5b505af1158015615427573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561549757600080fd5b505af11580156154ab573d6000803e3d6000fd5b50506020546040517f717d335f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063717d335f915061071190600090602c9060040161a6d9565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561556857600080fd5b505af115801561557c573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa7915060240161068e565b60006040516020016155d59061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561569f57600080fd5b505af11580156156b3573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561571057600080fd5b505af1158015615724573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600192911690899060040161ab19565b60006040516020016157939061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561585d57600080fd5b505af1158015615871573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156158ce57600080fd5b505af11580156158e2573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c92869216906001908690899060040161ab19565b60606015805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156159f457600080fd5b505af1158015615a08573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615a7857600080fd5b505af1158015615a8c573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926000921690602c9060040161ab6e565b6000604051602001615afa9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615ba857600080fd5b505af1158015615bbc573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615c2c57600080fd5b505af1158015615c40573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061261c928692600092911690889060040161aa8a565b6000604051602001615ca99061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615d5757600080fd5b505af1158015615d6b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615ddb57600080fd5b505af1158015615def573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c9286921690600190600090899060040161ab19565b6000604051602001615e5a9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615f0857600080fd5b505af1158015615f1c573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615f8c57600080fd5b505af1158015615fa0573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c92869260009260019290911690899060040161ab19565b600061600661a13d565b61601184848361609a565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561608657600080fd5b505afa15801561264a573d6000803e3d6000fd5b6000806160a78584616115565b905061610a6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016160f592919061aba5565b60405160208183030381529060405285616121565b9150505b9392505050565b600061610e838361614f565b60c081015151600090156161455761613e84848460c0015161616a565b905061610e565b61613e8484616310565b600061615b83836163fb565b61610e83836020015184616121565b600080616175616407565b9050600061618386836164da565b9050600061619a8260600151836020015185616980565b905060006161aa83838989616b92565b905060006161b782617a0f565b602081015181519192509060030b1561622a578982604001516040516020016161e192919061abc7565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526162219160040161a989565b60405180910390fd5b600061626d6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617bde565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906162c090849060040161a989565b602060405180830381865afa1580156162dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616301919061a6fb565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061636590879060040161a989565b600060405180830381865afa158015616382573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163aa919081019061ad01565b905060006163d882856040516020016163c492919061ad36565b604051602081830303815290604052617dde565b90506001600160a01b0381166160115784846040516020016161e192919061ad65565b61434482826000617df1565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061648e90849060040161ae10565b600060405180830381865afa1580156164ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164d3919081019061ae57565b9250505090565b61650c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506165576040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61656085617ef4565b60208201526000616570866182d9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156165b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165da919081019061ae57565b868385602001516040516020016165f4949392919061aea0565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061664c90859060040161a989565b600060405180830381865afa158015616669573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616691919081019061ae57565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906166d990849060040161afa4565b602060405180830381865afa1580156166f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061671a919061a819565b61672f57816040516020016161e1919061aff6565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061677490849060040161b088565b600060405180830381865afa158015616791573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167b9919081019061ae57565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061680090849060040161b0da565b602060405180830381865afa15801561681d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616841919061a819565b156168d6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061688b90849060040161b0da565b600060405180830381865afa1580156168a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168d0919081019061ae57565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016168fb919061b12c565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161692792919061b198565b600060405180830381865afa158015616944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261696c919081019061ae57565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161699c5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106169fc576169fc61b1bd565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110616a5057616a5061b1bd565b602002602001018190525084604051602001616a6c919061b1ec565b60405160208183030381529060405281600281518110616a8e57616a8e61b1bd565b602002602001018190525082604051602001616aaa919061b258565b60405160208183030381529060405281600381518110616acc57616acc61b1bd565b60200260200101819052506000616ae282617a0f565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616b73906040805180820182526000808252602091820152815180830190925284518252808501908201529061855c565b616b8857856040516020016161e1919061b299565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616be2565b511590565b616d5657826020015115616c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616221565b8260c0015115616d56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616221565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616d6f57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616dca9061b32a565b935060ff1681518110616ddf57616ddf61b1bd565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616e30919061b349565b604051602081830303815290604052828280616e4b9061b32a565b935060ff1681518110616e6057616e6061b1bd565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616ead9061b32a565b935060ff1681518110616ec257616ec261b1bd565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616f0f9061b32a565b935060ff1681518110616f2457616f2461b1bd565b60200260200101819052508760200151828280616f409061b32a565b935060ff1681518110616f5557616f5561b1bd565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616fa29061b32a565b935060ff1681518110616fb757616fb761b1bd565b602090810291909101015287518282616fcf8161b32a565b935060ff1681518110616fe457616fe461b1bd565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806170319061b32a565b935060ff16815181106170465761704661b1bd565b602002602001018190525061705a466185bd565b82826170658161b32a565b935060ff168151811061707a5761707a61b1bd565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806170c79061b32a565b935060ff16815181106170dc576170dc61b1bd565b6020026020010181905250868282806170f49061b32a565b935060ff16815181106171095761710961b1bd565b60209081029190910101528551156172305760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261715a8161b32a565b935060ff168151811061716f5761716f61b1bd565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906171bf90899060040161a989565b600060405180830381865afa1580156171dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617204919081019061ae57565b828261720f8161b32a565b935060ff16815181106172245761722461b1bd565b60200260200101819052505b8460200151156173005760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826172798161b32a565b935060ff168151811061728e5761728e61b1bd565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806172db9061b32a565b935060ff16815181106172f0576172f061b1bd565b60200260200101819052506174c7565b617338616bdd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6173cb5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261737b8161b32a565b935060ff16815181106173905761739061b1bd565b60200260200101819052508460a001516040516020016173b0919061b1ec565b6040516020818303038152906040528282806172db9061b32a565b8460c0015115801561740e57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261740c90511590565b155b156174c75760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826174528161b32a565b935060ff16815181106174675761746761b1bd565b602002602001018190525061747b8861865d565b60405160200161748b919061b1ec565b6040516020818303038152906040528282806174a69061b32a565b935060ff16815181106174bb576174bb61b1bd565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526174fb90511590565b6175905760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261753e8161b32a565b935060ff16815181106175535761755361b1bd565b6020026020010181905250846040015182828061756f9061b32a565b935060ff16815181106175845761758461b1bd565b60200260200101819052505b6060850151156176b15760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826175d98161b32a565b935060ff16815181106175ee576175ee61b1bd565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561765d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617685919081019061ae57565b82826176908161b32a565b935060ff16815181106176a5576176a561b1bd565b60200260200101819052505b60e085015151156177585760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826176fb8161b32a565b935060ff16815181106177105761771061b1bd565b602002602001018190525061772c8560e00151600001516185bd565b82826177378161b32a565b935060ff168151811061774c5761774c61b1bd565b60200260200101819052505b60e085015160200151156178025760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826177a58161b32a565b935060ff16815181106177ba576177ba61b1bd565b60200260200101819052506177d68560e00151602001516185bd565b82826177e18161b32a565b935060ff16815181106177f6576177f661b1bd565b60200260200101819052505b60e085015160400151156178ac5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261784f8161b32a565b935060ff16815181106178645761786461b1bd565b60200260200101819052506178808560e00151604001516185bd565b828261788b8161b32a565b935060ff16815181106178a0576178a061b1bd565b60200260200101819052505b60e085015160600151156179565760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826178f98161b32a565b935060ff168151811061790e5761790e61b1bd565b602002602001018190525061792a8560e00151606001516185bd565b82826179358161b32a565b935060ff168151811061794a5761794a61b1bd565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156179745761797461a83b565b6040519080825280602002602001820160405280156179a757816020015b60608152602001906001900390816179925790505b50905060005b8260ff168160ff161015617a0057838160ff16815181106179d0576179d061b1bd565b6020026020010151828260ff16815181106179ed576179ed61b1bd565b60209081029190910101526001016179ad565b5093505050505b949350505050565b617a366040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617abc9186910161b3b4565b600060405180830381865afa158015617ad9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617b01919081019061ae57565b90506000617b0f868361914c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617b3f919061a496565b6000604051808303816000875af1158015617b5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617b86919081019061b3fb565b805190915060030b15801590617b9f5750602081015151155b8015617bae5750604081015151155b15616b885781600081518110617bc657617bc661b1bd565b60200260200101516040516020016161e1919061b4b1565b60606000617c138560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617c4a9082905b906192a1565b15617da7576000617cc782617cc184617cbb617c8d8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906192c8565b9061932a565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617d2b9082906192a1565b15617d9557604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d92905b82906193af565b90505b617d9e816193d5565b9250505061610e565b8215617dc05784846040516020016161e192919061b69d565b505060408051602081019091526000815261610e565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617e0057505050565b6000617e0d84848461943e565b90506000617e1a82617a0f565b602081015181519192509060030b158015617eb65750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617eb690604080518082018252600080825260209182015281518083019092528451825280850190820152617c44565b15617ec357505050505050565b60408201515115617ee35781604001516040516020016161e1919061b744565b806040516020016161e1919061b7a2565b60606000617f298360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617f8e905b829061855c565b15617ffd57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff89083906199d9565b6193d5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261805f905b8290619a63565b60010361812c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180c590617d8b565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff8905b83906193af565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261818b90617f87565b156182c257604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906181f3908390619afd565b905060008160018351618206919061aaf3565b815181106182165761821661b1bd565b602002602001015190506182b9617ff861828c6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906199d9565b95945050505050565b826040516020016161e1919061b80d565b50919050565b6060600061830e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061837090617f87565b1561837e5761610e816193d5565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526183dd90618058565b60010361844757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff890618125565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184a690617f87565b156182c257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061850e908390619afd565b905060018151111561854a578060028251618529919061aaf3565b815181106185395761853961b1bd565b602002602001015192505050919050565b50826040516020016161e1919061b80d565b80518251600091111561857157506000616015565b815183516020850151600092916185879161ab06565b618591919061aaf3565b9050826020015181036185a8576001915050616015565b82516020840151819020912014905092915050565b606060006185ca83619ba2565b600101905060008167ffffffffffffffff8111156185ea576185ea61a83b565b6040519080825280601f01601f191660200182016040528015618614576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461861e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916186e9905b8290619c84565b1561872957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618788906186e2565b156187c857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618827906186e2565b1561886757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188c6906186e2565b8061892b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261892b906186e2565b1561896b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189ca906186e2565b80618a2f5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a2f906186e2565b15618a6f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ace906186e2565b80618b335750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b33906186e2565b15618b7357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bd2906186e2565b80618c375750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c37906186e2565b15618c7757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cd6906186e2565b15618d1657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d75906186e2565b15618db557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e14906186e2565b15618e5457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618eb3906186e2565b15618ef357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f52906186e2565b15618f9257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ff1906186e2565b806190565750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619056906186e2565b1561909657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190f5906186e2565b1561913557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516161e1929060200161b8eb565b60608060005b84518110156191d7578185828151811061916e5761916e61b1bd565b602002602001015160405160200161918792919061ad36565b6040516020818303038152906040529150600185516191a6919061aaf3565b81146191cf57816040516020016191bd919061ba54565b60405160208183030381529060405291505b600101619152565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816191f0579050509050838160008151811061921b5761921b61b1bd565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061926f5761926f61b1bd565b6020026020010181905250818160028151811061928e5761928e61b1bd565b6020908102919091010152949350505050565b60208083015183518351928401516000936192bf9291849190619c98565b14159392505050565b604080518082019091526000808252602082015260006192fa8460000151856020015185600001518660200151619da9565b905083602001518161930c919061aaf3565b8451859061931b90839061aaf3565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561934f575081616015565b60208083015190840151600191146193765750815160208481015190840151829020919020145b80156193a75782518451859061938d90839061aaf3565b90525082516020850180516193a390839061ab06565b9052505b509192915050565b60408051808201909152600080825260208201526193ce838383619ec9565b5092915050565b60606000826000015167ffffffffffffffff8111156193f6576193f661a83b565b6040519080825280601f01601f191660200182016040528015619420576020820181803683370190505b50905060006020820190506193ce8185602001518660000151619f74565b6060600061944a616407565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161946757905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806194c29061b32a565b935060ff16815181106194d7576194d761b1bd565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619528919061ba95565b6040516020818303038152906040528282806195439061b32a565b935060ff16815181106195585761955861b1bd565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806195a59061b32a565b935060ff16815181106195ba576195ba61b1bd565b6020026020010181905250826040516020016195d6919061b258565b6040516020818303038152906040528282806195f19061b32a565b935060ff16815181106196065761960661b1bd565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806196539061b32a565b935060ff16815181106196685761966861b1bd565b602002602001018190525061967d8784619fee565b82826196888161b32a565b935060ff168151811061969d5761969d61b1bd565b6020908102919091010152855151156197495760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826196ef8161b32a565b935060ff16815181106197045761970461b1bd565b602002602001018190525061971d866000015184619fee565b82826197288161b32a565b935060ff168151811061973d5761973d61b1bd565b60200260200101819052505b8560800151156197b75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826197928161b32a565b935060ff16815181106197a7576197a761b1bd565b602002602001018190525061981d565b841561981d5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826197fc8161b32a565b935060ff16815181106198115761981161b1bd565b60200260200101819052505b604086015151156198b95760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826198678161b32a565b935060ff168151811061987c5761987c61b1bd565b602002602001018190525085604001518282806198989061b32a565b935060ff16815181106198ad576198ad61b1bd565b60200260200101819052505b8560600151156199235760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826199028161b32a565b935060ff16815181106199175761991761b1bd565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156199415761994161a83b565b60405190808252806020026020018201604052801561997457816020015b606081526020019060019003908161995f5790505b50905060005b8260ff168160ff1610156199cd57838160ff168151811061999d5761999d61b1bd565b6020026020010151828260ff16815181106199ba576199ba61b1bd565b602090810291909101015260010161997a565b50979650505050505050565b60408051808201909152600080825260208201528151835110156199fe575081616015565b81518351602085015160009291619a149161ab06565b619a1e919061aaf3565b60208401519091506001908214619a3f575082516020840151819020908220145b8015619a5a57835185518690619a5690839061aaf3565b9052505b50929392505050565b6000808260000151619a878560000151866020015186600001518760200151619da9565b619a91919061ab06565b90505b83516020850151619aa5919061ab06565b81116193ce5781619ab58161bada565b9250508260000151619aec856020015183619ad0919061aaf3565b8651619adc919061aaf3565b8386600001518760200151619da9565b619af6919061ab06565b9050619a94565b60606000619b0b8484619a63565b619b1690600161ab06565b67ffffffffffffffff811115619b2e57619b2e61a83b565b604051908082528060200260200182016040528015619b6157816020015b6060815260200190600190039081619b4c5790505b50905060005b8151811015617dd657619b7d617ff886866193af565b828281518110619b8f57619b8f61b1bd565b6020908102919091010152600101619b67565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619beb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619c17576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619c3557662386f26fc10000830492506010015b6305f5e1008310619c4d576305f5e100830492506008015b6127108310619c6157612710830492506004015b60648310619c73576064830492506002015b600a83106160155760010192915050565b6000619c90838361a02e565b159392505050565b600080858411619d9f5760208411619d4b5760008415619ce3576001619cbf86602061aaf3565b619cca90600861baf4565b619cd590600261bbf2565b619cdf919061aaf3565b1990505b8351811685619cf2898961ab06565b619cfc919061aaf3565b805190935082165b818114619d3657878411619d1e5787945050505050617a07565b83619d288161bbfe565b945050828451169050619d04565b619d40878561ab06565b945050505050617a07565b838320619d58858861aaf3565b619d62908761ab06565b91505b858210619d9d57848220808203619d8a57619d80868461ab06565b9350505050617a07565b619d9560018461aaf3565b925050619d65565b505b5092949350505050565b60008381868511619eb45760208511619e635760008515619df5576001619dd187602061aaf3565b619ddc90600861baf4565b619de790600261bbf2565b619df1919061aaf3565b1990505b84518116600087619e068b8b61ab06565b619e10919061aaf3565b855190915083165b828114619e5557818610619e3d57619e308b8b61ab06565b9650505050505050617a07565b85619e478161bada565b965050838651169050619e18565b859650505050505050617a07565b508383206000905b619e75868961aaf3565b8211619eb257858320808203619e915783945050505050617a07565b619e9c60018561ab06565b9350508180619eaa9061bada565b925050619e6b565b505b619ebe878761ab06565b979650505050505050565b60408051808201909152600080825260208201526000619efb8560000151866020015186600001518760200151619da9565b602080870180519186019190915251909150619f17908261aaf3565b835284516020860151619f2a919061ab06565b8103619f395760008552619f6b565b83518351619f47919061ab06565b85518690619f5690839061aaf3565b9052508351619f65908261ab06565b60208601525b50909392505050565b60208110619fac5781518352619f8b60208461ab06565b9250619f9860208361ab06565b9150619fa560208261aaf3565b9050619f74565b6000198115619fdb576001619fc283602061aaf3565b619fce9061010061bbf2565b619fd8919061aaf3565b90505b9151835183169219169190911790915250565b60606000619ffc84846164da565b805160208083015160405193945061a0169390910161bc15565b60405160208183030381529060405291505092915050565b815181516000919081111561a041575081515b6020808501519084015160005b8381101561a0fa578251825180821461a0ca57600019602087101561a0a95760018461a07b89602061aaf3565b61a085919061ab06565b61a09090600861baf4565b61a09b90600261bbf2565b61a0a5919061aaf3565b1990505b818116838216818103911461a0c75797506160159650505050505050565b50505b61a0d560208661ab06565b945061a0e260208561ab06565b9350505060208161a0f3919061ab06565b905061a04e565b5084518651616b88919061bc6d565b610b678061bc8e83390190565b61063d8061c7f583390190565b61106f8061ce3283390190565b6120728061dea183390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a18061a185565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a1806040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a2375783516001600160a01b031683526020938401939092019160010161a210565b509095945050505050565b60005b8381101561a25d57818101518382015260200161a245565b50506000910152565b6000815180845261a27e81602086016020860161a242565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a374577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a35e84865161a266565b602095860195909450929092019160010161a324565b50919750505060209485019492909201915060010161a2ba565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a3ee5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a3ae565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a464604088018261a266565b905060208201519150868103602088015261a47f818361a39a565b96505050602093840193919091019060010161a420565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a4f885835161a266565b9450602093840193919091019060010161a4be565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a58e604087018261a39a565b955050602093840193919091019060010161a535565b600181811c9082168061a5b857607f821691505b6020821081036182d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845267ffffffffffffffff8160a01c1660208501525060018201606060408501526000815461a62d8161a5a4565b806060880152600182166000811461a64c576001811461a6865761a6ba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b890101935061a6ba565b84600052602060002060005b8381101561a6b15781548a82016080015260019091019060200161a692565b89016080019450505b50919695505050505050565b60208152600061610e602083018461a5f1565b6001600160a01b0383168152604060208201526000617a07604083018461a5f1565b60006020828403121561a70d57600080fd5b81516001600160a01b038116811461610e57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061a7de577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261a7ff60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561a82b57600080fd5b8151801515811461610e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561124d57806000526020600020601f840160051c8101602085101561a8915750805b601f840160051c820191505b81811015612ec4576000815560010161a89d565b815167ffffffffffffffff81111561a8cb5761a8cb61a83b565b61a8df8161a8d9845461a5a4565b8461a86a565b6020601f82116001811461a913576000831561a8fb5750848201515b600019600385901b1c1916600184901b178455612ec4565b600084815260208120601f198516915b8281101561a943578785015182556020948501946001909201910161a923565b508482101561a9615786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561a98257600080fd5b5051919050565b60208152600061610e602083018461a266565b60208152600061601560208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b60a08152600061a9ec60a083018761a266565b6001600160a01b03861660208401528460408401526001600160a01b03841660608401528281036080840152619ebe81600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261aa61606085018261a266565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60808152600061aa9d608083018761aa4c565b8560208401526001600160a01b03851660408401528281036060840152619ebe818561a266565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156160155761601561aac4565b808201808211156160155761601561aac4565b60a08152600061ab2c60a083018861aa4c565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261ab62818561a266565b98975050505050505050565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000616b88608083018461a5f1565b6001600160a01b0383168152604060208201526000617a07604083018461a266565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161abff81601a85016020880161a242565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ac3c81601c84016020880161a242565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561ac6b5761ac6b61a83b565b60405290565b60008067ffffffffffffffff84111561ac8c5761ac8c61a83b565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561acbb5761acbb61a83b565b60405283815290508082840185101561acd357600080fd5b617dd684602083018561a242565b600082601f83011261acf257600080fd5b61610e8383516020850161ac71565b60006020828403121561ad1357600080fd5b815167ffffffffffffffff81111561ad2a57600080fd5b6160118482850161ace1565b6000835161ad4881846020880161a242565b83519083019061ad5c81836020880161a242565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ad9d81601a85016020880161a242565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161adda81603384016020880161a242565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061610e608083018461a266565b60006020828403121561ae6957600080fd5b815167ffffffffffffffff81111561ae8057600080fd5b8201601f8101841361ae9157600080fd5b6160118482516020840161ac71565b6000855161aeb2818460208a0161a242565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161aeec816001840160208a0161a242565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161af2a81600284016020890161a242565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161af6c81600284016020880161a242565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061afb7604083018461a266565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b02e81601f85016020870161a242565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b09b604083018461a266565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b0ed604083018461a266565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b16481601485016020870161a242565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b1ab604083018561a266565b828103602084015261610a818561a266565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b22481600185016020870161a242565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b26a81846020870161a242565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b31d81604b85016020870161a242565b91909101604b0192915050565b600060ff821660ff810361b3405761b34061aac4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b3a781602985016020870161a242565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061610e608083018461a266565b60006020828403121561b40d57600080fd5b815167ffffffffffffffff81111561b42457600080fd5b82016060818503121561b43657600080fd5b61b43e61ac48565b81518060030b811461b44f57600080fd5b8152602082015167ffffffffffffffff81111561b46b57600080fd5b61b4778682850161ace1565b602083015250604082015167ffffffffffffffff81111561b49757600080fd5b61b4a38682850161ace1565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b50f81602185016020870161a242565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b6fb81602185016020880161a242565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b73881602e84016020880161a242565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b3a781602985016020870161a242565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b80081602285016020870161a242565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b84581600e85016020870161a242565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b92381601885016020880161a242565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b96081601c84016020880161a242565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ba6681846020870161a242565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161bacd81601c85016020870161a242565b91909101601c0192915050565b6000600019820361baed5761baed61aac4565b5060010190565b80820281158282048414176160155761601561aac4565b6001815b600184111561bb465780850481111561bb2a5761bb2a61aac4565b600184161561bb3857908102905b60019390931c92800261bb0f565b935093915050565b60008261bb5d57506001616015565b8161bb6a57506000616015565b816001811461bb80576002811461bb8a5761bba6565b6001915050616015565b60ff84111561bb9b5761bb9b61aac4565b50506001821b616015565b5060208310610133831016604e8410600b841016171561bbc9575081810a616015565b61bbd6600019848461bb0b565b806000190482111561bbea5761bbea61aac4565b029392505050565b600061610e838361bb4e565b60008161bc0d5761bc0d61aac4565b506000190190565b6000835161bc2781846020880161a242565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bc6181600184016020880161a242565b01600101949350505050565b81810360008312801583831316838312821617156193ce576193ce61aac456fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c8063660b9de014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c1828401846103a2565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610498565b6100ff60408a0160208b01610504565b8960400135338660405161011896959493929190610526565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b1660208201526000602083013567ffffffffffffffff81168082146102ed57600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261032a57600080fd5b830160208101903567ffffffffffffffff81111561034757600080fd5b80360382131561035657600080fd5b60608085015261036a60808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103b457600080fd5b813567ffffffffffffffff8111156103cb57600080fd5b8201601f810184136103dc57600080fd5b803567ffffffffffffffff8111156103f6576103f6610373565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561046257610462610373565b60405281815282820160200186101561047a57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104cd57600080fd5b83018035915067ffffffffffffffff8211156104e857600080fd5b6020019150368190038213156104fd57600080fd5b9250929050565b60006020828403121561051657600080fd5b61051f8261017d565b9392505050565b60a08152600061053a60a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105a457602081870181015184830182015201610588565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122002711b914cfa85869597d761ee7a81ae9c55589f2201dbf0c65836b421bff96564736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201bc2c2e5533a7390cd5c9f230b641bee17c3057fdf7a0f92b4302cd8cea1ce6764736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a26469706673582212201ce28d5a9b13f29cab2c5f8e730c81dfbf159f3cf9ddd9aeb27bca498461a6d664736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ff488061003c6000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c806385226c81116101bd578063ba414fa6116100f9578063e20c9f71116100a2578063ec294d9f1161007c578063ec294d9f1461054a578063ef2b539414610552578063fa7626d41461055a578063fb339a1c1461056757600080fd5b8063e20c9f7114610505578063e63ab1e91461050d578063eab7674e1461054257600080fd5b8063d9978513116100d3578063d9978513146104ed578063d9a4fa16146104f5578063e09bc659146104fd57600080fd5b8063ba414fa6146104c5578063c7b388b1146104dd578063c8814d2e146104e557600080fd5b80639c9acd5d11610166578063b0464fdc11610140578063b0464fdc146104a5578063b5508aa9146104ad578063b8f2b821146104b5578063b936be8c146104bd57600080fd5b80639c9acd5d1461048d5780639ca37e9214610495578063a0b2c7b11461049d57600080fd5b806396d9d8761161019757806396d9d8761461047d57806397f7661f14610443578063996b76751461048557600080fd5b806385226c811461044b578063884660a314610460578063916a17c61461046857600080fd5b80633f7286f41161028c5780635cec7db5116102355780636efa04b51161020f5780636efa04b51461042b5780637cec29b0146104335780637f924c4e1461043b578063828d267c1461044357600080fd5b80635cec7db51461040657806366d9a9a01461040e578063671b91e21461042357600080fd5b806351336fb01161026657806351336fb0146103f657806358c9987f146103fe5780635b4c90e1146103a157600080fd5b80633f7286f4146103de57806344b2a40b146103e657806348f4fd07146103ee57600080fd5b80632468bc0f116102f95780632fa381f4116102d35780632fa381f4146103be578063339bd828146103c65780633ab5b199146103ce5780633e5e3c23146103d657600080fd5b80632468bc0f146103995780632948df41146103a15780632ade3880146103a957600080fd5b8063198d5ca41161032a578063198d5ca41461036b5780631c785a14146103735780631ed7831c1461037b57600080fd5b8063084fafab146103515780630a9254e41461035b57806314b7a6da14610363575b600080fd5b61035961056f565b005b610359610745565b610359611252565b6103596113a2565b610359611625565b610383611f3c565b604051610390919061a1f6565b60405180910390f35b610359611f9e565b610359612469565b6103b1612652565b604051610390919061a292565b610359612794565b610359612986565b610359612ad2565b610383612c83565b610383612ce3565b610359612d43565b610359612ecb565b610359613016565b610359613161565b610359613316565b6104166134cd565b604051610390919061a3f8565b61035961364f565b61035961379d565b610359613b41565b610359613db4565b610359613ded565b610453613f99565b604051610390919061a496565b610359614069565b610470614348565b604051610390919061a50d565b610359614443565b610359614596565b6103596146ea565b61035961483a565b610359614971565b610470614b2c565b610453614c27565b610359614cf7565b610359614e45565b6104cd615128565b6040519015158152602001610390565b6103596151fc565b6103596153ba565b6103596154fc565b6103596155c4565b610359615782565b61038361593b565b6105347f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b604051908152602001610390565b61035961599b565b610359615ae9565b610359615c98565b601f546104cd9060ff1681565b610359615e49565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156105fe57600080fd5b505af1158015610612573d6000803e3d6000fd5b505050507f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76602c604051610646919061a6c6565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156106a857600080fd5b505af11580156106bc573d6000803e3d6000fd5b50506020546024546040517f717d335f0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063717d335f93506107119290911690602c9060040161a6d9565b600060405180830381600087803b15801561072b57600080fd5b505af115801561073f573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161078b9061a109565b604051809103906000f0801580156107a7573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602554915160248101939093529216604482015261088b919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052615ffc565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610971919061a6fb565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516109b59061a116565b604051809103906000f0801580156109d1573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610a6d57600080fd5b505af1158015610a81573d6000803e3d6000fd5b505050506000806000604051610a969061a123565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610ad2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610b289061a130565b610b379695949392919061a724565b604051809103906000f080158015610b53573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610c6857600080fd5b505af1158015610c7c573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610cfc57600080fd5b505af1158015610d10573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e11919061a819565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea6919061a819565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b919061a819565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015611115573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611139919061a819565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505060408051606081018252600080825260016020808401918252845190810185529182529282018190528151602c8054945167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009095166001600160a01b039290921691909117939093178355909350909150602d9061124d908261a8b1565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156112ab57600080fd5b505af11580156112bf573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561132f57600080fd5b505af1158015611343573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc9150606401610711565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156113f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611417919061a970565b905061142460008261601b565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561147d57600080fd5b505af1158015611491573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561150157600080fd5b505af1158015611515573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561158d57600080fd5b505af11580156115a1573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611618919061a970565b905061124d60008261601b565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561167e57600080fd5b505af1158015611692573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061177d919060040161a989565b600060405180830381600087803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117ff57600080fd5b505af1158015611813573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561187057600080fd5b505af1158015611884573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061196f919060040161a989565b600060405180830381600087803b15801561198957600080fd5b505af115801561199d573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119f157600080fd5b505af1158015611a05573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a6257600080fd5b505af1158015611a76573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611aca57600080fd5b505af1158015611ade573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b158015611b5157600080fd5b505af1158015611b65573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611bc257600080fd5b505af1158015611bd6573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611c4e57600080fd5b505af1158015611c62573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611cbf57600080fd5b505af1158015611cd3573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d2757600080fd5b505af1158015611d3b573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db3919061a970565b9050611dc060008261601b565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611e1957600080fd5b505af1158015611e2d573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611ea557600080fd5b505af1158015611eb9573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f30919061a970565b905061124d838261601b565b60606016805480602002602001604051908101604052809291908181526020018280548015611f9457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f76575b5050505050905090565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611fef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612013919061a970565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061a970565b6024546040519192506001600160a01b031631906000906120ac9060200161a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061220993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054612239936001600160a01b03928316928c92169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561229a57600080fd5b505af11580156122ae573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506123059286928c92911690889060040161aa8a565b600060405180830381600087803b15801561231f57600080fd5b505af1158015612333573d6000803e3d6000fd5b50506022546027546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612386573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123aa919061a970565b90506123bf6123b9888861aaf3565b8261601b565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612410573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612434919061a970565b9050612440868261601b565b61245f61244d898761ab06565b6024546001600160a01b03163161601b565b5050505050505050565b600060405160200161247a9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561252857600080fd5b505af115801561253c573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156125ac57600080fd5b505af11580156125c0573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061261c92869260009260019290911690899060040161ab19565b600060405180830381600087803b15801561263657600080fd5b505af115801561264a573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561278b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156127745783829060005260206000200180546126e79061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546127139061a5a4565b80156127605780601f1061273557610100808354040283529160200191612760565b820191906000526020600020905b81548152906001019060200180831161274357829003601f168201915b5050505050815260200190600101906126c8565b505050508152505081526020019060010190612676565b50505050905090565b6040516001906000906127a99060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561287357600080fd5b505af1158015612887573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156128e457600080fd5b505af11580156128f8573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061294f9286928992911690889060040161aa8a565b600060405180830381600087803b15801561296957600080fd5b505af115801561297d573d6000803e3d6000fd5b50505050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156129df57600080fd5b505af11580156129f3573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612a6357600080fd5b505af1158015612a77573d6000803e3d6000fd5b50506020546021546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb7693506107119290911690600190600090602c9060040161ab6e565b6000604051602001612ae39061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612b9157600080fd5b505af1158015612ba5573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612c1557600080fd5b505af1158015612c29573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061261c9286921690600190600090899060040161ab19565b60606018805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d9f57600080fd5b505af1158015612db3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612e2357600080fd5b505af1158015612e37573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015612eb057600080fd5b505af1158015612ec4573d6000803e3d6000fd5b5050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f2457600080fd5b505af1158015612f38573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612fa857600080fd5b505af1158015612fbc573d6000803e3d6000fd5b50506020546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb76935061071192600092600192911690602c9060040161ab6e565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561308257600080fd5b505af1158015613096573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156130f357600080fd5b505af1158015613107573d6000803e3d6000fd5b50506020546021546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb76935061071192909116906001908590602c9060040161ab6e565b60006040516020016131729061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561322057600080fd5b505af1158015613234573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156132a457600080fd5b505af11580156132b8573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600092911690899060040161ab19565b60405160019060009061332b9060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156133f557600080fd5b505af1158015613409573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561346657600080fd5b505af115801561347a573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061294f90849087908590889060040161aa8a565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561278b57838290600052602060002090600202016040518060400160405290816000820180546135249061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546135509061a5a4565b801561359d5780601f106135725761010080835404028352916020019161359d565b820191906000526020600020905b81548152906001019060200180831161358057829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561363757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135e45790505b505050505081525050815260200190600101906134f1565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156136bb57600080fd5b505af11580156136cf573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561372c57600080fd5b505af1158015613740573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926001921690602c9060040161ab6e565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156137ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613811919061a970565b905061381e60008261601b565b600060405160200161382f9061a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561391d57600080fd5b505af1158015613931573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061398c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526027546020546139bd936001600160a01b0392831692600192169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a1e57600080fd5b505af1158015613a32573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613a90938793811692600192911690899060040161ab19565b600060405180830381600087803b158015613aaa57600080fd5b505af1158015613abe573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b34919061a970565b905061073f60018261601b565b6000604051602001613b529061a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c4057600080fd5b505af1158015613c54573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613caf93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613ce0936001600160a01b0392831692600192169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015613d4257600080fd5b505af1158015613d56573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061261c938793811692600192911690899060040161ab19565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401611d72565b6000604051602001613dfe9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015613eac57600080fd5b505af1158015613ec0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613f3057600080fd5b505af1158015613f44573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061261c908490600190600090889060040161aa8a565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561278b578382906000526020600020018054613fdc9061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546140089061a5a4565b80156140555780601f1061402a57610100808354040283529160200191614055565b820191906000526020600020905b81548152906001019060200180831161403857829003601f168201915b505050505081526020019060010190613fbd565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156140b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140dd919061a970565b90506140ea60008261601b565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561417957600080fd5b505af115801561418d573d6000803e3d6000fd5b505050507f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76602c6040516141c1919061a6c6565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561422257600080fd5b505af1158015614236573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061429393928316926001921690602c9060040161ab6e565b600060405180830381600087803b1580156142ad57600080fd5b505af11580156142c1573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015614313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614337919061a970565b905061434460018261601b565b5050565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561278b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561442b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116143d85790505b5050505050815250508152602001906001019061436c565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561449f57600080fd5b505af11580156144b3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561452357600080fd5b505af1158015614537573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401612e96565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156145ef57600080fd5b505af1158015614603573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561467357600080fd5b505af1158015614687573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc9150606401610711565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561474357600080fd5b505af1158015614757573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156147c757600080fd5b505af11580156147db573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc9150606401610711565b600060405160200161484b9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561491557600080fd5b505af1158015614929573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401613d28565b6040516001906000906149869060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015614a5057600080fd5b505af1158015614a64573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614ac157600080fd5b505af1158015614ad5573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061294f9286928992911690889060040161aa8a565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561278b5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015614c0f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411614bbc5790505b50505050508152505081526020019060010190614b50565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561278b578382906000526020600020018054614c6a9061a5a4565b80601f0160208091040260200160405190810160405280929190818152602001828054614c969061a5a4565b8015614ce35780601f10614cb857610100808354040283529160200191614ce3565b820191906000526020600020905b815481529060010190602001808311614cc657829003601f168201915b505050505081526020019060010190614c4b565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614d6357600080fd5b505af1158015614d77573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614dd457600080fd5b505af1158015614de8573d6000803e3d6000fd5b50506020546021546027546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926001921690602c9060040161ab6e565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614eba919061a970565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f30919061a970565b6024546040519192506001600160a01b03163190600090614f539060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561500157600080fd5b505af1158015615015573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561508557600080fd5b505af1158015615099573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a9591506150ee908490600190600090889060040161aa8a565b600060405180830381600087803b15801561510857600080fd5b505af115801561511c573d6000803e3d6000fd5b50505050505050505050565b60085460009060ff1615615140575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156151d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151f5919061a970565b1415905090565b600060405160200161520d9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156152d757600080fd5b505af11580156152eb573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561534857600080fd5b505af115801561535c573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600192911690899060040161ab19565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561541357600080fd5b505af1158015615427573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561549757600080fd5b505af11580156154ab573d6000803e3d6000fd5b50506020546040517f717d335f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063717d335f915061071190600090602c9060040161a6d9565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561556857600080fd5b505af115801561557c573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa7915060240161068e565b60006040516020016155d59061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561569f57600080fd5b505af11580156156b3573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561571057600080fd5b505af1158015615724573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600192911690899060040161ab19565b60006040516020016157939061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561585d57600080fd5b505af1158015615871573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156158ce57600080fd5b505af11580156158e2573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c92869216906001908690899060040161ab19565b60606015805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156159f457600080fd5b505af1158015615a08573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615a7857600080fd5b505af1158015615a8c573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926000921690602c9060040161ab6e565b6000604051602001615afa9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615ba857600080fd5b505af1158015615bbc573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615c2c57600080fd5b505af1158015615c40573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061261c928692600092911690889060040161aa8a565b6000604051602001615ca99061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615d5757600080fd5b505af1158015615d6b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615ddb57600080fd5b505af1158015615def573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c9286921690600190600090899060040161ab19565b6000604051602001615e5a9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615f0857600080fd5b505af1158015615f1c573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615f8c57600080fd5b505af1158015615fa0573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c92869260009260019290911690899060040161ab19565b600061600661a13d565b61601184848361609a565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561608657600080fd5b505afa15801561264a573d6000803e3d6000fd5b6000806160a78584616115565b905061610a6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016160f592919061aba5565b60405160208183030381529060405285616121565b9150505b9392505050565b600061610e838361614f565b60c081015151600090156161455761613e84848460c0015161616a565b905061610e565b61613e8484616310565b600061615b83836163fb565b61610e83836020015184616121565b600080616175616407565b9050600061618386836164da565b9050600061619a8260600151836020015185616980565b905060006161aa83838989616b92565b905060006161b782617a0f565b602081015181519192509060030b1561622a578982604001516040516020016161e192919061abc7565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526162219160040161a989565b60405180910390fd5b600061626d6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617bde565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906162c090849060040161a989565b602060405180830381865afa1580156162dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616301919061a6fb565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061636590879060040161a989565b600060405180830381865afa158015616382573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163aa919081019061ad01565b905060006163d882856040516020016163c492919061ad36565b604051602081830303815290604052617dde565b90506001600160a01b0381166160115784846040516020016161e192919061ad65565b61434482826000617df1565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061648e90849060040161ae10565b600060405180830381865afa1580156164ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164d3919081019061ae57565b9250505090565b61650c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506165576040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61656085617ef4565b60208201526000616570866182d9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156165b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165da919081019061ae57565b868385602001516040516020016165f4949392919061aea0565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061664c90859060040161a989565b600060405180830381865afa158015616669573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616691919081019061ae57565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906166d990849060040161afa4565b602060405180830381865afa1580156166f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061671a919061a819565b61672f57816040516020016161e1919061aff6565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061677490849060040161b088565b600060405180830381865afa158015616791573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167b9919081019061ae57565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061680090849060040161b0da565b602060405180830381865afa15801561681d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616841919061a819565b156168d6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061688b90849060040161b0da565b600060405180830381865afa1580156168a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168d0919081019061ae57565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016168fb919061b12c565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161692792919061b198565b600060405180830381865afa158015616944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261696c919081019061ae57565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161699c5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106169fc576169fc61b1bd565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110616a5057616a5061b1bd565b602002602001018190525084604051602001616a6c919061b1ec565b60405160208183030381529060405281600281518110616a8e57616a8e61b1bd565b602002602001018190525082604051602001616aaa919061b258565b60405160208183030381529060405281600381518110616acc57616acc61b1bd565b60200260200101819052506000616ae282617a0f565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616b73906040805180820182526000808252602091820152815180830190925284518252808501908201529061855c565b616b8857856040516020016161e1919061b299565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616be2565b511590565b616d5657826020015115616c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616221565b8260c0015115616d56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616221565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616d6f57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616dca9061b32a565b935060ff1681518110616ddf57616ddf61b1bd565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616e30919061b349565b604051602081830303815290604052828280616e4b9061b32a565b935060ff1681518110616e6057616e6061b1bd565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616ead9061b32a565b935060ff1681518110616ec257616ec261b1bd565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616f0f9061b32a565b935060ff1681518110616f2457616f2461b1bd565b60200260200101819052508760200151828280616f409061b32a565b935060ff1681518110616f5557616f5561b1bd565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616fa29061b32a565b935060ff1681518110616fb757616fb761b1bd565b602090810291909101015287518282616fcf8161b32a565b935060ff1681518110616fe457616fe461b1bd565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806170319061b32a565b935060ff16815181106170465761704661b1bd565b602002602001018190525061705a466185bd565b82826170658161b32a565b935060ff168151811061707a5761707a61b1bd565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806170c79061b32a565b935060ff16815181106170dc576170dc61b1bd565b6020026020010181905250868282806170f49061b32a565b935060ff16815181106171095761710961b1bd565b60209081029190910101528551156172305760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261715a8161b32a565b935060ff168151811061716f5761716f61b1bd565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906171bf90899060040161a989565b600060405180830381865afa1580156171dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617204919081019061ae57565b828261720f8161b32a565b935060ff16815181106172245761722461b1bd565b60200260200101819052505b8460200151156173005760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826172798161b32a565b935060ff168151811061728e5761728e61b1bd565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806172db9061b32a565b935060ff16815181106172f0576172f061b1bd565b60200260200101819052506174c7565b617338616bdd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6173cb5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261737b8161b32a565b935060ff16815181106173905761739061b1bd565b60200260200101819052508460a001516040516020016173b0919061b1ec565b6040516020818303038152906040528282806172db9061b32a565b8460c0015115801561740e57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261740c90511590565b155b156174c75760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826174528161b32a565b935060ff16815181106174675761746761b1bd565b602002602001018190525061747b8861865d565b60405160200161748b919061b1ec565b6040516020818303038152906040528282806174a69061b32a565b935060ff16815181106174bb576174bb61b1bd565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526174fb90511590565b6175905760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261753e8161b32a565b935060ff16815181106175535761755361b1bd565b6020026020010181905250846040015182828061756f9061b32a565b935060ff16815181106175845761758461b1bd565b60200260200101819052505b6060850151156176b15760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826175d98161b32a565b935060ff16815181106175ee576175ee61b1bd565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561765d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617685919081019061ae57565b82826176908161b32a565b935060ff16815181106176a5576176a561b1bd565b60200260200101819052505b60e085015151156177585760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826176fb8161b32a565b935060ff16815181106177105761771061b1bd565b602002602001018190525061772c8560e00151600001516185bd565b82826177378161b32a565b935060ff168151811061774c5761774c61b1bd565b60200260200101819052505b60e085015160200151156178025760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826177a58161b32a565b935060ff16815181106177ba576177ba61b1bd565b60200260200101819052506177d68560e00151602001516185bd565b82826177e18161b32a565b935060ff16815181106177f6576177f661b1bd565b60200260200101819052505b60e085015160400151156178ac5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261784f8161b32a565b935060ff16815181106178645761786461b1bd565b60200260200101819052506178808560e00151604001516185bd565b828261788b8161b32a565b935060ff16815181106178a0576178a061b1bd565b60200260200101819052505b60e085015160600151156179565760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826178f98161b32a565b935060ff168151811061790e5761790e61b1bd565b602002602001018190525061792a8560e00151606001516185bd565b82826179358161b32a565b935060ff168151811061794a5761794a61b1bd565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156179745761797461a83b565b6040519080825280602002602001820160405280156179a757816020015b60608152602001906001900390816179925790505b50905060005b8260ff168160ff161015617a0057838160ff16815181106179d0576179d061b1bd565b6020026020010151828260ff16815181106179ed576179ed61b1bd565b60209081029190910101526001016179ad565b5093505050505b949350505050565b617a366040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617abc9186910161b3b4565b600060405180830381865afa158015617ad9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617b01919081019061ae57565b90506000617b0f868361914c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617b3f919061a496565b6000604051808303816000875af1158015617b5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617b86919081019061b3fb565b805190915060030b15801590617b9f5750602081015151155b8015617bae5750604081015151155b15616b885781600081518110617bc657617bc661b1bd565b60200260200101516040516020016161e1919061b4b1565b60606000617c138560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617c4a9082905b906192a1565b15617da7576000617cc782617cc184617cbb617c8d8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906192c8565b9061932a565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617d2b9082906192a1565b15617d9557604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d92905b82906193af565b90505b617d9e816193d5565b9250505061610e565b8215617dc05784846040516020016161e192919061b69d565b505060408051602081019091526000815261610e565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617e0057505050565b6000617e0d84848461943e565b90506000617e1a82617a0f565b602081015181519192509060030b158015617eb65750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617eb690604080518082018252600080825260209182015281518083019092528451825280850190820152617c44565b15617ec357505050505050565b60408201515115617ee35781604001516040516020016161e1919061b744565b806040516020016161e1919061b7a2565b60606000617f298360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617f8e905b829061855c565b15617ffd57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff89083906199d9565b6193d5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261805f905b8290619a63565b60010361812c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180c590617d8b565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff8905b83906193af565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261818b90617f87565b156182c257604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906181f3908390619afd565b905060008160018351618206919061aaf3565b815181106182165761821661b1bd565b602002602001015190506182b9617ff861828c6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906199d9565b95945050505050565b826040516020016161e1919061b80d565b50919050565b6060600061830e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061837090617f87565b1561837e5761610e816193d5565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526183dd90618058565b60010361844757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff890618125565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184a690617f87565b156182c257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061850e908390619afd565b905060018151111561854a578060028251618529919061aaf3565b815181106185395761853961b1bd565b602002602001015192505050919050565b50826040516020016161e1919061b80d565b80518251600091111561857157506000616015565b815183516020850151600092916185879161ab06565b618591919061aaf3565b9050826020015181036185a8576001915050616015565b82516020840151819020912014905092915050565b606060006185ca83619ba2565b600101905060008167ffffffffffffffff8111156185ea576185ea61a83b565b6040519080825280601f01601f191660200182016040528015618614576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461861e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916186e9905b8290619c84565b1561872957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618788906186e2565b156187c857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618827906186e2565b1561886757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188c6906186e2565b8061892b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261892b906186e2565b1561896b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189ca906186e2565b80618a2f5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a2f906186e2565b15618a6f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ace906186e2565b80618b335750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b33906186e2565b15618b7357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bd2906186e2565b80618c375750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c37906186e2565b15618c7757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cd6906186e2565b15618d1657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d75906186e2565b15618db557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e14906186e2565b15618e5457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618eb3906186e2565b15618ef357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f52906186e2565b15618f9257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ff1906186e2565b806190565750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619056906186e2565b1561909657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190f5906186e2565b1561913557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516161e1929060200161b8eb565b60608060005b84518110156191d7578185828151811061916e5761916e61b1bd565b602002602001015160405160200161918792919061ad36565b6040516020818303038152906040529150600185516191a6919061aaf3565b81146191cf57816040516020016191bd919061ba54565b60405160208183030381529060405291505b600101619152565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816191f0579050509050838160008151811061921b5761921b61b1bd565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061926f5761926f61b1bd565b6020026020010181905250818160028151811061928e5761928e61b1bd565b6020908102919091010152949350505050565b60208083015183518351928401516000936192bf9291849190619c98565b14159392505050565b604080518082019091526000808252602082015260006192fa8460000151856020015185600001518660200151619da9565b905083602001518161930c919061aaf3565b8451859061931b90839061aaf3565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561934f575081616015565b60208083015190840151600191146193765750815160208481015190840151829020919020145b80156193a75782518451859061938d90839061aaf3565b90525082516020850180516193a390839061ab06565b9052505b509192915050565b60408051808201909152600080825260208201526193ce838383619ec9565b5092915050565b60606000826000015167ffffffffffffffff8111156193f6576193f661a83b565b6040519080825280601f01601f191660200182016040528015619420576020820181803683370190505b50905060006020820190506193ce8185602001518660000151619f74565b6060600061944a616407565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161946757905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806194c29061b32a565b935060ff16815181106194d7576194d761b1bd565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619528919061ba95565b6040516020818303038152906040528282806195439061b32a565b935060ff16815181106195585761955861b1bd565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806195a59061b32a565b935060ff16815181106195ba576195ba61b1bd565b6020026020010181905250826040516020016195d6919061b258565b6040516020818303038152906040528282806195f19061b32a565b935060ff16815181106196065761960661b1bd565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806196539061b32a565b935060ff16815181106196685761966861b1bd565b602002602001018190525061967d8784619fee565b82826196888161b32a565b935060ff168151811061969d5761969d61b1bd565b6020908102919091010152855151156197495760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826196ef8161b32a565b935060ff16815181106197045761970461b1bd565b602002602001018190525061971d866000015184619fee565b82826197288161b32a565b935060ff168151811061973d5761973d61b1bd565b60200260200101819052505b8560800151156197b75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826197928161b32a565b935060ff16815181106197a7576197a761b1bd565b602002602001018190525061981d565b841561981d5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826197fc8161b32a565b935060ff16815181106198115761981161b1bd565b60200260200101819052505b604086015151156198b95760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826198678161b32a565b935060ff168151811061987c5761987c61b1bd565b602002602001018190525085604001518282806198989061b32a565b935060ff16815181106198ad576198ad61b1bd565b60200260200101819052505b8560600151156199235760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826199028161b32a565b935060ff16815181106199175761991761b1bd565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156199415761994161a83b565b60405190808252806020026020018201604052801561997457816020015b606081526020019060019003908161995f5790505b50905060005b8260ff168160ff1610156199cd57838160ff168151811061999d5761999d61b1bd565b6020026020010151828260ff16815181106199ba576199ba61b1bd565b602090810291909101015260010161997a565b50979650505050505050565b60408051808201909152600080825260208201528151835110156199fe575081616015565b81518351602085015160009291619a149161ab06565b619a1e919061aaf3565b60208401519091506001908214619a3f575082516020840151819020908220145b8015619a5a57835185518690619a5690839061aaf3565b9052505b50929392505050565b6000808260000151619a878560000151866020015186600001518760200151619da9565b619a91919061ab06565b90505b83516020850151619aa5919061ab06565b81116193ce5781619ab58161bada565b9250508260000151619aec856020015183619ad0919061aaf3565b8651619adc919061aaf3565b8386600001518760200151619da9565b619af6919061ab06565b9050619a94565b60606000619b0b8484619a63565b619b1690600161ab06565b67ffffffffffffffff811115619b2e57619b2e61a83b565b604051908082528060200260200182016040528015619b6157816020015b6060815260200190600190039081619b4c5790505b50905060005b8151811015617dd657619b7d617ff886866193af565b828281518110619b8f57619b8f61b1bd565b6020908102919091010152600101619b67565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619beb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619c17576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619c3557662386f26fc10000830492506010015b6305f5e1008310619c4d576305f5e100830492506008015b6127108310619c6157612710830492506004015b60648310619c73576064830492506002015b600a83106160155760010192915050565b6000619c90838361a02e565b159392505050565b600080858411619d9f5760208411619d4b5760008415619ce3576001619cbf86602061aaf3565b619cca90600861baf4565b619cd590600261bbf2565b619cdf919061aaf3565b1990505b8351811685619cf2898961ab06565b619cfc919061aaf3565b805190935082165b818114619d3657878411619d1e5787945050505050617a07565b83619d288161bbfe565b945050828451169050619d04565b619d40878561ab06565b945050505050617a07565b838320619d58858861aaf3565b619d62908761ab06565b91505b858210619d9d57848220808203619d8a57619d80868461ab06565b9350505050617a07565b619d9560018461aaf3565b925050619d65565b505b5092949350505050565b60008381868511619eb45760208511619e635760008515619df5576001619dd187602061aaf3565b619ddc90600861baf4565b619de790600261bbf2565b619df1919061aaf3565b1990505b84518116600087619e068b8b61ab06565b619e10919061aaf3565b855190915083165b828114619e5557818610619e3d57619e308b8b61ab06565b9650505050505050617a07565b85619e478161bada565b965050838651169050619e18565b859650505050505050617a07565b508383206000905b619e75868961aaf3565b8211619eb257858320808203619e915783945050505050617a07565b619e9c60018561ab06565b9350508180619eaa9061bada565b925050619e6b565b505b619ebe878761ab06565b979650505050505050565b60408051808201909152600080825260208201526000619efb8560000151866020015186600001518760200151619da9565b602080870180519186019190915251909150619f17908261aaf3565b835284516020860151619f2a919061ab06565b8103619f395760008552619f6b565b83518351619f47919061ab06565b85518690619f5690839061aaf3565b9052508351619f65908261ab06565b60208601525b50909392505050565b60208110619fac5781518352619f8b60208461ab06565b9250619f9860208361ab06565b9150619fa560208261aaf3565b9050619f74565b6000198115619fdb576001619fc283602061aaf3565b619fce9061010061bbf2565b619fd8919061aaf3565b90505b9151835183169219169190911790915250565b60606000619ffc84846164da565b805160208083015160405193945061a0169390910161bc15565b60405160208183030381529060405291505092915050565b815181516000919081111561a041575081515b6020808501519084015160005b8381101561a0fa578251825180821461a0ca57600019602087101561a0a95760018461a07b89602061aaf3565b61a085919061ab06565b61a09090600861baf4565b61a09b90600261bbf2565b61a0a5919061aaf3565b1990505b818116838216818103911461a0c75797506160159650505050505050565b50505b61a0d560208661ab06565b945061a0e260208561ab06565b9350505060208161a0f3919061ab06565b905061a04e565b5084518651616b88919061bc6d565b610b678061bc8e83390190565b61063d8061c7f583390190565b61106f8061ce3283390190565b6120728061dea183390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a18061a185565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a1806040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a2375783516001600160a01b031683526020938401939092019160010161a210565b509095945050505050565b60005b8381101561a25d57818101518382015260200161a245565b50506000910152565b6000815180845261a27e81602086016020860161a242565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a374577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a35e84865161a266565b602095860195909450929092019160010161a324565b50919750505060209485019492909201915060010161a2ba565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a3ee5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a3ae565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a464604088018261a266565b905060208201519150868103602088015261a47f818361a39a565b96505050602093840193919091019060010161a420565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a4f885835161a266565b9450602093840193919091019060010161a4be565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a58e604087018261a39a565b955050602093840193919091019060010161a535565b600181811c9082168061a5b857607f821691505b6020821081036182d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845267ffffffffffffffff8160a01c1660208501525060018201606060408501526000815461a62d8161a5a4565b806060880152600182166000811461a64c576001811461a6865761a6ba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b890101935061a6ba565b84600052602060002060005b8381101561a6b15781548a82016080015260019091019060200161a692565b89016080019450505b50919695505050505050565b60208152600061610e602083018461a5f1565b6001600160a01b0383168152604060208201526000617a07604083018461a5f1565b60006020828403121561a70d57600080fd5b81516001600160a01b038116811461610e57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061a7de577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261a7ff60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561a82b57600080fd5b8151801515811461610e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561124d57806000526020600020601f840160051c8101602085101561a8915750805b601f840160051c820191505b81811015612ec4576000815560010161a89d565b815167ffffffffffffffff81111561a8cb5761a8cb61a83b565b61a8df8161a8d9845461a5a4565b8461a86a565b6020601f82116001811461a913576000831561a8fb5750848201515b600019600385901b1c1916600184901b178455612ec4565b600084815260208120601f198516915b8281101561a943578785015182556020948501946001909201910161a923565b508482101561a9615786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561a98257600080fd5b5051919050565b60208152600061610e602083018461a266565b60208152600061601560208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b60a08152600061a9ec60a083018761a266565b6001600160a01b03861660208401528460408401526001600160a01b03841660608401528281036080840152619ebe81600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261aa61606085018261a266565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60808152600061aa9d608083018761aa4c565b8560208401526001600160a01b03851660408401528281036060840152619ebe818561a266565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156160155761601561aac4565b808201808211156160155761601561aac4565b60a08152600061ab2c60a083018861aa4c565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261ab62818561a266565b98975050505050505050565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000616b88608083018461a5f1565b6001600160a01b0383168152604060208201526000617a07604083018461a266565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161abff81601a85016020880161a242565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ac3c81601c84016020880161a242565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561ac6b5761ac6b61a83b565b60405290565b60008067ffffffffffffffff84111561ac8c5761ac8c61a83b565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561acbb5761acbb61a83b565b60405283815290508082840185101561acd357600080fd5b617dd684602083018561a242565b600082601f83011261acf257600080fd5b61610e8383516020850161ac71565b60006020828403121561ad1357600080fd5b815167ffffffffffffffff81111561ad2a57600080fd5b6160118482850161ace1565b6000835161ad4881846020880161a242565b83519083019061ad5c81836020880161a242565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ad9d81601a85016020880161a242565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161adda81603384016020880161a242565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061610e608083018461a266565b60006020828403121561ae6957600080fd5b815167ffffffffffffffff81111561ae8057600080fd5b8201601f8101841361ae9157600080fd5b6160118482516020840161ac71565b6000855161aeb2818460208a0161a242565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161aeec816001840160208a0161a242565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161af2a81600284016020890161a242565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161af6c81600284016020880161a242565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061afb7604083018461a266565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b02e81601f85016020870161a242565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b09b604083018461a266565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b0ed604083018461a266565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b16481601485016020870161a242565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b1ab604083018561a266565b828103602084015261610a818561a266565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b22481600185016020870161a242565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b26a81846020870161a242565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b31d81604b85016020870161a242565b91909101604b0192915050565b600060ff821660ff810361b3405761b34061aac4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b3a781602985016020870161a242565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061610e608083018461a266565b60006020828403121561b40d57600080fd5b815167ffffffffffffffff81111561b42457600080fd5b82016060818503121561b43657600080fd5b61b43e61ac48565b81518060030b811461b44f57600080fd5b8152602082015167ffffffffffffffff81111561b46b57600080fd5b61b4778682850161ace1565b602083015250604082015167ffffffffffffffff81111561b49757600080fd5b61b4a38682850161ace1565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b50f81602185016020870161a242565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b6fb81602185016020880161a242565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b73881602e84016020880161a242565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b3a781602985016020870161a242565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b80081602285016020870161a242565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b84581600e85016020870161a242565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b92381601885016020880161a242565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b96081601c84016020880161a242565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ba6681846020870161a242565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161bacd81601c85016020870161a242565b91909101601c0192915050565b6000600019820361baed5761baed61aac4565b5060010190565b80820281158282048414176160155761601561aac4565b6001815b600184111561bb465780850481111561bb2a5761bb2a61aac4565b600184161561bb3857908102905b60019390931c92800261bb0f565b935093915050565b60008261bb5d57506001616015565b8161bb6a57506000616015565b816001811461bb80576002811461bb8a5761bba6565b6001915050616015565b60ff84111561bb9b5761bb9b61aac4565b50506001821b616015565b5060208310610133831016604e8410600b841016171561bbc9575081810a616015565b61bbd6600019848461bb0b565b806000190482111561bbea5761bbea61aac4565b029392505050565b600061610e838361bb4e565b60008161bc0d5761bc0d61aac4565b506000190190565b6000835161bc2781846020880161a242565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bc6181600184016020880161a242565b01600101949350505050565b81810360008312801583831316838312821617156193ce576193ce61aac456fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c80635bcfd61614610033578063660b9de01461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610169565b610073565b34801561005f57600080fd5b5061003161006e366004610221565b6100ee565b6060811561008a576100878284018461028d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610383565b6100c560408a0160208b016103ef565b896040013533866040516100de9695949392919061045a565b60405180910390a1505050505050565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c768160405161011d919061051c565b60405180910390a150565b60006060828403121561013a57600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016457600080fd5b919050565b60008060008060006080868803121561018157600080fd5b853567ffffffffffffffff81111561019857600080fd5b6101a488828901610128565b9550506101b360208701610140565b935060408601359250606086013567ffffffffffffffff8111156101d657600080fd5b8601601f810188136101e757600080fd5b803567ffffffffffffffff8111156101fe57600080fd5b88602082840101111561021057600080fd5b959894975092955050506020019190565b60006020828403121561023357600080fd5b813567ffffffffffffffff81111561024a57600080fd5b61025684828501610128565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561029f57600080fd5b813567ffffffffffffffff8111156102b657600080fd5b8201601f810184136102c757600080fd5b803567ffffffffffffffff8111156102e1576102e161025e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561034d5761034d61025e565b60405281815282820160200186101561036557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126103b857600080fd5b83018035915067ffffffffffffffff8211156103d357600080fd5b6020019150368190038213156103e857600080fd5b9250929050565b60006020828403121561040157600080fd5b61040a82610140565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a08152600061046e60a08301888a610411565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156104d8576020818701810151848301820152016104bc565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683010192505050979650505050505050565b6020815273ffffffffffffffffffffffffffffffffffffffff61053e83610140565b1660208201526000602083013567ffffffffffffffff811680821461056257600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261059f57600080fd5b830160208101903567ffffffffffffffff8111156105bc57600080fd5b8036038213156105cb57600080fd5b6060808501526105df608085018284610411565b9594505050505056fea2646970667358221220cb26ed07348041180f6631404fac1759ff8efa800dbae7e9722129211743d1d664736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212206cfc8728f3e6a008fa60110012d328f8d2a859ba07c5fdfb6776051dc27a333964736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220aa5125c0038a8bce02845af74e7306a14927e9d3a91554006493dda61f47334c64736f6c634300081a0033", } // GatewayZEVMOutboundTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevmupgradetest.sol/gatewayzevmupgradetest.go b/v2/pkg/gatewayzevmupgradetest.sol/gatewayzevmupgradetest.go index b1612c9d1..c5e4a6f10 100644 --- a/v2/pkg/gatewayzevmupgradetest.sol/gatewayzevmupgradetest.go +++ b/v2/pkg/gatewayzevmupgradetest.sol/gatewayzevmupgradetest.go @@ -29,6 +29,13 @@ var ( _ = abi.ConvertType ) +// MessageContext is an auto generated low-level Go binding around an user-defined struct. +type MessageContext struct { + Origin []byte + Sender common.Address + ChainID *big.Int +} + // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address @@ -45,17 +52,10 @@ type RevertOptions struct { OnRevertGasLimit *big.Int } -// ZContext is an auto generated low-level Go binding around an user-defined struct. -type ZContext struct { - Origin []byte - Sender common.Address - ChainID *big.Int -} - // GatewayZEVMUpgradeTestMetaData contains all meta data concerning the GatewayZEVMUpgradeTest contract. var GatewayZEVMUpgradeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_MESSAGE_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613b2c6100fd6000396000818161273f01528181612768015261293e0152613b2c6000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca3714610621578063d547741f14610641578063e63ab1e914610661578063f45346dc1461069557600080fd5b806397d340f514610580578063a217fddf14610596578063ad3cb1cc146105ab578063bcf7f32b1461060157600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b5565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612e87565b610713565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612ef6565b6107ac565b3480156102a157600080fd5b506102396102b03660046130b8565b610a38565b3480156102c157600080fd5b506102396102d0366004613178565b610c3f565b3480156102e157600080fd5b506102396102f036600461322d565b610f01565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c6103483660046132b9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a53660046132d2565b6110ce565b3480156103b657600080fd5b506102396103c53660046132d2565b611118565b3480156103d657600080fd5b506102396103e5366004613302565b611169565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b506102396112de565b34801561043357600080fd5b50610239610442366004613395565b611313565b6102396104553660046133c3565b611568565b34801561046657600080fd5b5061037c611587565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c1366004613413565b6115b6565b3480156104d257600080fd5b506102396104e1366004613459565b6116be565b3480156104f257600080fd5b5061023961188c565b34801561050757600080fd5b506102606105163660046132d2565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b5061023961057b3660046134d2565b6118be565b34801561058c57600080fd5b5061037c61040081565b3480156105a257600080fd5b5061037c600081565b3480156105b757600080fd5b506105f46040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c91906135a4565b34801561060d57600080fd5b5061023961061c3660046135b7565b6119dd565b34801561062d57600080fd5b5061023961063c3660046135b7565b611b0d565b34801561064d57600080fd5b5061023961065c3660046132d2565b611d1c565b34801561066d57600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156106a157600080fd5b506102396106b0366004613655565b611d60565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610711576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108016106b5565b6001600160a01b038416158061081e57506001600160a01b038216155b15610855576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088f576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108c257506001600160a01b03821630145b156108f9576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af1158015610961573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098591906136a5565b6109bb576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de090610a0090849060040161376f565b600060405180830381600087803b158015610a1a57600080fd5b505af1158015610a2e573d6000803e3d6000fd5b5050505050505050565b610a40611f6f565b610a486106b5565b8651600003610a83576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610abd576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610af7576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b0760608301836137d5565b610b1291508561383a565b10610b49576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b56878785611ff0565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190613874565b8c8c8c8c604051610c049998979695949392919061390e565b60405180910390a350610c3660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c47611f6f565b610c4f6106b5565b8551600003610c8a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610cc4576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610cd460608301836137d5565b610cdf91508561383a565b10610d16576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9c9190613981565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4591906136a5565b610e7b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610ec69594939291906139af565b60405180910390a35050610ef960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610f4e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f566106b5565b6001600160a01b038316610f96576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610fd0576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061100357506001600160a01b03831630145b1561103a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61104484846122f3565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92611095928a9216908990889088906004016139fb565b600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611108816124c1565b61111283836124cb565b50505050565b6001600160a01b038116331461115a576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116482826125b8565b505050565b611171611f6f565b6111796106b5565b85516000036111b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846000036111ee576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006111fe60608301836137d5565b61120991508461383a565b10611240576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61125e8573735b14bb79463307aacbed86daf3322b1e6226ab6122f3565b60008054604051869233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d926112ad928c926001600160a01b0316918c919081908c908c9083908d9061390e565b60405180910390a3610ef960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611308816124c1565b61131061267c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561135e5750825b905060008267ffffffffffffffff16600114801561137b5750303b155b905081158015611389575080155b156113c0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156114215784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061143e57506001600160a01b038616155b15611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61147d61270c565b61148561270c565b61148d612714565b611495612724565b6114a06000876124cb565b506114cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876124cb565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c365784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b611570612734565b61157982612804565b611583828261280f565b5050565b6000611591612933565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611603576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61160b6106b5565b6001600160a01b03821661164b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de09061169090849060040161376f565b600060405180830381600087803b1580156116aa57600080fd5b505af1158015610ef9573d6000803e3d6000fd5b6116c6611f6f565b6116ce6106b5565b8351600003611709576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611743576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061174f8484612995565b90506000336001600160a01b03167f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d3557887868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190613874565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118469190613874565b8a60405161185a9796959493929190613a6c565b60405180910390a35061111260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6118b6816124c1565b611310612a03565b6118c6611f6f565b6118ce6106b5565b8351600003611909576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611943576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119618373735b14bb79463307aacbed86daf3322b1e6226ab6122f3565b60008054604051849233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d926119ac928a926001600160a01b0316918a9190819081908b90613a6c565b60405180910390a361111260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a2a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a326106b5565b6001600160a01b0385161580611a4f57506001600160a01b038316155b15611a86576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90611ad390899089908990889088906004016139fb565b600060405180830381600087803b158015611aed57600080fd5b505af1158015611b01573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611b5a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b626106b5565b6001600160a01b0385161580611b7f57506001600160a01b038316155b15611bb6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611bf0576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611c2357506001600160a01b03831630145b15611c5a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce691906136a5565b611a86576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611d56816124c1565b61111283836125b8565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611dad576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db56106b5565b6001600160a01b0383161580611dd257506001600160a01b038116155b15611e09576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611e43576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611e7657506001600160a01b03811630145b15611ead576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3991906136a5565b611164576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611fea576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b815260040161202391815260200190565b6040805180830381865afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120639190613981565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af11580156120e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210c91906136a5565b612142576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af11580156121ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d291906136a5565b612208576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228c91906136a5565b6122c2576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238791906136a5565b6123bd576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561241c57600080fd5b505af1158015612430573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114612481576040519150601f19603f3d011682016040523d82523d6000602084013e612486565b606091505b5050905080611164576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113108133612a7c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166125ae576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556125643390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a6565b60009150506107a6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156125ae576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a6565b612684612b09565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b610711612b64565b61271c612b64565b610711612bcb565b61272c612b64565b610711612c1c565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806127cd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610711576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611583816124c1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612887575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261288491810190613874565b60015b6128cd576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612929576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016128c4565b6111648383612c24565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610711576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006122c68383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fe9190613874565b611ff0565b612a0b6106b5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336126ee565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611583576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016128c4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610711576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610711576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bd3612b64565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6122cd612b64565b612c2d82612c7a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612c72576111648282612d22565b611583612d98565b806001600160a01b03163b600003612cc9576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016128c4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d3f9190613ada565b600060405180830381855af49150503d8060008114612d7a576040519150601f19603f3d011682016040523d82523d6000602084013e612d7f565b606091505b5091509150612d8f858383612dd0565b95945050505050565b3415610711576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612de557612de082612e45565b6122c6565b8151158015612dfc57506001600160a01b0384163b155b15612e3e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016128c4565b50806122c6565b805115612e555780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612e9957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146122c657600080fd5b6001600160a01b038116811461131057600080fd5b600060608284031215612ef057600080fd5b50919050565b60008060008060808587031215612f0c57600080fd5b8435612f1781612ec9565b9350602085013592506040850135612f2e81612ec9565b9150606085013567ffffffffffffffff811115612f4a57600080fd5b612f5687828801612ede565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612fa257600080fd5b813567ffffffffffffffff811115612fbc57612fbc612f62565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561302857613028612f62565b60405281815283820160200185101561304057600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f84011261306f57600080fd5b50813567ffffffffffffffff81111561308757600080fd5b60208301915083602082850101111561309f57600080fd5b9250929050565b600060a08284031215612ef057600080fd5b600080600080600080600060c0888a0312156130d357600080fd5b873567ffffffffffffffff8111156130ea57600080fd5b6130f68a828b01612f91565b97505060208801359550604088013561310e81612ec9565b9450606088013567ffffffffffffffff81111561312a57600080fd5b6131368a828b0161305d565b9095509350506080880135915060a088013567ffffffffffffffff81111561315d57600080fd5b6131698a828b016130a6565b91505092959891949750929550565b60008060008060008060a0878903121561319157600080fd5b863567ffffffffffffffff8111156131a857600080fd5b6131b489828a01612f91565b96505060208701356131c581612ec9565b9450604087013567ffffffffffffffff8111156131e157600080fd5b6131ed89828a0161305d565b90955093505060608701359150608087013567ffffffffffffffff81111561321457600080fd5b61322089828a016130a6565b9150509295509295509295565b60008060008060006080868803121561324557600080fd5b853567ffffffffffffffff81111561325c57600080fd5b61326888828901612ede565b95505060208601359350604086013561328081612ec9565b9250606086013567ffffffffffffffff81111561329c57600080fd5b6132a88882890161305d565b969995985093965092949392505050565b6000602082840312156132cb57600080fd5b5035919050565b600080604083850312156132e557600080fd5b8235915060208301356132f781612ec9565b809150509250929050565b60008060008060008060a0878903121561331b57600080fd5b863567ffffffffffffffff81111561333257600080fd5b61333e89828a01612f91565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561336957600080fd5b61337589828a0161305d565b909450925050608087013567ffffffffffffffff81111561321457600080fd5b600080604083850312156133a857600080fd5b82356133b381612ec9565b915060208301356132f781612ec9565b600080604083850312156133d657600080fd5b82356133e181612ec9565b9150602083013567ffffffffffffffff8111156133fd57600080fd5b61340985828601612f91565b9150509250929050565b6000806040838503121561342657600080fd5b823561343181612ec9565b9150602083013567ffffffffffffffff81111561344d57600080fd5b61340985828601612ede565b6000806000806080858703121561346f57600080fd5b843567ffffffffffffffff81111561348657600080fd5b61349287828801612f91565b9450506020850135925060408501356134aa81612ec9565b9150606085013567ffffffffffffffff8111156134c657600080fd5b612f56878288016130a6565b600080600080608085870312156134e857600080fd5b843567ffffffffffffffff8111156134ff57600080fd5b61350b87828801612f91565b9450506020850135925060408501359150606085013567ffffffffffffffff8111156134c657600080fd5b60005b83811015613551578181015183820152602001613539565b50506000910152565b60008151808452613572816020860160208601613536565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122c6602083018461355a565b60008060008060008060a087890312156135d057600080fd5b863567ffffffffffffffff8111156135e757600080fd5b6135f389828a01612ede565b965050602087013561360481612ec9565b945060408701359350606087013561361b81612ec9565b9250608087013567ffffffffffffffff81111561363757600080fd5b61364389828a0161305d565b979a9699509497509295939492505050565b60008060006060848603121561366a57600080fd5b833561367581612ec9565b925060208401359150604084013561368c81612ec9565b809150509250925092565b801515811461131057600080fd5b6000602082840312156136b757600080fd5b81516122c681613697565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f757600080fd5b830160208101925035905067ffffffffffffffff81111561371757600080fd5b80360382131561309f57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561378081612ec9565b6001600160a01b038116602084015250602083013567ffffffffffffffff81168082146137ac57600080fd5b80604085015250506137c160408401846136c2565b606080850152612d8f608085018284613726565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261380a57600080fd5b83018035915067ffffffffffffffff82111561382557600080fd5b60200191503681900382131561309f57600080fd5b808201808211156107a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561388657600080fd5b5051919050565b6000813561389a81612ec9565b6001600160a01b0316835260208201356138b381613697565b1515602084015260408201356138c881612ec9565b6001600160a01b031660408401526138e360608301836136c2565b60a060608601526138f860a086018284613726565b6080948501359590940194909452509092915050565b6101008152600061392361010083018c61355a565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a0840152613957818789613726565b90508460c084015282810360e0840152613971818561388d565b9c9b505050505050505050505050565b6000806040838503121561399457600080fd5b825161399f81612ec9565b6020939093015192949293505050565b6080815260006139c2608083018861355a565b82810360208401526139d5818789613726565b905084604084015282810360608401526139ef818561388d565b98975050505050505050565b608081526000613a0b87886136c2565b60606080850152613a2060e085018284613726565b9150506020880135613a3181612ec9565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526139ef818587613726565b61010081526000613a8161010083018a61355a565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e085015250613acc602082018561388d565b9a9950505050505050505050565b60008251613aec818460208701613536565b919091019291505056fea2646970667358221220f71bd58ca9f5b156fdd36da2e6242c5e39c6ce1c972a51f93d45335cd01aa5a664736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_MESSAGE_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallOnRevertNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZETANotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b0380861692635bcfd6169261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d3557887868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b03841690635bcfd6169061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea26469706673582212208a13c91b149fb6f550c049c370fc634fbf4f102e79ec8481debd5fbf58cc261f64736f6c634300081a0033", } // GatewayZEVMUpgradeTestABI is the input ABI used to generate the binding from. @@ -611,42 +611,42 @@ func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) Deposit( // DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. // // Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) DepositAndCall(opts *bind.TransactOpts, context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) DepositAndCall(opts *bind.TransactOpts, context MessageContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVMUpgradeTest.contract.Transact(opts, "depositAndCall", context, amount, target, message) } // DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. // // Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) DepositAndCall(context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) DepositAndCall(context MessageContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVMUpgradeTest.Contract.DepositAndCall(&_GatewayZEVMUpgradeTest.TransactOpts, context, amount, target, message) } // DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. // // Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) DepositAndCall(context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) DepositAndCall(context MessageContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVMUpgradeTest.Contract.DepositAndCall(&_GatewayZEVMUpgradeTest.TransactOpts, context, amount, target, message) } // DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. // // Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) DepositAndCall0(opts *bind.TransactOpts, context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) DepositAndCall0(opts *bind.TransactOpts, context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVMUpgradeTest.contract.Transact(opts, "depositAndCall0", context, zrc20, amount, target, message) } // DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. // // Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) DepositAndCall0(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) DepositAndCall0(context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVMUpgradeTest.Contract.DepositAndCall0(&_GatewayZEVMUpgradeTest.TransactOpts, context, zrc20, amount, target, message) } // DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. // // Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) DepositAndCall0(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) DepositAndCall0(context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVMUpgradeTest.Contract.DepositAndCall0(&_GatewayZEVMUpgradeTest.TransactOpts, context, zrc20, amount, target, message) } @@ -674,21 +674,21 @@ func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) DepositA // Execute is a paid mutator transaction binding the contract method 0xbcf7f32b. // // Solidity: function execute((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) Execute(opts *bind.TransactOpts, context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactor) Execute(opts *bind.TransactOpts, context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVMUpgradeTest.contract.Transact(opts, "execute", context, zrc20, amount, target, message) } // Execute is a paid mutator transaction binding the contract method 0xbcf7f32b. // // Solidity: function execute((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) Execute(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestSession) Execute(context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVMUpgradeTest.Contract.Execute(&_GatewayZEVMUpgradeTest.TransactOpts, context, zrc20, amount, target, message) } // Execute is a paid mutator transaction binding the contract method 0xbcf7f32b. // // Solidity: function execute((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) Execute(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_GatewayZEVMUpgradeTest *GatewayZEVMUpgradeTestTransactorSession) Execute(context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _GatewayZEVMUpgradeTest.Contract.Execute(&_GatewayZEVMUpgradeTest.TransactOpts, context, zrc20, amount, target, message) } diff --git a/v2/pkg/igatewayzevm.sol/igatewayzevm.go b/v2/pkg/igatewayzevm.sol/igatewayzevm.go index 01d4174b9..349b4421b 100644 --- a/v2/pkg/igatewayzevm.sol/igatewayzevm.go +++ b/v2/pkg/igatewayzevm.sol/igatewayzevm.go @@ -29,6 +29,13 @@ var ( _ = abi.ConvertType ) +// MessageContext is an auto generated low-level Go binding around an user-defined struct. +type MessageContext struct { + Origin []byte + Sender common.Address + ChainID *big.Int +} + // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address @@ -45,16 +52,9 @@ type RevertOptions struct { OnRevertGasLimit *big.Int } -// ZContext is an auto generated low-level Go binding around an user-defined struct. -type ZContext struct { - Origin []byte - Sender common.Address - ChainID *big.Int -} - // IGatewayZEVMMetaData contains all meta data concerning the IGatewayZEVM contract. var IGatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", } // IGatewayZEVMABI is the input ABI used to generate the binding from. @@ -248,42 +248,42 @@ func (_IGatewayZEVM *IGatewayZEVMTransactorSession) Deposit(zrc20 common.Address // DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. // // Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMTransactor) DepositAndCall(opts *bind.TransactOpts, context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_IGatewayZEVM *IGatewayZEVMTransactor) DepositAndCall(opts *bind.TransactOpts, context MessageContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _IGatewayZEVM.contract.Transact(opts, "depositAndCall", context, amount, target, message) } // DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. // // Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMSession) DepositAndCall(context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_IGatewayZEVM *IGatewayZEVMSession) DepositAndCall(context MessageContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _IGatewayZEVM.Contract.DepositAndCall(&_IGatewayZEVM.TransactOpts, context, amount, target, message) } // DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. // // Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMTransactorSession) DepositAndCall(context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_IGatewayZEVM *IGatewayZEVMTransactorSession) DepositAndCall(context MessageContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _IGatewayZEVM.Contract.DepositAndCall(&_IGatewayZEVM.TransactOpts, context, amount, target, message) } // DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. // // Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMTransactor) DepositAndCall0(opts *bind.TransactOpts, context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_IGatewayZEVM *IGatewayZEVMTransactor) DepositAndCall0(opts *bind.TransactOpts, context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _IGatewayZEVM.contract.Transact(opts, "depositAndCall0", context, zrc20, amount, target, message) } // DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. // // Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMSession) DepositAndCall0(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_IGatewayZEVM *IGatewayZEVMSession) DepositAndCall0(context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _IGatewayZEVM.Contract.DepositAndCall0(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } // DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. // // Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMTransactorSession) DepositAndCall0(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_IGatewayZEVM *IGatewayZEVMTransactorSession) DepositAndCall0(context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _IGatewayZEVM.Contract.DepositAndCall0(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } @@ -311,21 +311,21 @@ func (_IGatewayZEVM *IGatewayZEVMTransactorSession) DepositAndRevert(zrc20 commo // Execute is a paid mutator transaction binding the contract method 0xbcf7f32b. // // Solidity: function execute((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMTransactor) Execute(opts *bind.TransactOpts, context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_IGatewayZEVM *IGatewayZEVMTransactor) Execute(opts *bind.TransactOpts, context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _IGatewayZEVM.contract.Transact(opts, "execute", context, zrc20, amount, target, message) } // Execute is a paid mutator transaction binding the contract method 0xbcf7f32b. // // Solidity: function execute((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMSession) Execute(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_IGatewayZEVM *IGatewayZEVMSession) Execute(context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _IGatewayZEVM.Contract.Execute(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } // Execute is a paid mutator transaction binding the contract method 0xbcf7f32b. // // Solidity: function execute((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMTransactorSession) Execute(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { +func (_IGatewayZEVM *IGatewayZEVMTransactorSession) Execute(context MessageContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { return _IGatewayZEVM.Contract.Execute(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } diff --git a/v2/pkg/senderzevm.sol/senderzevm.go b/v2/pkg/senderzevm.sol/senderzevm.go index b2d98d87d..c94c995bb 100644 --- a/v2/pkg/senderzevm.sol/senderzevm.go +++ b/v2/pkg/senderzevm.sol/senderzevm.go @@ -32,7 +32,7 @@ var ( // SenderZEVMMetaData contains all meta data concerning the SenderZEVM contract. var SenderZEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"callReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawAndCallReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]}]", - Bin: "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220d7e1a9075911564d308c037a0af9765ff7f3977eee9652547da152cb6de1448964736f6c634300081a0033", + Bin: "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea264697066735822122037e9f02c9f1066889aa75870351a007a7daaa8277c5c9d435a858ffde2091b1364736f6c634300081a0033", } // SenderZEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/systemcontract.sol/systemcontract.go b/v2/pkg/systemcontract.sol/systemcontract.go index e0a21696e..908cb1cf7 100644 --- a/v2/pkg/systemcontract.sol/systemcontract.go +++ b/v2/pkg/systemcontract.sol/systemcontract.go @@ -39,7 +39,7 @@ type ZContext struct { // SystemContractMetaData contains all meta data concerning the SystemContract contract. var SystemContractMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"wzeta_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Factory_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Router02_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gasCoinZRC20ByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPriceByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasZetaPoolByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setConnectorZEVMAddress\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasCoinZRC20\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasPrice\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasZetaPool\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"erc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setWZETAContractAddress\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"uniswapv2FactoryAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"uniswapv2PairFor\",\"inputs\":[{\"name\":\"factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenA\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenB\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"pair\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"uniswapv2Router02Address\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"wZetaContractAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaConnectorZEVMAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"SetConnectorZEVM\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasCoin\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasPrice\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasZetaPool\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetWZeta\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SystemContractDeployed\",\"inputs\":[],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeIdenticalAddresses\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201bc2c2e5533a7390cd5c9f230b641bee17c3057fdf7a0f92b4302cd8cea1ce6764736f6c634300081a0033", + Bin: "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212206cfc8728f3e6a008fa60110012d328f8d2a859ba07c5fdfb6776051dc27a333964736f6c634300081a0033", } // SystemContractABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/systemcontractmock.sol/systemcontractmock.go b/v2/pkg/systemcontractmock.sol/systemcontractmock.go index ebc8c6ab5..2c055ee13 100644 --- a/v2/pkg/systemcontractmock.sol/systemcontractmock.go +++ b/v2/pkg/systemcontractmock.sol/systemcontractmock.go @@ -32,7 +32,7 @@ var ( // SystemContractMockMetaData contains all meta data concerning the SystemContractMock contract. var SystemContractMockMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"wzeta_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Factory_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Router02_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gasCoinZRC20ByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPriceByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasZetaPoolByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onCrossChainCall\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasCoinZRC20\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasPrice\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setWZETAContractAddress\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"uniswapv2FactoryAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"uniswapv2PairFor\",\"inputs\":[{\"name\":\"factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenA\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenB\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"pair\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"uniswapv2Router02Address\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"wZetaContractAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"SetGasCoin\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasPrice\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasZetaPool\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetWZeta\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SystemContractDeployed\",\"inputs\":[],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeIdenticalAddresses\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]}]", - Bin: "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220cc406cf4b9f9cfbacfa9f32870eb254a68b539001bcca4f238577e817f73a2ab64736f6c634300081a0033", + Bin: "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220e349eeb22d87c24401c0e0a954fb5e1774b175448e0269cf8092b426d6a4912864736f6c634300081a0033", } // SystemContractMockABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go b/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go index 74339bc3e..b55d74562 100644 --- a/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go +++ b/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go @@ -29,6 +29,13 @@ var ( _ = abi.ConvertType ) +// MessageContext is an auto generated low-level Go binding around an user-defined struct. +type MessageContext struct { + Origin []byte + Sender common.Address + ChainID *big.Int +} + // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address @@ -36,17 +43,10 @@ type RevertContext struct { RevertMessage []byte } -// ZContext is an auto generated low-level Go binding around an user-defined struct. -type ZContext struct { - Origin []byte - Sender common.Address - ChainID *big.Int -} - // TestUniversalContractMetaData contains all meta data concerning the TestUniversalContract contract. var TestUniversalContractMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"onCrossChainCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", - Bin: "0x6080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c8063660b9de014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c1828401846103a2565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610498565b6100ff60408a0160208b01610504565b8960400135338660405161011896959493929190610526565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b1660208201526000602083013567ffffffffffffffff81168082146102ed57600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261032a57600080fd5b830160208101903567ffffffffffffffff81111561034757600080fd5b80360382131561035657600080fd5b60608085015261036a60808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103b457600080fd5b813567ffffffffffffffff8111156103cb57600080fd5b8201601f810184136103dc57600080fd5b803567ffffffffffffffff8111156103f6576103f6610373565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561046257610462610373565b60405281815282820160200186101561047a57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104cd57600080fd5b83018035915067ffffffffffffffff8211156104e857600080fd5b6020019150368190038213156104fd57600080fd5b9250929050565b60006020828403121561051657600080fd5b61051f8261017d565b9392505050565b60a08152600061053a60a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105a457602081870181015184830182015201610588565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122002711b914cfa85869597d761ee7a81ae9c55589f2201dbf0c65836b421bff96564736f6c634300081a0033", + ABI: "[{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"onCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", + Bin: "0x6080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c80635bcfd61614610033578063660b9de01461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610169565b610073565b34801561005f57600080fd5b5061003161006e366004610221565b6100ee565b6060811561008a576100878284018461028d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610383565b6100c560408a0160208b016103ef565b896040013533866040516100de9695949392919061045a565b60405180910390a1505050505050565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c768160405161011d919061051c565b60405180910390a150565b60006060828403121561013a57600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016457600080fd5b919050565b60008060008060006080868803121561018157600080fd5b853567ffffffffffffffff81111561019857600080fd5b6101a488828901610128565b9550506101b360208701610140565b935060408601359250606086013567ffffffffffffffff8111156101d657600080fd5b8601601f810188136101e757600080fd5b803567ffffffffffffffff8111156101fe57600080fd5b88602082840101111561021057600080fd5b959894975092955050506020019190565b60006020828403121561023357600080fd5b813567ffffffffffffffff81111561024a57600080fd5b61025684828501610128565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561029f57600080fd5b813567ffffffffffffffff8111156102b657600080fd5b8201601f810184136102c757600080fd5b803567ffffffffffffffff8111156102e1576102e161025e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561034d5761034d61025e565b60405281815282820160200186101561036557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126103b857600080fd5b83018035915067ffffffffffffffff8211156103d357600080fd5b6020019150368190038213156103e857600080fd5b9250929050565b60006020828403121561040157600080fd5b61040a82610140565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a08152600061046e60a08301888a610411565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156104d8576020818701810151848301820152016104bc565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683010192505050979650505050505050565b6020815273ffffffffffffffffffffffffffffffffffffffff61053e83610140565b1660208201526000602083013567ffffffffffffffff811680821461056257600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261059f57600080fd5b830160208101903567ffffffffffffffff8111156105bc57600080fd5b8036038213156105cb57600080fd5b6060808501526105df608085018284610411565b9594505050505056fea2646970667358221220cb26ed07348041180f6631404fac1759ff8efa800dbae7e9722129211743d1d664736f6c634300081a0033", } // TestUniversalContractABI is the input ABI used to generate the binding from. @@ -216,25 +216,25 @@ func (_TestUniversalContract *TestUniversalContractTransactorRaw) Transact(opts return _TestUniversalContract.Contract.contract.Transact(opts, method, params...) } -// OnCrossChainCall is a paid mutator transaction binding the contract method 0xde43156e. +// OnCall is a paid mutator transaction binding the contract method 0x5bcfd616. // -// Solidity: function onCrossChainCall((bytes,address,uint256) context, address zrc20, uint256 amount, bytes message) returns() -func (_TestUniversalContract *TestUniversalContractTransactor) OnCrossChainCall(opts *bind.TransactOpts, context ZContext, zrc20 common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { - return _TestUniversalContract.contract.Transact(opts, "onCrossChainCall", context, zrc20, amount, message) +// Solidity: function onCall((bytes,address,uint256) context, address zrc20, uint256 amount, bytes message) returns() +func (_TestUniversalContract *TestUniversalContractTransactor) OnCall(opts *bind.TransactOpts, context MessageContext, zrc20 common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { + return _TestUniversalContract.contract.Transact(opts, "onCall", context, zrc20, amount, message) } -// OnCrossChainCall is a paid mutator transaction binding the contract method 0xde43156e. +// OnCall is a paid mutator transaction binding the contract method 0x5bcfd616. // -// Solidity: function onCrossChainCall((bytes,address,uint256) context, address zrc20, uint256 amount, bytes message) returns() -func (_TestUniversalContract *TestUniversalContractSession) OnCrossChainCall(context ZContext, zrc20 common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { - return _TestUniversalContract.Contract.OnCrossChainCall(&_TestUniversalContract.TransactOpts, context, zrc20, amount, message) +// Solidity: function onCall((bytes,address,uint256) context, address zrc20, uint256 amount, bytes message) returns() +func (_TestUniversalContract *TestUniversalContractSession) OnCall(context MessageContext, zrc20 common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { + return _TestUniversalContract.Contract.OnCall(&_TestUniversalContract.TransactOpts, context, zrc20, amount, message) } -// OnCrossChainCall is a paid mutator transaction binding the contract method 0xde43156e. +// OnCall is a paid mutator transaction binding the contract method 0x5bcfd616. // -// Solidity: function onCrossChainCall((bytes,address,uint256) context, address zrc20, uint256 amount, bytes message) returns() -func (_TestUniversalContract *TestUniversalContractTransactorSession) OnCrossChainCall(context ZContext, zrc20 common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { - return _TestUniversalContract.Contract.OnCrossChainCall(&_TestUniversalContract.TransactOpts, context, zrc20, amount, message) +// Solidity: function onCall((bytes,address,uint256) context, address zrc20, uint256 amount, bytes message) returns() +func (_TestUniversalContract *TestUniversalContractTransactorSession) OnCall(context MessageContext, zrc20 common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { + return _TestUniversalContract.Contract.OnCall(&_TestUniversalContract.TransactOpts, context, zrc20, amount, message) } // OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. diff --git a/v2/pkg/universalcontract.sol/universalcontract.go b/v2/pkg/universalcontract.sol/universalcontract.go index bafa66941..658267976 100644 --- a/v2/pkg/universalcontract.sol/universalcontract.go +++ b/v2/pkg/universalcontract.sol/universalcontract.go @@ -29,6 +29,13 @@ var ( _ = abi.ConvertType ) +// MessageContext is an auto generated low-level Go binding around an user-defined struct. +type MessageContext struct { + Origin []byte + Sender common.Address + ChainID *big.Int +} + // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Asset common.Address @@ -36,16 +43,9 @@ type RevertContext struct { RevertMessage []byte } -// ZContext is an auto generated low-level Go binding around an user-defined struct. -type ZContext struct { - Origin []byte - Sender common.Address - ChainID *big.Int -} - // UniversalContractMetaData contains all meta data concerning the UniversalContract contract. var UniversalContractMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"onCrossChainCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"onCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", } // UniversalContractABI is the input ABI used to generate the binding from. @@ -194,25 +194,25 @@ func (_UniversalContract *UniversalContractTransactorRaw) Transact(opts *bind.Tr return _UniversalContract.Contract.contract.Transact(opts, method, params...) } -// OnCrossChainCall is a paid mutator transaction binding the contract method 0xde43156e. +// OnCall is a paid mutator transaction binding the contract method 0x5bcfd616. // -// Solidity: function onCrossChainCall((bytes,address,uint256) context, address zrc20, uint256 amount, bytes message) returns() -func (_UniversalContract *UniversalContractTransactor) OnCrossChainCall(opts *bind.TransactOpts, context ZContext, zrc20 common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { - return _UniversalContract.contract.Transact(opts, "onCrossChainCall", context, zrc20, amount, message) +// Solidity: function onCall((bytes,address,uint256) context, address zrc20, uint256 amount, bytes message) returns() +func (_UniversalContract *UniversalContractTransactor) OnCall(opts *bind.TransactOpts, context MessageContext, zrc20 common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { + return _UniversalContract.contract.Transact(opts, "onCall", context, zrc20, amount, message) } -// OnCrossChainCall is a paid mutator transaction binding the contract method 0xde43156e. +// OnCall is a paid mutator transaction binding the contract method 0x5bcfd616. // -// Solidity: function onCrossChainCall((bytes,address,uint256) context, address zrc20, uint256 amount, bytes message) returns() -func (_UniversalContract *UniversalContractSession) OnCrossChainCall(context ZContext, zrc20 common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { - return _UniversalContract.Contract.OnCrossChainCall(&_UniversalContract.TransactOpts, context, zrc20, amount, message) +// Solidity: function onCall((bytes,address,uint256) context, address zrc20, uint256 amount, bytes message) returns() +func (_UniversalContract *UniversalContractSession) OnCall(context MessageContext, zrc20 common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { + return _UniversalContract.Contract.OnCall(&_UniversalContract.TransactOpts, context, zrc20, amount, message) } -// OnCrossChainCall is a paid mutator transaction binding the contract method 0xde43156e. +// OnCall is a paid mutator transaction binding the contract method 0x5bcfd616. // -// Solidity: function onCrossChainCall((bytes,address,uint256) context, address zrc20, uint256 amount, bytes message) returns() -func (_UniversalContract *UniversalContractTransactorSession) OnCrossChainCall(context ZContext, zrc20 common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { - return _UniversalContract.Contract.OnCrossChainCall(&_UniversalContract.TransactOpts, context, zrc20, amount, message) +// Solidity: function onCall((bytes,address,uint256) context, address zrc20, uint256 amount, bytes message) returns() +func (_UniversalContract *UniversalContractTransactorSession) OnCall(context MessageContext, zrc20 common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { + return _UniversalContract.Contract.OnCall(&_UniversalContract.TransactOpts, context, zrc20, amount, message) } // OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. diff --git a/v2/pkg/zrc20.t.sol/zrc20test.go b/v2/pkg/zrc20.t.sol/zrc20test.go index cd09d6d98..dfabaf080 100644 --- a/v2/pkg/zrc20.t.sol/zrc20test.go +++ b/v2/pkg/zrc20.t.sol/zrc20test.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZRC20TestMetaData contains all meta data concerning the ZRC20Test contract. var ZRC20TestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testApproveFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurn\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurnFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderIsNotGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFrom\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfSenderIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimitFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateNameAndSymbol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateNameAndSymbolFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFeeFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasCoinNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasPriceNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testZRC20BasicInfo\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowAllowance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasCoin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasPrice\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061eb078061003c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80638ce7ef051161019c578063d27b0427116100ee578063e02beae611610097578063f1f87f4011610071578063f1f87f40146104c3578063f2413096146104cb578063fa7626d4146104d357600080fd5b8063e02beae6146104ab578063e13aba48146104b3578063e20c9f71146104bb57600080fd5b8063d97136a2116100c8578063d97136a214610493578063dcba486a1461049b578063dfbdf600146104a357600080fd5b8063d27b04271461047b578063d509b16c14610483578063d591221f1461048b57600080fd5b8063b549984c11610150578063ba414fa61161012a578063ba414fa614610453578063d04cda981461046b578063d1fd32911461047357600080fd5b8063b549984c1461043b578063b5508aa914610443578063b79cad091461044b57600080fd5b8063a4aa6c7c11610181578063a4aa6c7c14610423578063ae9687dc1461042b578063b0464fdc1461043357600080fd5b80638ce7ef0514610406578063916a17c61461040e57600080fd5b80634b629509116102605780636ff45850116102095780637f924c4e116101e35780637f924c4e146103e157806380326680146103e957806385226c81146103f157600080fd5b80636ff45850146103c957806370557298146103d15780637ee68316146103d957600080fd5b806358fdbbe01161023a57806358fdbbe0146103a45780635f01db7e146103ac57806366d9a9a0146103b457600080fd5b80634b6295091461038c5780634cfc0aaa14610394578063513999621461039c57600080fd5b806328438826116102c25780633be9ec801161029c5780633be9ec80146103745780633e5e3c231461037c5780633f7286f41461038457600080fd5b8063284388261461034f5780632ade3880146103575780632f6254fc1461036c57600080fd5b80630a9254e4116102f35780630a9254e4146103215780631142744e146103295780631ed7831c1461033157600080fd5b80630393998b1461030f5780630809dfef14610319575b600080fd5b6103176104e0565b005b6103176105e2565b610317610770565b610317610e52565b610339610f36565b6040516103469190619737565b60405180910390f35b610317610f98565b61035f6111e3565b60405161034691906197d3565b610317611325565b610317611496565b610339611683565b6103396116e3565b610317611743565b610317611816565b6103176118ef565b610317611c6c565b610317611d3f565b6103bc611eac565b6040516103469190619939565b61031761202e565b61031761223e565b61031761248e565b61031761291f565b610317612b43565b6103f9612c17565b60405161034691906199d7565b610317612ce7565b610416612ee7565b6040516103469190619a4e565b610317612fe2565b610317613197565b610416613424565b61031761351f565b6103f96135f1565b6103176136c1565b61045b613a53565b6040519015158152602001610346565b610317613b27565b610317613c6b565b610317613dae565b610317613ef1565b610317614585565b610317614669565b6103176147ef565b610317614a72565b610317614bb5565b610317614de2565b61033961508c565b6103176150ec565b610317615232565b601f5461045b9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561054c57600080fd5b505af1158015610560573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105c857600080fd5b505af11580156105dc573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561063b57600080fd5b505af115801561064f573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156106bf57600080fd5b505af11580156106d3573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076d9190619ae5565b50565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580549091166112341790556040516107b690619657565b604051809103906000f0801580156107d2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054925190810193909352921660448201526108b6919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc9550000000000000000000000000000000000000000000000000000000017905261548e565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190619b23565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610a1157600080fd5b505af1158015610a25573d6000803e3d6000fd5b505050506000806000604051610a3a90619664565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a76573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610acc90619671565b610adb96959493929190619b3e565b604051809103906000f080158015610af7573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b9757600080fd5b505af1158015610bab573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610c1557600080fd5b505af1158015610c29573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610ca957600080fd5b505af1158015610cbd573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d3d57600080fd5b505af1158015610d51573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df39190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105c857600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610ebe57600080fd5b505af1158015610ed2573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef24915060440161072a565b60606016805480602002602001604051908101604052809291908181526020018280548015610f8e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f70575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110119190619c33565b905061101e6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ba9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561112757600080fd5b505af115801561113b573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af11580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190619ae5565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561131c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561130557838290600052602060002001805461127890619c4c565b80601f01602080910402602001604051908101604052809291908181526020018280546112a490619c4c565b80156112f15780601f106112c6576101008083540402835291602001916112f1565b820191906000526020600020905b8154815290600101906020018083116112d457829003601f168201915b505050505081526020019060010190611259565b505050508152505081526020019060010190611207565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561137e57600080fd5b505af1158015611392573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113fa57600080fd5b505af115801561140e573d6000803e3d6000fd5b50505050611494601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190619b23565b613211615535565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114ef57600080fd5b505af1158015611503573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561156d57600080fd5b505af1158015611581573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115f257600080fd5b505af1158015611606573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561165f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190619c99565b60606018805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc7759991506024016105ae565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b3915060440161072a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561194d57600080fd5b505af1158015611961573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119c857600080fd5b505af11580156119dc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a3957600080fd5b505af1158015611a4d573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5f9190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bbe57600080fd5b505af1158015611bd2573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119b9190600190603801619cc5565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cd857600080fd5b505af1158015611cec573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc91506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d9857600080fd5b505af1158015611dac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611e1357600080fd5b505af1158015611e27573d6000803e3d6000fd5b50505050611494600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea79190619c33565b6154ad565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561131c5783829060005260206000209060020201604051806040016040529081600082018054611f0390619c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2f90619c4c565b8015611f7c5780601f10611f5157610100808354040283529160200191611f7c565b820191906000526020600020905b815481529060010190602001808311611f5f57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561201657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611fc35790505b50505050508152505081526020019060010190611ed0565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a79190619c33565b90506120b46000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561212c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121509190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156121bd57600080fd5b505af11580156121d1573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd915060640161119b565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b79190619c33565b90506122c46000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561233b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235f9190619ae5565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124089190619ae5565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561245e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124829190619c33565b90506111de82826154ad565b6125476040518060400160405280600581526020017f544f4b454e000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125429190810190619daf565b615596565b6125d36040518060400160405280600381526020017f544b4e0000000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561262c57600080fd5b505af1158015612640573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b1580156126d457600080fd5b505af11580156126e8573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561274557600080fd5b505af1158015612759573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c82469150606401600060405180830381600087803b1580156127ef57600080fd5b505af1158015612803573d6000803e3d6000fd5b505050506128936040518060400160405280600681526020017f544f4b454e320000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b6114946040518060400160405280600481526020017f544b4e3200000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129989190619c33565b90506129a7620186a0826154ad565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a0057600080fd5b505af1158015612a14573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015612a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab69190619ae5565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b309190619c33565b9050612b3f62030d40826154ad565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612baf57600080fd5b505af1158015612bc3573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c68915060240161072a565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561131c578382906000526020600020018054612c5a90619c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054612c8690619c4c565b8015612cd35780601f10612ca857610100808354040283529160200191612cd3565b820191906000526020600020905b815481529060010190602001808311612cb657829003601f168201915b505050505081526020019060010190612c3b565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d609190619c33565b9050612d6d6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e099190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612e7657600080fd5b505af1158015612e8a573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb915060440161119b565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561131c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612fca57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f775790505b50505050508152505081526020019060010190612f0b565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561305a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307e9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130eb57600080fd5b505af11580156130ff573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015613173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3f9190619ae5565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156131ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132149190810190619daf565b90506132556040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156132aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132d29190810190619daf565b90506133136040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338c9190619df8565b905061339c60128260ff166154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134159190619c33565b90506105dc620186a0826154ad565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561131c5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561350757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116134b45790505b50505050508152505081526020019060010190613448565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561358b57600080fd5b505af115801561359f573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a91506024016105ae565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561131c57838290600052602060002001805461363490619c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461366090619c4c565b80156136ad5780601f10613682576101008083540402835291602001916136ad565b820191906000526020600020905b81548152906001019060200180831161369057829003601f168201915b505050505081526020019060010190613615565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561372357600080fd5b505af1158015613737573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b15801561379e57600080fd5b505af11580156137b2573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561380f57600080fd5b505af1158015613823573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561388a57600080fd5b505af115801561389e573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af1158015613914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139389190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156139a557600080fd5b505af11580156139b9573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119b9190606490603801619cc5565b60085460009060ff1615613a6b575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b209190619c33565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b8057600080fd5b505af1158015613b94573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bfb57600080fd5b505af1158015613c0f573d6000803e3d6000fd5b50505050611494600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613cc457600080fd5b505af1158015613cd8573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613d4857600080fd5b505af1158015613d5c573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc7759991506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e0757600080fd5b505af1158015613e1b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613e8b57600080fd5b505af1158015613e9f573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc91506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f4f57600080fd5b505af1158015613f63573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561403b57600080fd5b505af115801561404f573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156140b657600080fd5b505af11580156140ca573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015614121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141459190619c33565b9050614154620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141cd9190619c33565b90506141dc620186a0826154ad565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142559190619c33565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af11580156142c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142eb9190619ae5565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691614383919061c35090603801619cc5565b6020604051808303816000875af11580156143a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143c69190619ae5565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561441c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144409190619c33565b9050614460856144508885619e4a565b61445a9190619e4a565b826154ad565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156144b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d89190619c33565b90506144f4866144ea8961c350619e5d565b61445a9190619e5d565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061456d9190619c33565b905061457b61c350826154ad565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa1580156145da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145fe9190619c33565b905061460b6000826154ad565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb906044016123c5565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af11580156146e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147059190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561477257600080fd5b505af1158015614786573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401613154565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561484857600080fd5b505af115801561485c573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b1580156148c857600080fd5b505af11580156148dc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561493957600080fd5b505af115801561494d573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156149b457600080fd5b505af11580156149c8573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015614a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a459190619c99565b601f549193509150614a659061010090046001600160a01b031683615535565b6105dc61445a8486619e4a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614acb57600080fd5b505af1158015614adf573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b158015614b4757600080fd5b505af1158015614b5b573d6000803e3d6000fd5b50505050611494601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611468573d6000803e3d6000fd5b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614c2157600080fd5b505af1158015614c35573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b158015614cc957600080fd5b505af1158015614cdd573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614d4d57600080fd5b505af1158015614d61573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c824691506064016105ae565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e5a9190619c33565b9050614e69620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ee29190619c33565b9050614ef1620186a0826154ad565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f7e9190619ae5565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ff79190619c33565b905061500561c350826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561505a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061507e9190619c33565b90506105dc61c350826154ad565b60606015805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561514557600080fd5b505af1158015615159573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b1580156151c357600080fd5b505af11580156151d7573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115d8565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015615287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152ab9190619c33565b90506152b86000826154ad565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa15801561532e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153529190619c33565b905061535f6000826154ad565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156153cf57600080fd5b505af11580156153e3573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af115801561546a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190619ae5565b600061549861967e565b6154a38484836155e8565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b15801561551957600080fd5b505afa15801561552d573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401615501565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d963906155019085908590600401619e70565b6000806155f58584615663565b90506156586040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615643929190619e95565b6040516020818303038152906040528561566f565b9150505b9392505050565b600061565c838361569d565b60c081015151600090156156935761568c84848460c001516156b8565b905061565c565b61568c848461585e565b60006156a98383615949565b61565c8383602001518461566f565b6000806156c3615955565b905060006156d18683615a28565b905060006156e88260600151836020015185615ece565b905060006156f8838389896160e0565b9050600061570582616f5d565b602081015181519192509060030b156157785789826040015160405160200161572f929190619eb7565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261576f91600401619f38565b60405180910390fd5b60006157bb6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161712c565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061580e908490600401619f38565b602060405180830381865afa15801561582b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061584f9190619b23565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906158b3908790600401619f38565b600060405180830381865afa1580156158d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158f89190810190619f6b565b905060006159268285604051602001615912929190619fa0565b60405160208183030381529060405261732c565b90506001600160a01b0381166154a357848460405160200161572f929190619fcf565b612b3f8282600061733f565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906159dc90849060040161a07a565b600060405180830381865afa1580156159f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a219190810190619daf565b9250505090565b615a5a6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050615aa56040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b615aae85617442565b60208201526000615abe86617827565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615b00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b289190810190619daf565b86838560200151604051602001615b42949392919061a0c1565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190615b9a908590600401619f38565b600060405180830381865afa158015615bb7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615bdf9190810190619daf565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615c2790849060040161a1c5565b602060405180830381865afa158015615c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c689190619ae5565b615c7d578160405160200161572f919061a217565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615cc290849060040161a2a9565b600060405180830381865afa158015615cdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d079190810190619daf565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615d4e90849060040161a2fb565b602060405180830381865afa158015615d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615d8f9190619ae5565b15615e24576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615dd990849060040161a2fb565b600060405180830381865afa158015615df6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e1e9190810190619daf565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615e49919061a34d565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615e75929190619e70565b600060405180830381865afa158015615e92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615eba9190810190619daf565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615eea5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615f4a57615f4a61a3b9565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615f9e57615f9e61a3b9565b602002602001018190525084604051602001615fba919061a3e8565b60405160208183030381529060405281600281518110615fdc57615fdc61a3b9565b602002602001018190525082604051602001615ff8919061a454565b6040516020818303038152906040528160038151811061601a5761601a61a3b9565b6020026020010181905250600061603082616f5d565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506160c19060408051808201825260008082526020918201528151808301909252845182528085019082015290617aaa565b6160d6578560405160200161572f919061a495565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616130565b511590565b6162a4578260200151156161ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161576f565b8260c00151156162a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161576f565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816162bd57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806163189061a526565b935060ff168151811061632d5761632d61a3b9565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161637e919061a545565b6040516020818303038152906040528282806163999061a526565b935060ff16815181106163ae576163ae61a3b9565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806163fb9061a526565b935060ff16815181106164105761641061a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061645d9061a526565b935060ff16815181106164725761647261a3b9565b6020026020010181905250876020015182828061648e9061a526565b935060ff16815181106164a3576164a361a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806164f09061a526565b935060ff16815181106165055761650561a3b9565b60209081029190910101528751828261651d8161a526565b935060ff16815181106165325761653261a3b9565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061657f9061a526565b935060ff16815181106165945761659461a3b9565b60200260200101819052506165a846617b0b565b82826165b38161a526565b935060ff16815181106165c8576165c861a3b9565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806166159061a526565b935060ff168151811061662a5761662a61a3b9565b6020026020010181905250868282806166429061a526565b935060ff16815181106166575761665761a3b9565b602090810291909101015285511561677e5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826166a88161a526565b935060ff16815181106166bd576166bd61a3b9565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061670d908990600401619f38565b600060405180830381865afa15801561672a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167529190810190619daf565b828261675d8161a526565b935060ff16815181106167725761677261a3b9565b60200260200101819052505b84602001511561684e5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826167c78161a526565b935060ff16815181106167dc576167dc61a3b9565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806168299061a526565b935060ff168151811061683e5761683e61a3b9565b6020026020010181905250616a15565b61688661612b8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6169195760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826168c98161a526565b935060ff16815181106168de576168de61a3b9565b60200260200101819052508460a001516040516020016168fe919061a3e8565b6040516020818303038152906040528282806168299061a526565b8460c0015115801561695c57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261695a90511590565b155b15616a155760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826169a08161a526565b935060ff16815181106169b5576169b561a3b9565b60200260200101819052506169c988617bab565b6040516020016169d9919061a3e8565b6040516020818303038152906040528282806169f49061a526565b935060ff1681518110616a0957616a0961a3b9565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152616a4990511590565b616ade5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282616a8c8161a526565b935060ff1681518110616aa157616aa161a3b9565b60200260200101819052508460400151828280616abd9061a526565b935060ff1681518110616ad257616ad261a3b9565b60200260200101819052505b606085015115616bff5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282616b278161a526565b935060ff1681518110616b3c57616b3c61a3b9565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616bab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616bd39190810190619daf565b8282616bde8161a526565b935060ff1681518110616bf357616bf361a3b9565b60200260200101819052505b60e08501515115616ca65760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616c498161a526565b935060ff1681518110616c5e57616c5e61a3b9565b6020026020010181905250616c7a8560e0015160000151617b0b565b8282616c858161a526565b935060ff1681518110616c9a57616c9a61a3b9565b60200260200101819052505b60e08501516020015115616d505760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616cf38161a526565b935060ff1681518110616d0857616d0861a3b9565b6020026020010181905250616d248560e0015160200151617b0b565b8282616d2f8161a526565b935060ff1681518110616d4457616d4461a3b9565b60200260200101819052505b60e08501516040015115616dfa5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282616d9d8161a526565b935060ff1681518110616db257616db261a3b9565b6020026020010181905250616dce8560e0015160400151617b0b565b8282616dd98161a526565b935060ff1681518110616dee57616dee61a3b9565b60200260200101819052505b60e08501516060015115616ea45760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616e478161a526565b935060ff1681518110616e5c57616e5c61a3b9565b6020026020010181905250616e788560e0015160600151617b0b565b8282616e838161a526565b935060ff1681518110616e9857616e9861a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616ec257616ec2619ce7565b604051908082528060200260200182016040528015616ef557816020015b6060815260200190600190039081616ee05790505b50905060005b8260ff168160ff161015616f4e57838160ff1681518110616f1e57616f1e61a3b9565b6020026020010151828260ff1681518110616f3b57616f3b61a3b9565b6020908102919091010152600101616efb565b5093505050505b949350505050565b616f846040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161700a9186910161a5b0565b600060405180830381865afa158015617027573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261704f9190810190619daf565b9050600061705d868361869a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161708d91906199d7565b6000604051808303816000875af11580156170ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526170d4919081019061a5f7565b805190915060030b158015906170ed5750602081015151155b80156170fc5750604081015151155b156160d657816000815181106171145761711461a3b9565b602002602001015160405160200161572f919061a6ad565b606060006171618560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506171989082905b906187ef565b156172f55760006172158261720f846172096171db8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618816565b90618878565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506172799082906187ef565b156172e357604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172e0905b82906188fd565b90505b6172ec81618923565b9250505061565c565b821561730e57848460405160200161572f92919061a899565b505060408051602081019091526000815261565c565b509392505050565b6000808251602084016000f09392505050565b8160a001511561734e57505050565b600061735b84848461898c565b9050600061736882616f5d565b602081015181519192509060030b1580156174045750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261740490604080518082018252600080825260209182015281518083019092528451825280850190820152617192565b1561741157505050505050565b6040820151511561743157816040015160405160200161572f919061a940565b8060405160200161572f919061a99e565b606060006174778360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506174dc905b8290617aaa565b1561754b57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546908390618f27565b618923565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ad905b8290618fb1565b60010361767a57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617613906172d9565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546905b83906188fd565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176d9906174d5565b1561781057604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061774190839061904b565b9050600081600183516177549190619e5d565b815181106177645761776461a3b9565b602002602001015190506178076175466177da6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618f27565b95945050505050565b8260405160200161572f919061aa09565b50919050565b6060600061785c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506178be906174d5565b156178cc5761565c81618923565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261792b906175a6565b60010361799557604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c9061754690617673565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179f4906174d5565b1561781057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617a5c90839061904b565b9050600181511115617a98578060028251617a779190619e5d565b81518110617a8757617a8761a3b9565b602002602001015192505050919050565b508260405160200161572f919061aa09565b805182516000911115617abf575060006154a7565b81518351602085015160009291617ad591619e4a565b617adf9190619e5d565b905082602001518103617af65760019150506154a7565b82516020840151819020912014905092915050565b60606000617b18836190f0565b600101905060008167ffffffffffffffff811115617b3857617b38619ce7565b6040519080825280601f01601f191660200182016040528015617b62576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617b6c57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617c37905b82906191d2565b15617c7757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cd690617c30565b15617d1657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d7590617c30565b15617db557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e1490617c30565b80617e795750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e7990617c30565b15617eb957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f1890617c30565b80617f7d5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f7d90617c30565b15617fbd57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261801c90617c30565b806180815750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261808190617c30565b156180c157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261812090617c30565b806181855750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261818590617c30565b156181c557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261822490617c30565b1561826457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182c390617c30565b1561830357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261836290617c30565b156183a257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261840190617c30565b1561844157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184a090617c30565b156184e057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261853f90617c30565b806185a45750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185a490617c30565b156185e457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261864390617c30565b1561868357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161572f929060200161aae7565b60608060005b845181101561872557818582815181106186bc576186bc61a3b9565b60200260200101516040516020016186d5929190619fa0565b6040516020818303038152906040529150600185516186f49190619e5d565b811461871d578160405160200161870b919061ac50565b60405160208183030381529060405291505b6001016186a0565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161873e57905050905083816000815181106187695761876961a3b9565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106187bd576187bd61a3b9565b602002602001018190525081816002815181106187dc576187dc61a3b9565b6020908102919091010152949350505050565b602080830151835183519284015160009361880d92918491906191e6565b14159392505050565b6040805180820190915260008082526020820152600061884884600001518560200151856000015186602001516192f7565b905083602001518161885a9190619e5d565b84518590618869908390619e5d565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561889d5750816154a7565b60208083015190840151600191146188c45750815160208481015190840151829020919020145b80156188f5578251845185906188db908390619e5d565b90525082516020850180516188f1908390619e4a565b9052505b509192915050565b604080518082019091526000808252602082015261891c838383619417565b5092915050565b60606000826000015167ffffffffffffffff81111561894457618944619ce7565b6040519080825280601f01601f19166020018201604052801561896e576020820181803683370190505b509050600060208201905061891c81856020015186600001516194c2565b60606000618998615955565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816189b557905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618a109061a526565b935060ff1681518110618a2557618a2561a3b9565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618a76919061ac91565b604051602081830303815290604052828280618a919061a526565b935060ff1681518110618aa657618aa661a3b9565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618af39061a526565b935060ff1681518110618b0857618b0861a3b9565b602002602001018190525082604051602001618b24919061a454565b604051602081830303815290604052828280618b3f9061a526565b935060ff1681518110618b5457618b5461a3b9565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618ba19061a526565b935060ff1681518110618bb657618bb661a3b9565b6020026020010181905250618bcb878461953c565b8282618bd68161a526565b935060ff1681518110618beb57618beb61a3b9565b602090810291909101015285515115618c975760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282618c3d8161a526565b935060ff1681518110618c5257618c5261a3b9565b6020026020010181905250618c6b86600001518461953c565b8282618c768161a526565b935060ff1681518110618c8b57618c8b61a3b9565b60200260200101819052505b856080015115618d055760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282618ce08161a526565b935060ff1681518110618cf557618cf561a3b9565b6020026020010181905250618d6b565b8415618d6b5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282618d4a8161a526565b935060ff1681518110618d5f57618d5f61a3b9565b60200260200101819052505b60408601515115618e075760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618db58161a526565b935060ff1681518110618dca57618dca61a3b9565b60200260200101819052508560400151828280618de69061a526565b935060ff1681518110618dfb57618dfb61a3b9565b60200260200101819052505b856060015115618e715760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618e508161a526565b935060ff1681518110618e6557618e6561a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618e8f57618e8f619ce7565b604051908082528060200260200182016040528015618ec257816020015b6060815260200190600190039081618ead5790505b50905060005b8260ff168160ff161015618f1b57838160ff1681518110618eeb57618eeb61a3b9565b6020026020010151828260ff1681518110618f0857618f0861a3b9565b6020908102919091010152600101618ec8565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618f4c5750816154a7565b81518351602085015160009291618f6291619e4a565b618f6c9190619e5d565b60208401519091506001908214618f8d575082516020840151819020908220145b8015618fa857835185518690618fa4908390619e5d565b9052505b50929392505050565b6000808260000151618fd585600001518660200151866000015187602001516192f7565b618fdf9190619e4a565b90505b83516020850151618ff39190619e4a565b811161891c57816190038161acd6565b925050826000015161903a85602001518361901e9190619e5d565b865161902a9190619e5d565b83866000015187602001516192f7565b6190449190619e4a565b9050618fe2565b606060006190598484618fb1565b619064906001619e4a565b67ffffffffffffffff81111561907c5761907c619ce7565b6040519080825280602002602001820160405280156190af57816020015b606081526020019060019003908161909a5790505b50905060005b8151811015617324576190cb61754686866188fd565b8282815181106190dd576190dd61a3b9565b60209081029190910101526001016190b5565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619139577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619165576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061918357662386f26fc10000830492506010015b6305f5e100831061919b576305f5e100830492506008015b61271083106191af57612710830492506004015b606483106191c1576064830492506002015b600a83106154a75760010192915050565b60006191de838361957c565b159392505050565b6000808584116192ed5760208411619299576000841561923157600161920d866020619e5d565b61921890600861acf0565b61922390600261adee565b61922d9190619e5d565b1990505b83518116856192408989619e4a565b61924a9190619e5d565b805190935082165b8181146192845787841161926c5787945050505050616f55565b836192768161adfa565b945050828451169050619252565b61928e8785619e4a565b945050505050616f55565b8383206192a68588619e5d565b6192b09087619e4a565b91505b8582106192eb578482208082036192d8576192ce8684619e4a565b9350505050616f55565b6192e3600184619e5d565b9250506192b3565b505b5092949350505050565b6000838186851161940257602085116193b1576000851561934357600161931f876020619e5d565b61932a90600861acf0565b61933590600261adee565b61933f9190619e5d565b1990505b845181166000876193548b8b619e4a565b61935e9190619e5d565b855190915083165b8281146193a35781861061938b5761937e8b8b619e4a565b9650505050505050616f55565b856193958161acd6565b965050838651169050619366565b859650505050505050616f55565b508383206000905b6193c38689619e5d565b8211619400578583208082036193df5783945050505050616f55565b6193ea600185619e4a565b93505081806193f89061acd6565b9250506193b9565b505b61940c8787619e4a565b979650505050505050565b6040805180820190915260008082526020820152600061944985600001518660200151866000015187602001516192f7565b6020808701805191860191909152519091506194659082619e5d565b8352845160208601516194789190619e4a565b810361948757600085526194b9565b835183516194959190619e4a565b855186906194a4908390619e5d565b90525083516194b39082619e4a565b60208601525b50909392505050565b602081106194fa57815183526194d9602084619e4a565b92506194e6602083619e4a565b91506194f3602082619e5d565b90506194c2565b6000198115619529576001619510836020619e5d565b61951c9061010061adee565b6195269190619e5d565b90505b9151835183169219169190911790915250565b6060600061954a8484615a28565b80516020808301516040519394506195649390910161ae11565b60405160208183030381529060405291505092915050565b815181516000919081111561958f575081515b6020808501519084015160005b8381101561964857825182518082146196185760001960208710156195f7576001846195c9896020619e5d565b6195d39190619e4a565b6195de90600861acf0565b6195e990600261adee565b6195f39190619e5d565b1990505b81811683821681810391146196155797506154a79650505050505050565b50505b619623602086619e4a565b9450619630602085619e4a565b935050506020816196419190619e4a565b905061959c565b50845186516160d6919061ae69565b610b678061ae8a83390190565b61106f8061b9f183390190565b6120728061ca6083390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016196c16196c6565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016196c16040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156197785783516001600160a01b0316835260209384019390920191600101619751565b509095945050505050565b60005b8381101561979e578181015183820152602001619786565b50506000910152565b600081518084526197bf816020860160208601619783565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156198b5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261989f8486516197a7565b6020958601959094509290920191600101619865565b5091975050506020948501949290920191506001016197fb565b50929695505050505050565b600081518084526020840193506020830160005b8281101561992f5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016198ef565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526199a560408801826197a7565b90506020820151915086810360208801526199c081836198db565b965050506020938401939190910190600101619961565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619a398583516197a7565b945060209384019391909101906001016199ff565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152619acf60408701826198db565b9550506020938401939190910190600101619a76565b600060208284031215619af757600080fd5b8151801515811461565c57600080fd5b80516001600160a01b0381168114619b1e57600080fd5b919050565b600060208284031215619b3557600080fd5b61565c82619b07565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619bf8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152619c1960c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215619c4557600080fd5b5051919050565b600181811c90821680619c6057607f821691505b602082108103617821577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008060408385031215619cac57600080fd5b619cb583619b07565b6020939093015192949293505050565b604081526000619cd860408301856197a7565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619d3957619d39619ce7565b60405290565b60008067ffffffffffffffff841115619d5a57619d5a619ce7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619d8957619d89619ce7565b604052838152905080828401851015619da157600080fd5b617324846020830185619783565b600060208284031215619dc157600080fd5b815167ffffffffffffffff811115619dd857600080fd5b8201601f81018413619de957600080fd5b6154a384825160208401619d3f565b600060208284031215619e0a57600080fd5b815160ff8116811461565c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156154a7576154a7619e1b565b818103818111156154a7576154a7619e1b565b604081526000619e8360408301856197a7565b828103602084015261565881856197a7565b6001600160a01b0383168152604060208201526000616f5560408301846197a7565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619eef81601a850160208801619783565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351619f2c81601c840160208801619783565b01601c01949350505050565b60208152600061565c60208301846197a7565b600082601f830112619f5c57600080fd5b61565c83835160208501619d3f565b600060208284031215619f7d57600080fd5b815167ffffffffffffffff811115619f9457600080fd5b6154a384828501619f4b565b60008351619fb2818460208801619783565b835190830190619fc6818360208801619783565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a00781601a850160208801619783565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a044816033840160208801619783565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061565c60808301846197a7565b6000855161a0d3818460208a01619783565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a10d816001840160208a01619783565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a14b816002840160208901619783565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a18d816002840160208801619783565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a1d860408301846197a7565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a24f81601f850160208701619783565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a2bc60408301846197a7565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a30e60408301846197a7565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a385816014850160208701619783565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a420816001850160208701619783565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a466818460208701619783565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a51981604b850160208701619783565b91909101604b0192915050565b600060ff821660ff810361a53c5761a53c619e1b565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061565c60808301846197a7565b60006020828403121561a60957600080fd5b815167ffffffffffffffff81111561a62057600080fd5b82016060818503121561a63257600080fd5b61a63a619d16565b81518060030b811461a64b57600080fd5b8152602082015167ffffffffffffffff81111561a66757600080fd5b61a67386828501619f4b565b602083015250604082015167ffffffffffffffff81111561a69357600080fd5b61a69f86828501619f4b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a70b816021850160208701619783565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a8f7816021850160208801619783565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a93481602e840160208801619783565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a9fc816022850160208701619783565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161aa4181600e850160208701619783565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161ab1f816018850160208801619783565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161ab5c81601c840160208801619783565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ac62818460208701619783565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161acc981601c850160208701619783565b91909101601c0192915050565b6000600019820361ace95761ace9619e1b565b5060010190565b80820281158282048414176154a7576154a7619e1b565b6001815b600184111561ad425780850481111561ad265761ad26619e1b565b600184161561ad3457908102905b60019390931c92800261ad0b565b935093915050565b60008261ad59575060016154a7565b8161ad66575060006154a7565b816001811461ad7c576002811461ad865761ada2565b60019150506154a7565b60ff84111561ad975761ad97619e1b565b50506001821b6154a7565b5060208310610133831016604e8410600b841016171561adc5575081810a6154a7565b61add2600019848461ad07565b806000190482111561ade65761ade6619e1b565b029392505050565b600061565c838361ad4a565b60008161ae095761ae09619e1b565b506000190190565b6000835161ae23818460208801619783565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161ae5d816001840160208801619783565b01600101949350505050565b818103600083128015838313168383128216171561891c5761891c619e1b56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201bc2c2e5533a7390cd5c9f230b641bee17c3057fdf7a0f92b4302cd8cea1ce6764736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a26469706673582212207679d762a17feff675aebf357ebfddb539e213cd243b94ddb29e790e14f23c9a64736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061eb078061003c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80638ce7ef051161019c578063d27b0427116100ee578063e02beae611610097578063f1f87f4011610071578063f1f87f40146104c3578063f2413096146104cb578063fa7626d4146104d357600080fd5b8063e02beae6146104ab578063e13aba48146104b3578063e20c9f71146104bb57600080fd5b8063d97136a2116100c8578063d97136a214610493578063dcba486a1461049b578063dfbdf600146104a357600080fd5b8063d27b04271461047b578063d509b16c14610483578063d591221f1461048b57600080fd5b8063b549984c11610150578063ba414fa61161012a578063ba414fa614610453578063d04cda981461046b578063d1fd32911461047357600080fd5b8063b549984c1461043b578063b5508aa914610443578063b79cad091461044b57600080fd5b8063a4aa6c7c11610181578063a4aa6c7c14610423578063ae9687dc1461042b578063b0464fdc1461043357600080fd5b80638ce7ef0514610406578063916a17c61461040e57600080fd5b80634b629509116102605780636ff45850116102095780637f924c4e116101e35780637f924c4e146103e157806380326680146103e957806385226c81146103f157600080fd5b80636ff45850146103c957806370557298146103d15780637ee68316146103d957600080fd5b806358fdbbe01161023a57806358fdbbe0146103a45780635f01db7e146103ac57806366d9a9a0146103b457600080fd5b80634b6295091461038c5780634cfc0aaa14610394578063513999621461039c57600080fd5b806328438826116102c25780633be9ec801161029c5780633be9ec80146103745780633e5e3c231461037c5780633f7286f41461038457600080fd5b8063284388261461034f5780632ade3880146103575780632f6254fc1461036c57600080fd5b80630a9254e4116102f35780630a9254e4146103215780631142744e146103295780631ed7831c1461033157600080fd5b80630393998b1461030f5780630809dfef14610319575b600080fd5b6103176104e0565b005b6103176105e2565b610317610770565b610317610e52565b610339610f36565b6040516103469190619737565b60405180910390f35b610317610f98565b61035f6111e3565b60405161034691906197d3565b610317611325565b610317611496565b610339611683565b6103396116e3565b610317611743565b610317611816565b6103176118ef565b610317611c6c565b610317611d3f565b6103bc611eac565b6040516103469190619939565b61031761202e565b61031761223e565b61031761248e565b61031761291f565b610317612b43565b6103f9612c17565b60405161034691906199d7565b610317612ce7565b610416612ee7565b6040516103469190619a4e565b610317612fe2565b610317613197565b610416613424565b61031761351f565b6103f96135f1565b6103176136c1565b61045b613a53565b6040519015158152602001610346565b610317613b27565b610317613c6b565b610317613dae565b610317613ef1565b610317614585565b610317614669565b6103176147ef565b610317614a72565b610317614bb5565b610317614de2565b61033961508c565b6103176150ec565b610317615232565b601f5461045b9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561054c57600080fd5b505af1158015610560573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105c857600080fd5b505af11580156105dc573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561063b57600080fd5b505af115801561064f573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156106bf57600080fd5b505af11580156106d3573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076d9190619ae5565b50565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580549091166112341790556040516107b690619657565b604051809103906000f0801580156107d2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054925190810193909352921660448201526108b6919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc9550000000000000000000000000000000000000000000000000000000017905261548e565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190619b23565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610a1157600080fd5b505af1158015610a25573d6000803e3d6000fd5b505050506000806000604051610a3a90619664565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a76573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610acc90619671565b610adb96959493929190619b3e565b604051809103906000f080158015610af7573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b9757600080fd5b505af1158015610bab573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610c1557600080fd5b505af1158015610c29573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610ca957600080fd5b505af1158015610cbd573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d3d57600080fd5b505af1158015610d51573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df39190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105c857600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610ebe57600080fd5b505af1158015610ed2573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef24915060440161072a565b60606016805480602002602001604051908101604052809291908181526020018280548015610f8e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f70575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110119190619c33565b905061101e6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ba9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561112757600080fd5b505af115801561113b573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af11580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190619ae5565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561131c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561130557838290600052602060002001805461127890619c4c565b80601f01602080910402602001604051908101604052809291908181526020018280546112a490619c4c565b80156112f15780601f106112c6576101008083540402835291602001916112f1565b820191906000526020600020905b8154815290600101906020018083116112d457829003601f168201915b505050505081526020019060010190611259565b505050508152505081526020019060010190611207565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561137e57600080fd5b505af1158015611392573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113fa57600080fd5b505af115801561140e573d6000803e3d6000fd5b50505050611494601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190619b23565b613211615535565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114ef57600080fd5b505af1158015611503573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561156d57600080fd5b505af1158015611581573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115f257600080fd5b505af1158015611606573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561165f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190619c99565b60606018805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc7759991506024016105ae565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b3915060440161072a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561194d57600080fd5b505af1158015611961573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119c857600080fd5b505af11580156119dc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a3957600080fd5b505af1158015611a4d573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5f9190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bbe57600080fd5b505af1158015611bd2573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119b9190600190603801619cc5565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cd857600080fd5b505af1158015611cec573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc91506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d9857600080fd5b505af1158015611dac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611e1357600080fd5b505af1158015611e27573d6000803e3d6000fd5b50505050611494600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea79190619c33565b6154ad565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561131c5783829060005260206000209060020201604051806040016040529081600082018054611f0390619c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2f90619c4c565b8015611f7c5780601f10611f5157610100808354040283529160200191611f7c565b820191906000526020600020905b815481529060010190602001808311611f5f57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561201657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611fc35790505b50505050508152505081526020019060010190611ed0565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a79190619c33565b90506120b46000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561212c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121509190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156121bd57600080fd5b505af11580156121d1573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd915060640161119b565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b79190619c33565b90506122c46000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561233b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235f9190619ae5565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124089190619ae5565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561245e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124829190619c33565b90506111de82826154ad565b6125476040518060400160405280600581526020017f544f4b454e000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125429190810190619daf565b615596565b6125d36040518060400160405280600381526020017f544b4e0000000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561262c57600080fd5b505af1158015612640573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b1580156126d457600080fd5b505af11580156126e8573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561274557600080fd5b505af1158015612759573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c82469150606401600060405180830381600087803b1580156127ef57600080fd5b505af1158015612803573d6000803e3d6000fd5b505050506128936040518060400160405280600681526020017f544f4b454e320000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b6114946040518060400160405280600481526020017f544b4e3200000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129989190619c33565b90506129a7620186a0826154ad565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a0057600080fd5b505af1158015612a14573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015612a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab69190619ae5565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b309190619c33565b9050612b3f62030d40826154ad565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612baf57600080fd5b505af1158015612bc3573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c68915060240161072a565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561131c578382906000526020600020018054612c5a90619c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054612c8690619c4c565b8015612cd35780601f10612ca857610100808354040283529160200191612cd3565b820191906000526020600020905b815481529060010190602001808311612cb657829003601f168201915b505050505081526020019060010190612c3b565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d609190619c33565b9050612d6d6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e099190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612e7657600080fd5b505af1158015612e8a573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb915060440161119b565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561131c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612fca57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f775790505b50505050508152505081526020019060010190612f0b565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561305a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307e9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130eb57600080fd5b505af11580156130ff573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015613173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3f9190619ae5565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156131ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132149190810190619daf565b90506132556040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156132aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132d29190810190619daf565b90506133136040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338c9190619df8565b905061339c60128260ff166154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134159190619c33565b90506105dc620186a0826154ad565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561131c5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561350757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116134b45790505b50505050508152505081526020019060010190613448565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561358b57600080fd5b505af115801561359f573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a91506024016105ae565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561131c57838290600052602060002001805461363490619c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461366090619c4c565b80156136ad5780601f10613682576101008083540402835291602001916136ad565b820191906000526020600020905b81548152906001019060200180831161369057829003601f168201915b505050505081526020019060010190613615565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561372357600080fd5b505af1158015613737573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b15801561379e57600080fd5b505af11580156137b2573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561380f57600080fd5b505af1158015613823573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561388a57600080fd5b505af115801561389e573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af1158015613914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139389190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156139a557600080fd5b505af11580156139b9573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119b9190606490603801619cc5565b60085460009060ff1615613a6b575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b209190619c33565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b8057600080fd5b505af1158015613b94573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bfb57600080fd5b505af1158015613c0f573d6000803e3d6000fd5b50505050611494600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613cc457600080fd5b505af1158015613cd8573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613d4857600080fd5b505af1158015613d5c573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc7759991506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e0757600080fd5b505af1158015613e1b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613e8b57600080fd5b505af1158015613e9f573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc91506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f4f57600080fd5b505af1158015613f63573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561403b57600080fd5b505af115801561404f573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156140b657600080fd5b505af11580156140ca573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015614121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141459190619c33565b9050614154620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141cd9190619c33565b90506141dc620186a0826154ad565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142559190619c33565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af11580156142c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142eb9190619ae5565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691614383919061c35090603801619cc5565b6020604051808303816000875af11580156143a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143c69190619ae5565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561441c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144409190619c33565b9050614460856144508885619e4a565b61445a9190619e4a565b826154ad565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156144b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d89190619c33565b90506144f4866144ea8961c350619e5d565b61445a9190619e5d565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061456d9190619c33565b905061457b61c350826154ad565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa1580156145da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145fe9190619c33565b905061460b6000826154ad565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb906044016123c5565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af11580156146e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147059190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561477257600080fd5b505af1158015614786573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401613154565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561484857600080fd5b505af115801561485c573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b1580156148c857600080fd5b505af11580156148dc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561493957600080fd5b505af115801561494d573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156149b457600080fd5b505af11580156149c8573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015614a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a459190619c99565b601f549193509150614a659061010090046001600160a01b031683615535565b6105dc61445a8486619e4a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614acb57600080fd5b505af1158015614adf573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b158015614b4757600080fd5b505af1158015614b5b573d6000803e3d6000fd5b50505050611494601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611468573d6000803e3d6000fd5b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614c2157600080fd5b505af1158015614c35573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b158015614cc957600080fd5b505af1158015614cdd573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614d4d57600080fd5b505af1158015614d61573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c824691506064016105ae565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e5a9190619c33565b9050614e69620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ee29190619c33565b9050614ef1620186a0826154ad565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f7e9190619ae5565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ff79190619c33565b905061500561c350826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561505a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061507e9190619c33565b90506105dc61c350826154ad565b60606015805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561514557600080fd5b505af1158015615159573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b1580156151c357600080fd5b505af11580156151d7573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115d8565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015615287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152ab9190619c33565b90506152b86000826154ad565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa15801561532e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153529190619c33565b905061535f6000826154ad565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156153cf57600080fd5b505af11580156153e3573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af115801561546a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190619ae5565b600061549861967e565b6154a38484836155e8565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b15801561551957600080fd5b505afa15801561552d573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401615501565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d963906155019085908590600401619e70565b6000806155f58584615663565b90506156586040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615643929190619e95565b6040516020818303038152906040528561566f565b9150505b9392505050565b600061565c838361569d565b60c081015151600090156156935761568c84848460c001516156b8565b905061565c565b61568c848461585e565b60006156a98383615949565b61565c8383602001518461566f565b6000806156c3615955565b905060006156d18683615a28565b905060006156e88260600151836020015185615ece565b905060006156f8838389896160e0565b9050600061570582616f5d565b602081015181519192509060030b156157785789826040015160405160200161572f929190619eb7565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261576f91600401619f38565b60405180910390fd5b60006157bb6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161712c565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061580e908490600401619f38565b602060405180830381865afa15801561582b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061584f9190619b23565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906158b3908790600401619f38565b600060405180830381865afa1580156158d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158f89190810190619f6b565b905060006159268285604051602001615912929190619fa0565b60405160208183030381529060405261732c565b90506001600160a01b0381166154a357848460405160200161572f929190619fcf565b612b3f8282600061733f565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906159dc90849060040161a07a565b600060405180830381865afa1580156159f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a219190810190619daf565b9250505090565b615a5a6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050615aa56040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b615aae85617442565b60208201526000615abe86617827565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615b00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b289190810190619daf565b86838560200151604051602001615b42949392919061a0c1565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190615b9a908590600401619f38565b600060405180830381865afa158015615bb7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615bdf9190810190619daf565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615c2790849060040161a1c5565b602060405180830381865afa158015615c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c689190619ae5565b615c7d578160405160200161572f919061a217565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615cc290849060040161a2a9565b600060405180830381865afa158015615cdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d079190810190619daf565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615d4e90849060040161a2fb565b602060405180830381865afa158015615d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615d8f9190619ae5565b15615e24576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615dd990849060040161a2fb565b600060405180830381865afa158015615df6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e1e9190810190619daf565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615e49919061a34d565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615e75929190619e70565b600060405180830381865afa158015615e92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615eba9190810190619daf565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615eea5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615f4a57615f4a61a3b9565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615f9e57615f9e61a3b9565b602002602001018190525084604051602001615fba919061a3e8565b60405160208183030381529060405281600281518110615fdc57615fdc61a3b9565b602002602001018190525082604051602001615ff8919061a454565b6040516020818303038152906040528160038151811061601a5761601a61a3b9565b6020026020010181905250600061603082616f5d565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506160c19060408051808201825260008082526020918201528151808301909252845182528085019082015290617aaa565b6160d6578560405160200161572f919061a495565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616130565b511590565b6162a4578260200151156161ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161576f565b8260c00151156162a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161576f565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816162bd57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806163189061a526565b935060ff168151811061632d5761632d61a3b9565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161637e919061a545565b6040516020818303038152906040528282806163999061a526565b935060ff16815181106163ae576163ae61a3b9565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806163fb9061a526565b935060ff16815181106164105761641061a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061645d9061a526565b935060ff16815181106164725761647261a3b9565b6020026020010181905250876020015182828061648e9061a526565b935060ff16815181106164a3576164a361a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806164f09061a526565b935060ff16815181106165055761650561a3b9565b60209081029190910101528751828261651d8161a526565b935060ff16815181106165325761653261a3b9565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061657f9061a526565b935060ff16815181106165945761659461a3b9565b60200260200101819052506165a846617b0b565b82826165b38161a526565b935060ff16815181106165c8576165c861a3b9565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806166159061a526565b935060ff168151811061662a5761662a61a3b9565b6020026020010181905250868282806166429061a526565b935060ff16815181106166575761665761a3b9565b602090810291909101015285511561677e5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826166a88161a526565b935060ff16815181106166bd576166bd61a3b9565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061670d908990600401619f38565b600060405180830381865afa15801561672a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167529190810190619daf565b828261675d8161a526565b935060ff16815181106167725761677261a3b9565b60200260200101819052505b84602001511561684e5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826167c78161a526565b935060ff16815181106167dc576167dc61a3b9565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806168299061a526565b935060ff168151811061683e5761683e61a3b9565b6020026020010181905250616a15565b61688661612b8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6169195760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826168c98161a526565b935060ff16815181106168de576168de61a3b9565b60200260200101819052508460a001516040516020016168fe919061a3e8565b6040516020818303038152906040528282806168299061a526565b8460c0015115801561695c57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261695a90511590565b155b15616a155760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826169a08161a526565b935060ff16815181106169b5576169b561a3b9565b60200260200101819052506169c988617bab565b6040516020016169d9919061a3e8565b6040516020818303038152906040528282806169f49061a526565b935060ff1681518110616a0957616a0961a3b9565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152616a4990511590565b616ade5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282616a8c8161a526565b935060ff1681518110616aa157616aa161a3b9565b60200260200101819052508460400151828280616abd9061a526565b935060ff1681518110616ad257616ad261a3b9565b60200260200101819052505b606085015115616bff5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282616b278161a526565b935060ff1681518110616b3c57616b3c61a3b9565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616bab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616bd39190810190619daf565b8282616bde8161a526565b935060ff1681518110616bf357616bf361a3b9565b60200260200101819052505b60e08501515115616ca65760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616c498161a526565b935060ff1681518110616c5e57616c5e61a3b9565b6020026020010181905250616c7a8560e0015160000151617b0b565b8282616c858161a526565b935060ff1681518110616c9a57616c9a61a3b9565b60200260200101819052505b60e08501516020015115616d505760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616cf38161a526565b935060ff1681518110616d0857616d0861a3b9565b6020026020010181905250616d248560e0015160200151617b0b565b8282616d2f8161a526565b935060ff1681518110616d4457616d4461a3b9565b60200260200101819052505b60e08501516040015115616dfa5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282616d9d8161a526565b935060ff1681518110616db257616db261a3b9565b6020026020010181905250616dce8560e0015160400151617b0b565b8282616dd98161a526565b935060ff1681518110616dee57616dee61a3b9565b60200260200101819052505b60e08501516060015115616ea45760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616e478161a526565b935060ff1681518110616e5c57616e5c61a3b9565b6020026020010181905250616e788560e0015160600151617b0b565b8282616e838161a526565b935060ff1681518110616e9857616e9861a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616ec257616ec2619ce7565b604051908082528060200260200182016040528015616ef557816020015b6060815260200190600190039081616ee05790505b50905060005b8260ff168160ff161015616f4e57838160ff1681518110616f1e57616f1e61a3b9565b6020026020010151828260ff1681518110616f3b57616f3b61a3b9565b6020908102919091010152600101616efb565b5093505050505b949350505050565b616f846040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161700a9186910161a5b0565b600060405180830381865afa158015617027573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261704f9190810190619daf565b9050600061705d868361869a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161708d91906199d7565b6000604051808303816000875af11580156170ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526170d4919081019061a5f7565b805190915060030b158015906170ed5750602081015151155b80156170fc5750604081015151155b156160d657816000815181106171145761711461a3b9565b602002602001015160405160200161572f919061a6ad565b606060006171618560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506171989082905b906187ef565b156172f55760006172158261720f846172096171db8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618816565b90618878565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506172799082906187ef565b156172e357604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172e0905b82906188fd565b90505b6172ec81618923565b9250505061565c565b821561730e57848460405160200161572f92919061a899565b505060408051602081019091526000815261565c565b509392505050565b6000808251602084016000f09392505050565b8160a001511561734e57505050565b600061735b84848461898c565b9050600061736882616f5d565b602081015181519192509060030b1580156174045750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261740490604080518082018252600080825260209182015281518083019092528451825280850190820152617192565b1561741157505050505050565b6040820151511561743157816040015160405160200161572f919061a940565b8060405160200161572f919061a99e565b606060006174778360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506174dc905b8290617aaa565b1561754b57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546908390618f27565b618923565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ad905b8290618fb1565b60010361767a57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617613906172d9565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546905b83906188fd565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176d9906174d5565b1561781057604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061774190839061904b565b9050600081600183516177549190619e5d565b815181106177645761776461a3b9565b602002602001015190506178076175466177da6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618f27565b95945050505050565b8260405160200161572f919061aa09565b50919050565b6060600061785c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506178be906174d5565b156178cc5761565c81618923565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261792b906175a6565b60010361799557604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c9061754690617673565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179f4906174d5565b1561781057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617a5c90839061904b565b9050600181511115617a98578060028251617a779190619e5d565b81518110617a8757617a8761a3b9565b602002602001015192505050919050565b508260405160200161572f919061aa09565b805182516000911115617abf575060006154a7565b81518351602085015160009291617ad591619e4a565b617adf9190619e5d565b905082602001518103617af65760019150506154a7565b82516020840151819020912014905092915050565b60606000617b18836190f0565b600101905060008167ffffffffffffffff811115617b3857617b38619ce7565b6040519080825280601f01601f191660200182016040528015617b62576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617b6c57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617c37905b82906191d2565b15617c7757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cd690617c30565b15617d1657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d7590617c30565b15617db557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e1490617c30565b80617e795750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e7990617c30565b15617eb957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f1890617c30565b80617f7d5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f7d90617c30565b15617fbd57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261801c90617c30565b806180815750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261808190617c30565b156180c157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261812090617c30565b806181855750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261818590617c30565b156181c557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261822490617c30565b1561826457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182c390617c30565b1561830357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261836290617c30565b156183a257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261840190617c30565b1561844157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184a090617c30565b156184e057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261853f90617c30565b806185a45750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185a490617c30565b156185e457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261864390617c30565b1561868357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161572f929060200161aae7565b60608060005b845181101561872557818582815181106186bc576186bc61a3b9565b60200260200101516040516020016186d5929190619fa0565b6040516020818303038152906040529150600185516186f49190619e5d565b811461871d578160405160200161870b919061ac50565b60405160208183030381529060405291505b6001016186a0565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161873e57905050905083816000815181106187695761876961a3b9565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106187bd576187bd61a3b9565b602002602001018190525081816002815181106187dc576187dc61a3b9565b6020908102919091010152949350505050565b602080830151835183519284015160009361880d92918491906191e6565b14159392505050565b6040805180820190915260008082526020820152600061884884600001518560200151856000015186602001516192f7565b905083602001518161885a9190619e5d565b84518590618869908390619e5d565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561889d5750816154a7565b60208083015190840151600191146188c45750815160208481015190840151829020919020145b80156188f5578251845185906188db908390619e5d565b90525082516020850180516188f1908390619e4a565b9052505b509192915050565b604080518082019091526000808252602082015261891c838383619417565b5092915050565b60606000826000015167ffffffffffffffff81111561894457618944619ce7565b6040519080825280601f01601f19166020018201604052801561896e576020820181803683370190505b509050600060208201905061891c81856020015186600001516194c2565b60606000618998615955565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816189b557905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618a109061a526565b935060ff1681518110618a2557618a2561a3b9565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618a76919061ac91565b604051602081830303815290604052828280618a919061a526565b935060ff1681518110618aa657618aa661a3b9565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618af39061a526565b935060ff1681518110618b0857618b0861a3b9565b602002602001018190525082604051602001618b24919061a454565b604051602081830303815290604052828280618b3f9061a526565b935060ff1681518110618b5457618b5461a3b9565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618ba19061a526565b935060ff1681518110618bb657618bb661a3b9565b6020026020010181905250618bcb878461953c565b8282618bd68161a526565b935060ff1681518110618beb57618beb61a3b9565b602090810291909101015285515115618c975760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282618c3d8161a526565b935060ff1681518110618c5257618c5261a3b9565b6020026020010181905250618c6b86600001518461953c565b8282618c768161a526565b935060ff1681518110618c8b57618c8b61a3b9565b60200260200101819052505b856080015115618d055760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282618ce08161a526565b935060ff1681518110618cf557618cf561a3b9565b6020026020010181905250618d6b565b8415618d6b5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282618d4a8161a526565b935060ff1681518110618d5f57618d5f61a3b9565b60200260200101819052505b60408601515115618e075760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618db58161a526565b935060ff1681518110618dca57618dca61a3b9565b60200260200101819052508560400151828280618de69061a526565b935060ff1681518110618dfb57618dfb61a3b9565b60200260200101819052505b856060015115618e715760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618e508161a526565b935060ff1681518110618e6557618e6561a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618e8f57618e8f619ce7565b604051908082528060200260200182016040528015618ec257816020015b6060815260200190600190039081618ead5790505b50905060005b8260ff168160ff161015618f1b57838160ff1681518110618eeb57618eeb61a3b9565b6020026020010151828260ff1681518110618f0857618f0861a3b9565b6020908102919091010152600101618ec8565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618f4c5750816154a7565b81518351602085015160009291618f6291619e4a565b618f6c9190619e5d565b60208401519091506001908214618f8d575082516020840151819020908220145b8015618fa857835185518690618fa4908390619e5d565b9052505b50929392505050565b6000808260000151618fd585600001518660200151866000015187602001516192f7565b618fdf9190619e4a565b90505b83516020850151618ff39190619e4a565b811161891c57816190038161acd6565b925050826000015161903a85602001518361901e9190619e5d565b865161902a9190619e5d565b83866000015187602001516192f7565b6190449190619e4a565b9050618fe2565b606060006190598484618fb1565b619064906001619e4a565b67ffffffffffffffff81111561907c5761907c619ce7565b6040519080825280602002602001820160405280156190af57816020015b606081526020019060019003908161909a5790505b50905060005b8151811015617324576190cb61754686866188fd565b8282815181106190dd576190dd61a3b9565b60209081029190910101526001016190b5565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619139577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619165576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061918357662386f26fc10000830492506010015b6305f5e100831061919b576305f5e100830492506008015b61271083106191af57612710830492506004015b606483106191c1576064830492506002015b600a83106154a75760010192915050565b60006191de838361957c565b159392505050565b6000808584116192ed5760208411619299576000841561923157600161920d866020619e5d565b61921890600861acf0565b61922390600261adee565b61922d9190619e5d565b1990505b83518116856192408989619e4a565b61924a9190619e5d565b805190935082165b8181146192845787841161926c5787945050505050616f55565b836192768161adfa565b945050828451169050619252565b61928e8785619e4a565b945050505050616f55565b8383206192a68588619e5d565b6192b09087619e4a565b91505b8582106192eb578482208082036192d8576192ce8684619e4a565b9350505050616f55565b6192e3600184619e5d565b9250506192b3565b505b5092949350505050565b6000838186851161940257602085116193b1576000851561934357600161931f876020619e5d565b61932a90600861acf0565b61933590600261adee565b61933f9190619e5d565b1990505b845181166000876193548b8b619e4a565b61935e9190619e5d565b855190915083165b8281146193a35781861061938b5761937e8b8b619e4a565b9650505050505050616f55565b856193958161acd6565b965050838651169050619366565b859650505050505050616f55565b508383206000905b6193c38689619e5d565b8211619400578583208082036193df5783945050505050616f55565b6193ea600185619e4a565b93505081806193f89061acd6565b9250506193b9565b505b61940c8787619e4a565b979650505050505050565b6040805180820190915260008082526020820152600061944985600001518660200151866000015187602001516192f7565b6020808701805191860191909152519091506194659082619e5d565b8352845160208601516194789190619e4a565b810361948757600085526194b9565b835183516194959190619e4a565b855186906194a4908390619e5d565b90525083516194b39082619e4a565b60208601525b50909392505050565b602081106194fa57815183526194d9602084619e4a565b92506194e6602083619e4a565b91506194f3602082619e5d565b90506194c2565b6000198115619529576001619510836020619e5d565b61951c9061010061adee565b6195269190619e5d565b90505b9151835183169219169190911790915250565b6060600061954a8484615a28565b80516020808301516040519394506195649390910161ae11565b60405160208183030381529060405291505092915050565b815181516000919081111561958f575081515b6020808501519084015160005b8381101561964857825182518082146196185760001960208710156195f7576001846195c9896020619e5d565b6195d39190619e4a565b6195de90600861acf0565b6195e990600261adee565b6195f39190619e5d565b1990505b81811683821681810391146196155797506154a79650505050505050565b50505b619623602086619e4a565b9450619630602085619e4a565b935050506020816196419190619e4a565b905061959c565b50845186516160d6919061ae69565b610b678061ae8a83390190565b61106f8061b9f183390190565b6120728061ca6083390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016196c16196c6565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016196c16040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156197785783516001600160a01b0316835260209384019390920191600101619751565b509095945050505050565b60005b8381101561979e578181015183820152602001619786565b50506000910152565b600081518084526197bf816020860160208601619783565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156198b5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261989f8486516197a7565b6020958601959094509290920191600101619865565b5091975050506020948501949290920191506001016197fb565b50929695505050505050565b600081518084526020840193506020830160005b8281101561992f5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016198ef565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526199a560408801826197a7565b90506020820151915086810360208801526199c081836198db565b965050506020938401939190910190600101619961565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619a398583516197a7565b945060209384019391909101906001016199ff565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152619acf60408701826198db565b9550506020938401939190910190600101619a76565b600060208284031215619af757600080fd5b8151801515811461565c57600080fd5b80516001600160a01b0381168114619b1e57600080fd5b919050565b600060208284031215619b3557600080fd5b61565c82619b07565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619bf8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152619c1960c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215619c4557600080fd5b5051919050565b600181811c90821680619c6057607f821691505b602082108103617821577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008060408385031215619cac57600080fd5b619cb583619b07565b6020939093015192949293505050565b604081526000619cd860408301856197a7565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619d3957619d39619ce7565b60405290565b60008067ffffffffffffffff841115619d5a57619d5a619ce7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619d8957619d89619ce7565b604052838152905080828401851015619da157600080fd5b617324846020830185619783565b600060208284031215619dc157600080fd5b815167ffffffffffffffff811115619dd857600080fd5b8201601f81018413619de957600080fd5b6154a384825160208401619d3f565b600060208284031215619e0a57600080fd5b815160ff8116811461565c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156154a7576154a7619e1b565b818103818111156154a7576154a7619e1b565b604081526000619e8360408301856197a7565b828103602084015261565881856197a7565b6001600160a01b0383168152604060208201526000616f5560408301846197a7565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619eef81601a850160208801619783565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351619f2c81601c840160208801619783565b01601c01949350505050565b60208152600061565c60208301846197a7565b600082601f830112619f5c57600080fd5b61565c83835160208501619d3f565b600060208284031215619f7d57600080fd5b815167ffffffffffffffff811115619f9457600080fd5b6154a384828501619f4b565b60008351619fb2818460208801619783565b835190830190619fc6818360208801619783565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a00781601a850160208801619783565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a044816033840160208801619783565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061565c60808301846197a7565b6000855161a0d3818460208a01619783565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a10d816001840160208a01619783565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a14b816002840160208901619783565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a18d816002840160208801619783565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a1d860408301846197a7565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a24f81601f850160208701619783565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a2bc60408301846197a7565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a30e60408301846197a7565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a385816014850160208701619783565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a420816001850160208701619783565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a466818460208701619783565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a51981604b850160208701619783565b91909101604b0192915050565b600060ff821660ff810361a53c5761a53c619e1b565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061565c60808301846197a7565b60006020828403121561a60957600080fd5b815167ffffffffffffffff81111561a62057600080fd5b82016060818503121561a63257600080fd5b61a63a619d16565b81518060030b811461a64b57600080fd5b8152602082015167ffffffffffffffff81111561a66757600080fd5b61a67386828501619f4b565b602083015250604082015167ffffffffffffffff81111561a69357600080fd5b61a69f86828501619f4b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a70b816021850160208701619783565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a8f7816021850160208801619783565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a93481602e840160208801619783565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a9fc816022850160208701619783565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161aa4181600e850160208701619783565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161ab1f816018850160208801619783565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161ab5c81601c840160208801619783565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ac62818460208701619783565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161acc981601c850160208701619783565b91909101601c0192915050565b6000600019820361ace95761ace9619e1b565b5060010190565b80820281158282048414176154a7576154a7619e1b565b6001815b600184111561ad425780850481111561ad265761ad26619e1b565b600184161561ad3457908102905b60019390931c92800261ad0b565b935093915050565b60008261ad59575060016154a7565b8161ad66575060006154a7565b816001811461ad7c576002811461ad865761ada2565b60019150506154a7565b60ff84111561ad975761ad97619e1b565b50506001821b6154a7565b5060208310610133831016604e8410600b841016171561adc5575081810a6154a7565b61add2600019848461ad07565b806000190482111561ade65761ade6619e1b565b029392505050565b600061565c838361ad4a565b60008161ae095761ae09619e1b565b506000190190565b6000835161ae23818460208801619783565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161ae5d816001840160208801619783565b01600101949350505050565b818103600083128015838313168383128216171561891c5761891c619e1b56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212206cfc8728f3e6a008fa60110012d328f8d2a859ba07c5fdfb6776051dc27a333964736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220d096ee6dcf3146cb3f765dc3c395bdf2d989c974fa3328ef8ba88e44ff2b383b64736f6c634300081a0033", } // ZRC20TestABI is the input ABI used to generate the binding from. diff --git a/v2/test/GatewayZEVM.t.sol b/v2/test/GatewayZEVM.t.sol index 25ae20278..6dff7b0d6 100644 --- a/v2/test/GatewayZEVM.t.sol +++ b/v2/test/GatewayZEVM.t.sol @@ -577,8 +577,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testExecuteFailsIfZRC20IsZeroAddress() public { bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.prank(fungibleModule); vm.expectRevert(ZeroAddress.selector); @@ -587,8 +587,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testExecuteFailsIfTargetIsZeroAddress() public { bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.prank(fungibleModule); vm.expectRevert(ZeroAddress.selector); @@ -597,8 +597,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testExecuteUniversalContractFailsIfZeroAddress() public { bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.prank(fungibleModule); vm.expectRevert(ZeroAddress.selector); @@ -607,8 +607,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testExecuteUniversalContract() public { bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.expectEmit(true, true, true, true, address(testUniversalContract)); emit ContextData(abi.encodePacked(gateway), fungibleModule, 1, address(gateway), "hello"); @@ -618,8 +618,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testExecuteUniversalContractFailsIfSenderIsNotFungibleModule() public { bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.expectRevert(CallerIsNotFungibleModule.selector); vm.prank(owner); @@ -647,8 +647,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testDepositZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress() public { bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.prank(fungibleModule); vm.expectRevert(ZeroAddress.selector); @@ -657,8 +657,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testDepositZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress() public { bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.prank(fungibleModule); vm.expectRevert(ZeroAddress.selector); @@ -667,8 +667,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testDepositZRC20AndCallUniversalContractFailsIfAmountIsZero() public { bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.prank(fungibleModule); vm.expectRevert(InsufficientZRC20Amount.selector); @@ -680,8 +680,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors assertEq(0, balanceBefore); bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.expectEmit(true, true, true, true, address(testUniversalContract)); emit ContextData(abi.encodePacked(gateway), fungibleModule, 1, address(gateway), "hello"); @@ -694,8 +694,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testDepositZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule() public { bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.expectRevert(CallerIsNotFungibleModule.selector); vm.prank(owner); @@ -704,8 +704,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testDepositZRC20AndCallUniversalContractIfTargetIsFungibleModule() public { bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.expectRevert(InvalidTarget.selector); vm.prank(fungibleModule); @@ -714,8 +714,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testDepositZRC20AndCallUniversalContractIfTargetIsGateway() public { bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.expectRevert(InvalidTarget.selector); vm.prank(fungibleModule); @@ -773,8 +773,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress() public { bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.prank(fungibleModule); vm.expectRevert(ZeroAddress.selector); @@ -783,8 +783,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero() public { bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.prank(fungibleModule); vm.expectRevert(InsufficientZetaAmount.selector); @@ -797,8 +797,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); uint256 destinationBalanceBefore = address(testUniversalContract).balance; bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.prank(fungibleModule); vm.expectRevert(ZeroAddress.selector); @@ -807,8 +807,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testDepositZETAAndCallUniversal() public { bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.prank(fungibleModule); vm.expectRevert(ZeroAddress.selector); @@ -821,8 +821,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); uint256 destinationBalanceBefore = address(testUniversalContract).balance; bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.expectEmit(true, true, true, true, address(testUniversalContract)); emit ContextData(abi.encodePacked(gateway), fungibleModule, amount, address(gateway), "hello"); @@ -842,8 +842,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testDepositZETAAndCallUniversalContractFailsIfSenderIsNotFungibleModule() public { uint256 amount = 1; bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.expectRevert(CallerIsNotFungibleModule.selector); vm.prank(owner); @@ -853,8 +853,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testDepositZETAAndCallUniversalContractFailsIfTargetIsFungibleModule() public { uint256 amount = 1; bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.expectRevert(InvalidTarget.selector); vm.prank(fungibleModule); @@ -864,8 +864,8 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors function testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway() public { uint256 amount = 1; bytes memory message = abi.encode("hello"); - zContext memory context = - zContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); + MessageContext memory context = + MessageContext({ origin: abi.encodePacked(address(gateway)), sender: fungibleModule, chainID: 1 }); vm.expectRevert(InvalidTarget.selector); vm.prank(fungibleModule); diff --git a/v2/test/utils/TestUniversalContract.sol b/v2/test/utils/TestUniversalContract.sol index d1af27ccf..0c6db3a97 100644 --- a/v2/test/utils/TestUniversalContract.sol +++ b/v2/test/utils/TestUniversalContract.sol @@ -28,8 +28,8 @@ contract TestUniversalContract is UniversalContract { /// @param amount The amount of tokens transferred. /// @param message The calldata passed to the contract call. /// @dev Decodes the message and emits a ContextData event. - function onCrossChainCall( - zContext calldata context, + function onCall( + MessageContext calldata context, address zrc20, uint256 amount, bytes calldata message diff --git a/v2/test/utils/upgrades/GatewayZEVMUpgradeTest.sol b/v2/test/utils/upgrades/GatewayZEVMUpgradeTest.sol index 44e7580bd..f33171398 100644 --- a/v2/test/utils/upgrades/GatewayZEVMUpgradeTest.sol +++ b/v2/test/utils/upgrades/GatewayZEVMUpgradeTest.sol @@ -3,10 +3,10 @@ pragma solidity 0.8.26; import { IGatewayZEVM } from "../../../contracts/zevm/interfaces/IGatewayZEVM.sol"; -import { RevertContext, RevertOptions } from "../../../contracts/Revert.sol"; +import { INotSupportedMethods, RevertContext, RevertOptions } from "../../../contracts/Revert.sol"; import "../../../contracts/zevm/interfaces/IWZETA.sol"; import { IZRC20 } from "../../../contracts/zevm/interfaces/IZRC20.sol"; -import { UniversalContract, zContext } from "../../../contracts/zevm/interfaces/UniversalContract.sol"; +import { MessageContext, UniversalContract } from "../../../contracts/zevm/interfaces/UniversalContract.sol"; import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; @@ -24,7 +24,8 @@ contract GatewayZEVMUpgradeTest is AccessControlUpgradeable, UUPSUpgradeable, ReentrancyGuardUpgradeable, - PausableUpgradeable + PausableUpgradeable, + INotSupportedMethods { /// @notice Error indicating a zero address was provided. error ZeroAddress(); @@ -102,21 +103,21 @@ contract GatewayZEVMUpgradeTest is _unpause(); } - /// @dev Internal function to withdraw ZRC20 tokens. + /// @dev Private function to withdraw ZRC20 tokens. /// @param amount The amount of tokens to withdraw. /// @param zrc20 The address of the ZRC20 token. /// @return The gas fee for the withdrawal. - function _withdrawZRC20(uint256 amount, address zrc20) internal returns (uint256) { + function _withdrawZRC20(uint256 amount, address zrc20) private returns (uint256) { // Use gas limit from zrc20 return _withdrawZRC20WithGasLimit(amount, zrc20, IZRC20(zrc20).GAS_LIMIT()); } - /// @dev Internal function to withdraw ZRC20 tokens with gas limit. + /// @dev Private function to withdraw ZRC20 tokens with gas limit. /// @param amount The amount of tokens to withdraw. /// @param zrc20 The address of the ZRC20 token. /// @param gasLimit Gas limit. /// @return The gas fee for the withdrawal. - function _withdrawZRC20WithGasLimit(uint256 amount, address zrc20, uint256 gasLimit) internal returns (uint256) { + function _withdrawZRC20WithGasLimit(uint256 amount, address zrc20, uint256 gasLimit) private returns (uint256) { (address gasZRC20, uint256 gasFee) = IZRC20(zrc20).withdrawGasFeeWithGasLimit(gasLimit); if (!IZRC20(gasZRC20).transferFrom(msg.sender, FUNGIBLE_MODULE_ADDRESS, gasFee)) { revert GasFeeTransferFailed(); @@ -131,10 +132,10 @@ contract GatewayZEVMUpgradeTest is return gasFee; } - /// @dev Internal function to transfer ZETA tokens. + /// @dev Private function to transfer ZETA tokens. /// @param amount The amount of tokens to transfer. /// @param to The address to transfer the tokens to. - function _transferZETA(uint256 amount, address to) internal { + function _transferZETA(uint256 amount, address to) private { if (!IWETH9(zetaToken).transferFrom(msg.sender, address(this), amount)) revert FailedZetaSent(); IWETH9(zetaToken).withdraw(amount); (bool sent,) = to.call{ value: amount }(""); @@ -156,8 +157,10 @@ contract GatewayZEVMUpgradeTest is nonReentrant whenNotPaused { + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver.length == 0) revert ZeroAddress(); if (amount == 0) revert InsufficientZRC20Amount(); + if (revertOptions.revertMessage.length > MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); uint256 gasFee = _withdrawZRC20(amount, zrc20); emit WithdrawnV2( @@ -193,6 +196,7 @@ contract GatewayZEVMUpgradeTest is nonReentrant whenNotPaused { + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver.length == 0) revert ZeroAddress(); if (amount == 0) revert InsufficientZRC20Amount(); if (gasLimit == 0) revert InsufficientGasLimit(); @@ -227,8 +231,11 @@ contract GatewayZEVMUpgradeTest is nonReentrant whenNotPaused { + revert ZETANotSupported(); + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver.length == 0) revert ZeroAddress(); if (amount == 0) revert InsufficientZetaAmount(); + if (revertOptions.revertMessage.length > MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); emit Withdrawn(msg.sender, chainId, receiver, address(zetaToken), amount, 0, 0, "", 0, revertOptions); @@ -251,9 +258,11 @@ contract GatewayZEVMUpgradeTest is nonReentrant whenNotPaused { + revert ZETANotSupported(); + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver.length == 0) revert ZeroAddress(); if (amount == 0) revert InsufficientZetaAmount(); - if (message.length + revertOptions.revertMessage.length >= MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); + if (message.length + revertOptions.revertMessage.length > MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); emit Withdrawn(msg.sender, chainId, receiver, address(zetaToken), amount, 0, 0, message, 0, revertOptions); @@ -276,9 +285,10 @@ contract GatewayZEVMUpgradeTest is nonReentrant whenNotPaused { + if (revertOptions.callOnRevert) revert CallOnRevertNotSupported(); if (receiver.length == 0) revert ZeroAddress(); if (gasLimit == 0) revert InsufficientGasLimit(); - if (message.length + revertOptions.revertMessage.length >= MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); + if (message.length + revertOptions.revertMessage.length > MAX_MESSAGE_SIZE) revert MessageSizeExceeded(); (address gasZRC20, uint256 gasFee) = IZRC20(zrc20).withdrawGasFeeWithGasLimit(gasLimit); if (!IZRC20(gasZRC20).transferFrom(msg.sender, FUNGIBLE_MODULE_ADDRESS, gasFee)) { @@ -308,7 +318,7 @@ contract GatewayZEVMUpgradeTest is /// @param target The target contract to call. /// @param message The calldata to pass to the contract call. function execute( - zContext calldata context, + MessageContext calldata context, address zrc20, uint256 amount, address target, @@ -320,7 +330,7 @@ contract GatewayZEVMUpgradeTest is { if (zrc20 == address(0) || target == address(0)) revert ZeroAddress(); - UniversalContract(target).onCrossChainCall(context, zrc20, amount, message); + UniversalContract(target).onCall(context, zrc20, amount, message); } /// @notice Deposit foreign coins into ZRC20 and call a user-specified contract on ZEVM. @@ -330,7 +340,7 @@ contract GatewayZEVMUpgradeTest is /// @param target The target contract to call. /// @param message The calldata to pass to the contract call. function depositAndCall( - zContext calldata context, + MessageContext calldata context, address zrc20, uint256 amount, address target, @@ -345,7 +355,7 @@ contract GatewayZEVMUpgradeTest is if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); if (!IZRC20(zrc20).deposit(target, amount)) revert ZRC20DepositFailed(); - UniversalContract(target).onCrossChainCall(context, zrc20, amount, message); + UniversalContract(target).onCall(context, zrc20, amount, message); } /// @notice Deposit ZETA and call a user-specified contract on ZEVM. @@ -354,7 +364,7 @@ contract GatewayZEVMUpgradeTest is /// @param target The target contract to call. /// @param message The calldata to pass to the contract call. function depositAndCall( - zContext calldata context, + MessageContext calldata context, uint256 amount, address target, bytes calldata message @@ -368,7 +378,7 @@ contract GatewayZEVMUpgradeTest is if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); _transferZETA(amount, target); - UniversalContract(target).onCrossChainCall(context, zetaToken, amount, message); + UniversalContract(target).onCall(context, zetaToken, amount, message); } /// @notice Revert a user-specified contract on ZEVM. diff --git a/v2/types/GatewayZEVM.ts b/v2/types/GatewayZEVM.ts index 81eae92da..5983ce089 100644 --- a/v2/types/GatewayZEVM.ts +++ b/v2/types/GatewayZEVM.ts @@ -45,13 +45,13 @@ export type RevertOptionsStructOutput = [ onRevertGasLimit: bigint; }; -export type ZContextStruct = { +export type MessageContextStruct = { origin: BytesLike; sender: AddressLike; chainID: BigNumberish; }; -export type ZContextStructOutput = [ +export type MessageContextStructOutput = [ origin: string, sender: string, chainID: bigint @@ -152,11 +152,17 @@ export interface GatewayZEVMInterface extends Interface { ): string; encodeFunctionData( functionFragment: "depositAndCall((bytes,address,uint256),uint256,address,bytes)", - values: [ZContextStruct, BigNumberish, AddressLike, BytesLike] + values: [MessageContextStruct, BigNumberish, AddressLike, BytesLike] ): string; encodeFunctionData( functionFragment: "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)", - values: [ZContextStruct, AddressLike, BigNumberish, AddressLike, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + BigNumberish, + AddressLike, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "depositAndRevert", @@ -164,7 +170,13 @@ export interface GatewayZEVMInterface extends Interface { ): string; encodeFunctionData( functionFragment: "execute", - values: [ZContextStruct, AddressLike, BigNumberish, AddressLike, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + BigNumberish, + AddressLike, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "executeRevert", @@ -578,7 +590,7 @@ export interface GatewayZEVM extends BaseContract { "depositAndCall((bytes,address,uint256),uint256,address,bytes)": TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, amount: BigNumberish, target: AddressLike, message: BytesLike @@ -589,7 +601,7 @@ export interface GatewayZEVM extends BaseContract { "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)": TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, target: AddressLike, @@ -612,7 +624,7 @@ export interface GatewayZEVM extends BaseContract { execute: TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, target: AddressLike, @@ -772,7 +784,7 @@ export interface GatewayZEVM extends BaseContract { nameOrSignature: "depositAndCall((bytes,address,uint256),uint256,address,bytes)" ): TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, amount: BigNumberish, target: AddressLike, message: BytesLike @@ -784,7 +796,7 @@ export interface GatewayZEVM extends BaseContract { nameOrSignature: "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)" ): TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, target: AddressLike, @@ -809,7 +821,7 @@ export interface GatewayZEVM extends BaseContract { nameOrSignature: "execute" ): TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, target: AddressLike, diff --git a/v2/types/GatewayZEVMUpgradeTest.ts b/v2/types/GatewayZEVMUpgradeTest.ts index 23bdc6015..6c3c7540a 100644 --- a/v2/types/GatewayZEVMUpgradeTest.ts +++ b/v2/types/GatewayZEVMUpgradeTest.ts @@ -45,13 +45,13 @@ export type RevertOptionsStructOutput = [ onRevertGasLimit: bigint; }; -export type ZContextStruct = { +export type MessageContextStruct = { origin: BytesLike; sender: AddressLike; chainID: BigNumberish; }; -export type ZContextStructOutput = [ +export type MessageContextStructOutput = [ origin: string, sender: string, chainID: bigint @@ -153,11 +153,17 @@ export interface GatewayZEVMUpgradeTestInterface extends Interface { ): string; encodeFunctionData( functionFragment: "depositAndCall((bytes,address,uint256),uint256,address,bytes)", - values: [ZContextStruct, BigNumberish, AddressLike, BytesLike] + values: [MessageContextStruct, BigNumberish, AddressLike, BytesLike] ): string; encodeFunctionData( functionFragment: "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)", - values: [ZContextStruct, AddressLike, BigNumberish, AddressLike, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + BigNumberish, + AddressLike, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "depositAndRevert", @@ -165,7 +171,13 @@ export interface GatewayZEVMUpgradeTestInterface extends Interface { ): string; encodeFunctionData( functionFragment: "execute", - values: [ZContextStruct, AddressLike, BigNumberish, AddressLike, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + BigNumberish, + AddressLike, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "executeRevert", @@ -622,7 +634,7 @@ export interface GatewayZEVMUpgradeTest extends BaseContract { "depositAndCall((bytes,address,uint256),uint256,address,bytes)": TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, amount: BigNumberish, target: AddressLike, message: BytesLike @@ -633,7 +645,7 @@ export interface GatewayZEVMUpgradeTest extends BaseContract { "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)": TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, target: AddressLike, @@ -656,7 +668,7 @@ export interface GatewayZEVMUpgradeTest extends BaseContract { execute: TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, target: AddressLike, @@ -816,7 +828,7 @@ export interface GatewayZEVMUpgradeTest extends BaseContract { nameOrSignature: "depositAndCall((bytes,address,uint256),uint256,address,bytes)" ): TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, amount: BigNumberish, target: AddressLike, message: BytesLike @@ -828,7 +840,7 @@ export interface GatewayZEVMUpgradeTest extends BaseContract { nameOrSignature: "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)" ): TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, target: AddressLike, @@ -853,7 +865,7 @@ export interface GatewayZEVMUpgradeTest extends BaseContract { nameOrSignature: "execute" ): TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, target: AddressLike, diff --git a/v2/types/IGatewayZEVM.sol/IGatewayZEVM.ts b/v2/types/IGatewayZEVM.sol/IGatewayZEVM.ts index 3fc8d66a5..eea0ca11d 100644 --- a/v2/types/IGatewayZEVM.sol/IGatewayZEVM.ts +++ b/v2/types/IGatewayZEVM.sol/IGatewayZEVM.ts @@ -45,13 +45,13 @@ export type RevertOptionsStructOutput = [ onRevertGasLimit: bigint; }; -export type ZContextStruct = { +export type MessageContextStruct = { origin: BytesLike; sender: AddressLike; chainID: BigNumberish; }; -export type ZContextStructOutput = [ +export type MessageContextStructOutput = [ origin: string, sender: string, chainID: bigint @@ -103,11 +103,17 @@ export interface IGatewayZEVMInterface extends Interface { ): string; encodeFunctionData( functionFragment: "depositAndCall((bytes,address,uint256),uint256,address,bytes)", - values: [ZContextStruct, BigNumberish, AddressLike, BytesLike] + values: [MessageContextStruct, BigNumberish, AddressLike, BytesLike] ): string; encodeFunctionData( functionFragment: "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)", - values: [ZContextStruct, AddressLike, BigNumberish, AddressLike, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + BigNumberish, + AddressLike, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "depositAndRevert", @@ -115,7 +121,13 @@ export interface IGatewayZEVMInterface extends Interface { ): string; encodeFunctionData( functionFragment: "execute", - values: [ZContextStruct, AddressLike, BigNumberish, AddressLike, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + BigNumberish, + AddressLike, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "executeRevert", @@ -325,7 +337,7 @@ export interface IGatewayZEVM extends BaseContract { "depositAndCall((bytes,address,uint256),uint256,address,bytes)": TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, amount: BigNumberish, target: AddressLike, message: BytesLike @@ -336,7 +348,7 @@ export interface IGatewayZEVM extends BaseContract { "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)": TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, target: AddressLike, @@ -359,7 +371,7 @@ export interface IGatewayZEVM extends BaseContract { execute: TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, target: AddressLike, @@ -450,7 +462,7 @@ export interface IGatewayZEVM extends BaseContract { nameOrSignature: "depositAndCall((bytes,address,uint256),uint256,address,bytes)" ): TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, amount: BigNumberish, target: AddressLike, message: BytesLike @@ -462,7 +474,7 @@ export interface IGatewayZEVM extends BaseContract { nameOrSignature: "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)" ): TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, target: AddressLike, @@ -487,7 +499,7 @@ export interface IGatewayZEVM extends BaseContract { nameOrSignature: "execute" ): TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, target: AddressLike, diff --git a/v2/types/TestUniversalContract.ts b/v2/types/TestUniversalContract.ts index 3b48601ec..291adbcb7 100644 --- a/v2/types/TestUniversalContract.ts +++ b/v2/types/TestUniversalContract.ts @@ -23,13 +23,13 @@ import type { TypedContractMethod, } from "./common"; -export type ZContextStruct = { +export type MessageContextStruct = { origin: BytesLike; sender: AddressLike; chainID: BigNumberish; }; -export type ZContextStructOutput = [ +export type MessageContextStructOutput = [ origin: string, sender: string, chainID: bigint @@ -48,27 +48,22 @@ export type RevertContextStructOutput = [ ] & { asset: string; amount: bigint; revertMessage: string }; export interface TestUniversalContractInterface extends Interface { - getFunction( - nameOrSignature: "onCrossChainCall" | "onRevert" - ): FunctionFragment; + getFunction(nameOrSignature: "onCall" | "onRevert"): FunctionFragment; getEvent( nameOrSignatureOrTopic: "ContextData" | "ContextDataRevert" ): EventFragment; encodeFunctionData( - functionFragment: "onCrossChainCall", - values: [ZContextStruct, AddressLike, BigNumberish, BytesLike] + functionFragment: "onCall", + values: [MessageContextStruct, AddressLike, BigNumberish, BytesLike] ): string; encodeFunctionData( functionFragment: "onRevert", values: [RevertContextStruct] ): string; - decodeFunctionResult( - functionFragment: "onCrossChainCall", - data: BytesLike - ): Result; + decodeFunctionResult(functionFragment: "onCall", data: BytesLike): Result; decodeFunctionResult(functionFragment: "onRevert", data: BytesLike): Result; } @@ -155,9 +150,9 @@ export interface TestUniversalContract extends BaseContract { event?: TCEvent ): Promise; - onCrossChainCall: TypedContractMethod< + onCall: TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, message: BytesLike @@ -177,10 +172,10 @@ export interface TestUniversalContract extends BaseContract { ): T; getFunction( - nameOrSignature: "onCrossChainCall" + nameOrSignature: "onCall" ): TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, message: BytesLike diff --git a/v2/types/UniversalContract.sol/UniversalContract.ts b/v2/types/UniversalContract.sol/UniversalContract.ts index ea8c993e5..52c7bc9c8 100644 --- a/v2/types/UniversalContract.sol/UniversalContract.ts +++ b/v2/types/UniversalContract.sol/UniversalContract.ts @@ -21,13 +21,13 @@ import type { TypedContractMethod, } from "../common"; -export type ZContextStruct = { +export type MessageContextStruct = { origin: BytesLike; sender: AddressLike; chainID: BigNumberish; }; -export type ZContextStructOutput = [ +export type MessageContextStructOutput = [ origin: string, sender: string, chainID: bigint @@ -46,23 +46,18 @@ export type RevertContextStructOutput = [ ] & { asset: string; amount: bigint; revertMessage: string }; export interface UniversalContractInterface extends Interface { - getFunction( - nameOrSignature: "onCrossChainCall" | "onRevert" - ): FunctionFragment; + getFunction(nameOrSignature: "onCall" | "onRevert"): FunctionFragment; encodeFunctionData( - functionFragment: "onCrossChainCall", - values: [ZContextStruct, AddressLike, BigNumberish, BytesLike] + functionFragment: "onCall", + values: [MessageContextStruct, AddressLike, BigNumberish, BytesLike] ): string; encodeFunctionData( functionFragment: "onRevert", values: [RevertContextStruct] ): string; - decodeFunctionResult( - functionFragment: "onCrossChainCall", - data: BytesLike - ): Result; + decodeFunctionResult(functionFragment: "onCall", data: BytesLike): Result; decodeFunctionResult(functionFragment: "onRevert", data: BytesLike): Result; } @@ -109,9 +104,9 @@ export interface UniversalContract extends BaseContract { event?: TCEvent ): Promise; - onCrossChainCall: TypedContractMethod< + onCall: TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, message: BytesLike @@ -131,10 +126,10 @@ export interface UniversalContract extends BaseContract { ): T; getFunction( - nameOrSignature: "onCrossChainCall" + nameOrSignature: "onCall" ): TypedContractMethod< [ - context: ZContextStruct, + context: MessageContextStruct, zrc20: AddressLike, amount: BigNumberish, message: BytesLike diff --git a/v2/types/factories/GatewayZEVMUpgradeTest__factory.ts b/v2/types/factories/GatewayZEVMUpgradeTest__factory.ts index 6eaf655dc..ba65fe1de 100644 --- a/v2/types/factories/GatewayZEVMUpgradeTest__factory.ts +++ b/v2/types/factories/GatewayZEVMUpgradeTest__factory.ts @@ -179,7 +179,7 @@ const _abi = [ { name: "context", type: "tuple", - internalType: "struct zContext", + internalType: "struct MessageContext", components: [ { name: "origin", @@ -224,7 +224,7 @@ const _abi = [ { name: "context", type: "tuple", - internalType: "struct zContext", + internalType: "struct MessageContext", components: [ { name: "origin", @@ -319,7 +319,7 @@ const _abi = [ { name: "context", type: "tuple", - internalType: "struct zContext", + internalType: "struct MessageContext", components: [ { name: "origin", @@ -1254,6 +1254,11 @@ const _abi = [ }, ], }, + { + type: "error", + name: "CallOnRevertNotSupported", + inputs: [], + }, { type: "error", name: "CallerIsNotFungibleModule", @@ -1366,6 +1371,11 @@ const _abi = [ name: "WithdrawalFailed", inputs: [], }, + { + type: "error", + name: "ZETANotSupported", + inputs: [], + }, { type: "error", name: "ZRC20BurnFailed", @@ -1389,7 +1399,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613b2c6100fd6000396000818161273f01528181612768015261293e0152613b2c6000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca3714610621578063d547741f14610641578063e63ab1e914610661578063f45346dc1461069557600080fd5b806397d340f514610580578063a217fddf14610596578063ad3cb1cc146105ab578063bcf7f32b1461060157600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b5565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612e87565b610713565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612ef6565b6107ac565b3480156102a157600080fd5b506102396102b03660046130b8565b610a38565b3480156102c157600080fd5b506102396102d0366004613178565b610c3f565b3480156102e157600080fd5b506102396102f036600461322d565b610f01565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c6103483660046132b9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a53660046132d2565b6110ce565b3480156103b657600080fd5b506102396103c53660046132d2565b611118565b3480156103d657600080fd5b506102396103e5366004613302565b611169565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b506102396112de565b34801561043357600080fd5b50610239610442366004613395565b611313565b6102396104553660046133c3565b611568565b34801561046657600080fd5b5061037c611587565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c1366004613413565b6115b6565b3480156104d257600080fd5b506102396104e1366004613459565b6116be565b3480156104f257600080fd5b5061023961188c565b34801561050757600080fd5b506102606105163660046132d2565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b5061023961057b3660046134d2565b6118be565b34801561058c57600080fd5b5061037c61040081565b3480156105a257600080fd5b5061037c600081565b3480156105b757600080fd5b506105f46040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c91906135a4565b34801561060d57600080fd5b5061023961061c3660046135b7565b6119dd565b34801561062d57600080fd5b5061023961063c3660046135b7565b611b0d565b34801561064d57600080fd5b5061023961065c3660046132d2565b611d1c565b34801561066d57600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156106a157600080fd5b506102396106b0366004613655565b611d60565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610711576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108016106b5565b6001600160a01b038416158061081e57506001600160a01b038216155b15610855576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088f576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108c257506001600160a01b03821630145b156108f9576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af1158015610961573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098591906136a5565b6109bb576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de090610a0090849060040161376f565b600060405180830381600087803b158015610a1a57600080fd5b505af1158015610a2e573d6000803e3d6000fd5b5050505050505050565b610a40611f6f565b610a486106b5565b8651600003610a83576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610abd576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610af7576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b0760608301836137d5565b610b1291508561383a565b10610b49576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b56878785611ff0565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190613874565b8c8c8c8c604051610c049998979695949392919061390e565b60405180910390a350610c3660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c47611f6f565b610c4f6106b5565b8551600003610c8a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610cc4576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610cd460608301836137d5565b610cdf91508561383a565b10610d16576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9c9190613981565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4591906136a5565b610e7b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610ec69594939291906139af565b60405180910390a35050610ef960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610f4e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f566106b5565b6001600160a01b038316610f96576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610fd0576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061100357506001600160a01b03831630145b1561103a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61104484846122f3565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92611095928a9216908990889088906004016139fb565b600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611108816124c1565b61111283836124cb565b50505050565b6001600160a01b038116331461115a576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116482826125b8565b505050565b611171611f6f565b6111796106b5565b85516000036111b4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846000036111ee576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006111fe60608301836137d5565b61120991508461383a565b10611240576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61125e8573735b14bb79463307aacbed86daf3322b1e6226ab6122f3565b60008054604051869233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d926112ad928c926001600160a01b0316918c919081908c908c9083908d9061390e565b60405180910390a3610ef960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611308816124c1565b61131061267c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561135e5750825b905060008267ffffffffffffffff16600114801561137b5750303b155b905081158015611389575080155b156113c0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156114215784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061143e57506001600160a01b038616155b15611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61147d61270c565b61148561270c565b61148d612714565b611495612724565b6114a06000876124cb565b506114cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876124cb565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c365784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b611570612734565b61157982612804565b611583828261280f565b5050565b6000611591612933565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611603576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61160b6106b5565b6001600160a01b03821661164b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de09061169090849060040161376f565b600060405180830381600087803b1580156116aa57600080fd5b505af1158015610ef9573d6000803e3d6000fd5b6116c6611f6f565b6116ce6106b5565b8351600003611709576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611743576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061174f8484612995565b90506000336001600160a01b03167f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d3557887868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190613874565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118469190613874565b8a60405161185a9796959493929190613a6c565b60405180910390a35061111260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6118b6816124c1565b611310612a03565b6118c6611f6f565b6118ce6106b5565b8351600003611909576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611943576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119618373735b14bb79463307aacbed86daf3322b1e6226ab6122f3565b60008054604051849233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d926119ac928a926001600160a01b0316918a9190819081908b90613a6c565b60405180910390a361111260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a2a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a326106b5565b6001600160a01b0385161580611a4f57506001600160a01b038316155b15611a86576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90611ad390899089908990889088906004016139fb565b600060405180830381600087803b158015611aed57600080fd5b505af1158015611b01573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611b5a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b626106b5565b6001600160a01b0385161580611b7f57506001600160a01b038316155b15611bb6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611bf0576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611c2357506001600160a01b03831630145b15611c5a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce691906136a5565b611a86576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611d56816124c1565b61111283836125b8565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611dad576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db56106b5565b6001600160a01b0383161580611dd257506001600160a01b038116155b15611e09576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611e43576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611e7657506001600160a01b03811630145b15611ead576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3991906136a5565b611164576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611fea576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b815260040161202391815260200190565b6040805180830381865afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120639190613981565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af11580156120e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210c91906136a5565b612142576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af11580156121ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d291906136a5565b612208576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228c91906136a5565b6122c2576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238791906136a5565b6123bd576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561241c57600080fd5b505af1158015612430573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114612481576040519150601f19603f3d011682016040523d82523d6000602084013e612486565b606091505b5050905080611164576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113108133612a7c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166125ae576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556125643390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a6565b60009150506107a6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156125ae576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a6565b612684612b09565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b610711612b64565b61271c612b64565b610711612bcb565b61272c612b64565b610711612c1c565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806127cd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610711576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611583816124c1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612887575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261288491810190613874565b60015b6128cd576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612929576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016128c4565b6111648383612c24565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610711576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006122c68383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fe9190613874565b611ff0565b612a0b6106b5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336126ee565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611583576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016128c4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610711576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610711576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bd3612b64565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6122cd612b64565b612c2d82612c7a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612c72576111648282612d22565b611583612d98565b806001600160a01b03163b600003612cc9576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016128c4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d3f9190613ada565b600060405180830381855af49150503d8060008114612d7a576040519150601f19603f3d011682016040523d82523d6000602084013e612d7f565b606091505b5091509150612d8f858383612dd0565b95945050505050565b3415610711576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612de557612de082612e45565b6122c6565b8151158015612dfc57506001600160a01b0384163b155b15612e3e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016128c4565b50806122c6565b805115612e555780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612e9957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146122c657600080fd5b6001600160a01b038116811461131057600080fd5b600060608284031215612ef057600080fd5b50919050565b60008060008060808587031215612f0c57600080fd5b8435612f1781612ec9565b9350602085013592506040850135612f2e81612ec9565b9150606085013567ffffffffffffffff811115612f4a57600080fd5b612f5687828801612ede565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612fa257600080fd5b813567ffffffffffffffff811115612fbc57612fbc612f62565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561302857613028612f62565b60405281815283820160200185101561304057600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f84011261306f57600080fd5b50813567ffffffffffffffff81111561308757600080fd5b60208301915083602082850101111561309f57600080fd5b9250929050565b600060a08284031215612ef057600080fd5b600080600080600080600060c0888a0312156130d357600080fd5b873567ffffffffffffffff8111156130ea57600080fd5b6130f68a828b01612f91565b97505060208801359550604088013561310e81612ec9565b9450606088013567ffffffffffffffff81111561312a57600080fd5b6131368a828b0161305d565b9095509350506080880135915060a088013567ffffffffffffffff81111561315d57600080fd5b6131698a828b016130a6565b91505092959891949750929550565b60008060008060008060a0878903121561319157600080fd5b863567ffffffffffffffff8111156131a857600080fd5b6131b489828a01612f91565b96505060208701356131c581612ec9565b9450604087013567ffffffffffffffff8111156131e157600080fd5b6131ed89828a0161305d565b90955093505060608701359150608087013567ffffffffffffffff81111561321457600080fd5b61322089828a016130a6565b9150509295509295509295565b60008060008060006080868803121561324557600080fd5b853567ffffffffffffffff81111561325c57600080fd5b61326888828901612ede565b95505060208601359350604086013561328081612ec9565b9250606086013567ffffffffffffffff81111561329c57600080fd5b6132a88882890161305d565b969995985093965092949392505050565b6000602082840312156132cb57600080fd5b5035919050565b600080604083850312156132e557600080fd5b8235915060208301356132f781612ec9565b809150509250929050565b60008060008060008060a0878903121561331b57600080fd5b863567ffffffffffffffff81111561333257600080fd5b61333e89828a01612f91565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561336957600080fd5b61337589828a0161305d565b909450925050608087013567ffffffffffffffff81111561321457600080fd5b600080604083850312156133a857600080fd5b82356133b381612ec9565b915060208301356132f781612ec9565b600080604083850312156133d657600080fd5b82356133e181612ec9565b9150602083013567ffffffffffffffff8111156133fd57600080fd5b61340985828601612f91565b9150509250929050565b6000806040838503121561342657600080fd5b823561343181612ec9565b9150602083013567ffffffffffffffff81111561344d57600080fd5b61340985828601612ede565b6000806000806080858703121561346f57600080fd5b843567ffffffffffffffff81111561348657600080fd5b61349287828801612f91565b9450506020850135925060408501356134aa81612ec9565b9150606085013567ffffffffffffffff8111156134c657600080fd5b612f56878288016130a6565b600080600080608085870312156134e857600080fd5b843567ffffffffffffffff8111156134ff57600080fd5b61350b87828801612f91565b9450506020850135925060408501359150606085013567ffffffffffffffff8111156134c657600080fd5b60005b83811015613551578181015183820152602001613539565b50506000910152565b60008151808452613572816020860160208601613536565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122c6602083018461355a565b60008060008060008060a087890312156135d057600080fd5b863567ffffffffffffffff8111156135e757600080fd5b6135f389828a01612ede565b965050602087013561360481612ec9565b945060408701359350606087013561361b81612ec9565b9250608087013567ffffffffffffffff81111561363757600080fd5b61364389828a0161305d565b979a9699509497509295939492505050565b60008060006060848603121561366a57600080fd5b833561367581612ec9565b925060208401359150604084013561368c81612ec9565b809150509250925092565b801515811461131057600080fd5b6000602082840312156136b757600080fd5b81516122c681613697565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f757600080fd5b830160208101925035905067ffffffffffffffff81111561371757600080fd5b80360382131561309f57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561378081612ec9565b6001600160a01b038116602084015250602083013567ffffffffffffffff81168082146137ac57600080fd5b80604085015250506137c160408401846136c2565b606080850152612d8f608085018284613726565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261380a57600080fd5b83018035915067ffffffffffffffff82111561382557600080fd5b60200191503681900382131561309f57600080fd5b808201808211156107a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561388657600080fd5b5051919050565b6000813561389a81612ec9565b6001600160a01b0316835260208201356138b381613697565b1515602084015260408201356138c881612ec9565b6001600160a01b031660408401526138e360608301836136c2565b60a060608601526138f860a086018284613726565b6080948501359590940194909452509092915050565b6101008152600061392361010083018c61355a565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a0840152613957818789613726565b90508460c084015282810360e0840152613971818561388d565b9c9b505050505050505050505050565b6000806040838503121561399457600080fd5b825161399f81612ec9565b6020939093015192949293505050565b6080815260006139c2608083018861355a565b82810360208401526139d5818789613726565b905084604084015282810360608401526139ef818561388d565b98975050505050505050565b608081526000613a0b87886136c2565b60606080850152613a2060e085018284613726565b9150506020880135613a3181612ec9565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526139ef818587613726565b61010081526000613a8161010083018a61355a565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e085015250613acc602082018561388d565b9a9950505050505050505050565b60008251613aec818460208701613536565b919091019291505056fea2646970667358221220f71bd58ca9f5b156fdd36da2e6242c5e39c6ce1c972a51f93d45335cd01aa5a664736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b0380861692635bcfd6169261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d3557887868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b03841690635bcfd6169061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea26469706673582212208a13c91b149fb6f550c049c370fc634fbf4f102e79ec8481debd5fbf58cc261f64736f6c634300081a0033"; type GatewayZEVMUpgradeTestConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/GatewayZEVM__factory.ts b/v2/types/factories/GatewayZEVM__factory.ts index bf167321f..d22f567f2 100644 --- a/v2/types/factories/GatewayZEVM__factory.ts +++ b/v2/types/factories/GatewayZEVM__factory.ts @@ -176,7 +176,7 @@ const _abi = [ { name: "context", type: "tuple", - internalType: "struct zContext", + internalType: "struct MessageContext", components: [ { name: "origin", @@ -221,7 +221,7 @@ const _abi = [ { name: "context", type: "tuple", - internalType: "struct zContext", + internalType: "struct MessageContext", components: [ { name: "origin", @@ -316,7 +316,7 @@ const _abi = [ { name: "context", type: "tuple", - internalType: "struct zContext", + internalType: "struct MessageContext", components: [ { name: "origin", @@ -1302,7 +1302,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e9261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e9061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea2646970667358221220d6295002fd18ec461c02f99613a4db51b8eca02e82f77afc8b206b54bd8363c364736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b0380861692635bcfd6169261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b03841690635bcfd6169061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea26469706673582212205b760c9072c4b8b5ebc94339927027ff9e67d3127c5bf7f24bb821ffbe32443064736f6c634300081a0033"; type GatewayZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts b/v2/types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts index 392e31a85..283da8737 100644 --- a/v2/types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts +++ b/v2/types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts @@ -99,7 +99,7 @@ const _abi = [ { name: "context", type: "tuple", - internalType: "struct zContext", + internalType: "struct MessageContext", components: [ { name: "origin", @@ -144,7 +144,7 @@ const _abi = [ { name: "context", type: "tuple", - internalType: "struct zContext", + internalType: "struct MessageContext", components: [ { name: "origin", @@ -239,7 +239,7 @@ const _abi = [ { name: "context", type: "tuple", - internalType: "struct zContext", + internalType: "struct MessageContext", components: [ { name: "origin", diff --git a/v2/types/factories/SenderZEVM__factory.ts b/v2/types/factories/SenderZEVM__factory.ts index f74a222c0..8a274dfe1 100644 --- a/v2/types/factories/SenderZEVM__factory.ts +++ b/v2/types/factories/SenderZEVM__factory.ts @@ -120,7 +120,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220d7e1a9075911564d308c037a0af9765ff7f3977eee9652547da152cb6de1448964736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea264697066735822122037e9f02c9f1066889aa75870351a007a7daaa8277c5c9d435a858ffde2091b1364736f6c634300081a0033"; type SenderZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/SystemContract.sol/SystemContract__factory.ts b/v2/types/factories/SystemContract.sol/SystemContract__factory.ts index 1ea2d41a5..6f835a388 100644 --- a/v2/types/factories/SystemContract.sol/SystemContract__factory.ts +++ b/v2/types/factories/SystemContract.sol/SystemContract__factory.ts @@ -439,7 +439,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201bc2c2e5533a7390cd5c9f230b641bee17c3057fdf7a0f92b4302cd8cea1ce6764736f6c634300081a0033"; + "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212206cfc8728f3e6a008fa60110012d328f8d2a859ba07c5fdfb6776051dc27a333964736f6c634300081a0033"; type SystemContractConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts b/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts index 91210c692..1c2c0b5d6 100644 --- a/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts +++ b/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts @@ -342,7 +342,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220cc406cf4b9f9cfbacfa9f32870eb254a68b539001bcca4f238577e817f73a2ab64736f6c634300081a0033"; + "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220e349eeb22d87c24401c0e0a954fb5e1774b175448e0269cf8092b426d6a4912864736f6c634300081a0033"; type SystemContractMockConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/TestUniversalContract__factory.ts b/v2/types/factories/TestUniversalContract__factory.ts index dafef5081..e19ff3fb7 100644 --- a/v2/types/factories/TestUniversalContract__factory.ts +++ b/v2/types/factories/TestUniversalContract__factory.ts @@ -25,12 +25,12 @@ const _abi = [ }, { type: "function", - name: "onCrossChainCall", + name: "onCall", inputs: [ { name: "context", type: "tuple", - internalType: "struct zContext", + internalType: "struct MessageContext", components: [ { name: "origin", @@ -168,7 +168,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c8063660b9de014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c1828401846103a2565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610498565b6100ff60408a0160208b01610504565b8960400135338660405161011896959493929190610526565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b1660208201526000602083013567ffffffffffffffff81168082146102ed57600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261032a57600080fd5b830160208101903567ffffffffffffffff81111561034757600080fd5b80360382131561035657600080fd5b60608085015261036a60808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103b457600080fd5b813567ffffffffffffffff8111156103cb57600080fd5b8201601f810184136103dc57600080fd5b803567ffffffffffffffff8111156103f6576103f6610373565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561046257610462610373565b60405281815282820160200186101561047a57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104cd57600080fd5b83018035915067ffffffffffffffff8211156104e857600080fd5b6020019150368190038213156104fd57600080fd5b9250929050565b60006020828403121561051657600080fd5b61051f8261017d565b9392505050565b60a08152600061053a60a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105a457602081870181015184830182015201610588565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122002711b914cfa85869597d761ee7a81ae9c55589f2201dbf0c65836b421bff96564736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c80635bcfd61614610033578063660b9de01461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610169565b610073565b34801561005f57600080fd5b5061003161006e366004610221565b6100ee565b6060811561008a576100878284018461028d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610383565b6100c560408a0160208b016103ef565b896040013533866040516100de9695949392919061045a565b60405180910390a1505050505050565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c768160405161011d919061051c565b60405180910390a150565b60006060828403121561013a57600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016457600080fd5b919050565b60008060008060006080868803121561018157600080fd5b853567ffffffffffffffff81111561019857600080fd5b6101a488828901610128565b9550506101b360208701610140565b935060408601359250606086013567ffffffffffffffff8111156101d657600080fd5b8601601f810188136101e757600080fd5b803567ffffffffffffffff8111156101fe57600080fd5b88602082840101111561021057600080fd5b959894975092955050506020019190565b60006020828403121561023357600080fd5b813567ffffffffffffffff81111561024a57600080fd5b61025684828501610128565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561029f57600080fd5b813567ffffffffffffffff8111156102b657600080fd5b8201601f810184136102c757600080fd5b803567ffffffffffffffff8111156102e1576102e161025e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561034d5761034d61025e565b60405281815282820160200186101561036557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126103b857600080fd5b83018035915067ffffffffffffffff8211156103d357600080fd5b6020019150368190038213156103e857600080fd5b9250929050565b60006020828403121561040157600080fd5b61040a82610140565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a08152600061046e60a08301888a610411565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156104d8576020818701810151848301820152016104bc565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683010192505050979650505050505050565b6020815273ffffffffffffffffffffffffffffffffffffffff61053e83610140565b1660208201526000602083013567ffffffffffffffff811680821461056257600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261059f57600080fd5b830160208101903567ffffffffffffffff8111156105bc57600080fd5b8036038213156105cb57600080fd5b6060808501526105df608085018284610411565b9594505050505056fea2646970667358221220cb26ed07348041180f6631404fac1759ff8efa800dbae7e9722129211743d1d664736f6c634300081a0033"; type TestUniversalContractConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/UniversalContract.sol/UniversalContract__factory.ts b/v2/types/factories/UniversalContract.sol/UniversalContract__factory.ts index 1955f373c..902f155cb 100644 --- a/v2/types/factories/UniversalContract.sol/UniversalContract__factory.ts +++ b/v2/types/factories/UniversalContract.sol/UniversalContract__factory.ts @@ -11,12 +11,12 @@ import type { const _abi = [ { type: "function", - name: "onCrossChainCall", + name: "onCall", inputs: [ { name: "context", type: "tuple", - internalType: "struct zContext", + internalType: "struct MessageContext", components: [ { name: "origin", From 095cef2917a784dc44160631020942185842f24f Mon Sep 17 00:00:00 2001 From: skosito Date: Tue, 15 Oct 2024 20:11:54 +0200 Subject: [PATCH 13/16] generate --- v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go | 2 +- v2/pkg/gatewayzevm.sol/gatewayzevm.go | 2 +- v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go | 2 +- v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go | 2 +- v2/pkg/gatewayzevmupgradetest.sol/gatewayzevmupgradetest.go | 2 +- v2/pkg/senderzevm.sol/senderzevm.go | 2 +- v2/pkg/systemcontract.sol/systemcontract.go | 2 +- v2/pkg/systemcontractmock.sol/systemcontractmock.go | 2 +- v2/pkg/testuniversalcontract.sol/testuniversalcontract.go | 2 +- v2/pkg/zrc20.t.sol/zrc20test.go | 2 +- v2/types/factories/GatewayZEVMUpgradeTest__factory.ts | 2 +- v2/types/factories/GatewayZEVM__factory.ts | 2 +- v2/types/factories/SenderZEVM__factory.ts | 2 +- .../factories/SystemContract.sol/SystemContract__factory.ts | 2 +- .../SystemContractMock.sol/SystemContractMock__factory.ts | 2 +- v2/types/factories/TestUniversalContract__factory.ts | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go index 980216b71..26c305347 100644 --- a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go +++ b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go @@ -66,7 +66,7 @@ type StdInvariantFuzzSelector struct { // GatewayEVMZEVMTestMetaData contains all meta data concerning the GatewayEVMZEVMTest contract. var GatewayEVMZEVMTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e82a8061003c6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b6101326112bf565b60405161013f9190617b70565b60405180910390f35b610150611321565b60405161013f9190617c0c565b610132611463565b6101326114c3565b610128611523565b61017d611da7565b60405161013f9190617d72565b610128611f29565b61019a612761565b60405161013f9190617e10565b6101af612831565b60405161013f9190617e87565b61012861292c565b6101af612f2d565b61019a613028565b6101dc6130f8565b604051901515815260200161013f565b6101286131cc565b610132613905565b601f546101dc9060ff1681565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780548216615678179055602d805490911661432117905560405161026790617a76565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617a76565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190851660248201526044810193909352921660648201526000916104a7916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613965565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c000000000000000000000000000000006020820152602754602554925193909504841660248401529383166044830152909116606482015291925061054a9160840161044a565b602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091178255604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c00000000000093810193909352601f546023546027546025549351610100909304851660248401529084166044830152831660648201529116608482015291925061064e9160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e00000000000000000000000000000000000000000000000000000000179052613965565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179091556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b5050601f546020546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b15801561080957600080fd5b505af115801561081d573d6000803e3d6000fd5b5050601f546021546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b15801561088857600080fd5b505af115801561089c573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108fe57600080fd5b505af1158015610912573d6000803e3d6000fd5b50506022546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561098157600080fd5b505af1158015610995573d6000803e3d6000fd5b50506022546020546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af1158015610a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2d9190617f1e565b50604051610a3a90617a83565b604051809103906000f080158015610a56573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316178155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602354602d5492519085169381019390935292166044820152610b3c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613965565b602880546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602980549092168117909155604051610b8d90617a90565b6001600160a01b039091168152602001604051809103906000f080158015610bb9573d6000803e3d6000fd5b50602a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c6e57600080fd5b505af1158015610c82573d6000803e3d6000fd5b505050506000806000604051610c9790617a9d565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610cd3573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602954604051601293600193600093849391921690610d2990617aaa565b610d3896959493929190617f40565b604051809103906000f080158015610d54573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602b546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610deb57600080fd5b505af1158015610dff573d6000803e3d6000fd5b5050602b546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b5050602c54602d546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f159190617f1e565b50602c54602a546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faa9190617f1e565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561100957600080fd5b505af115801561101d573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561109357600080fd5b505af11580156110a7573d6000803e3d6000fd5b5050602c546029546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af115801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190617f1e565b506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506040805160a0810182526103218082526000602080840182815284860193845285519182019095528181526060840181905260808401919091528251602e80549551151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009096166001600160a01b03928316179590951785559151602f8054919093167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179091559093509091506030906112ad9082618100565b50608082015181600301559050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561131757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112f9575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561145a57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114435783829060005260206000200180546113b690618064565b80601f01602080910402602001604051908101604052809291908181526020018280546113e290618064565b801561142f5780601f106114045761010080835404028352916020019161142f565b820191906000526020600020905b81548152906001019060200180831161141257829003601f168201915b505050505081526020019060010190611397565b505050508152505081526020019060010190611345565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602c54602a805493517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03948516600482015292939092600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa1580156115cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f391906181bf565b6040519091506000907fe04d4f970000000000000000000000000000000000000000000000000000000090611630908890889088906024016181d8565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260245490519193506000926116c9926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602c54611700926207a120916001600160a01b0316908690600190602e906024016182f1565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f048ae42c0000000000000000000000000000000000000000000000000000000017905260295490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916117bd916001600160a01b039190911690600090869060040161835a565b600060405180830381600087803b1580156117d757600080fd5b505af11580156117eb573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561186157600080fd5b505af1158015611875573d6000803e3d6000fd5b5050602a5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261190f926207a120916001600160a01b0316908d908d908d90600401618382565b600060405180830381600087803b15801561192957600080fd5b505af115801561193d573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b1580156119be57600080fd5b505af11580156119d2573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a6557600080fd5b505af1158015611a79573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031685898989604051611ac99594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b6357600080fd5b505af1158015611b77573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611bbc9087908690618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c3657600080fd5b505af1158015611c4a573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd93508892611ca39216908790600401618431565b60006040518083038185885af1158015611cc1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611cea919081019061850c565b50602c54602a546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7991906181bf565b9050611d9d816001611d8e6207a12088618570565b611d989190618570565b613984565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561145a5783829060005260206000209060020201604051806040016040529081600082018054611dfe90618064565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2a90618064565b8015611e775780601f10611e4c57610100808354040283529160200191611e77565b820191906000526020600020905b815481529060010190602001808311611e5a57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611f1157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611ebe5790505b50505050508152505081526020019060010190611dcb565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611fa5908790879087906024016181d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000949094169390931790925260295491517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039093166084820152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561209757600080fd5b505af11580156120ab573d6000803e3d6000fd5b5050602d5460245460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f19818403018152828252602c547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216916207a1209188918491634d8943bb916004808201926020929091908290030181865afa158015612180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a491906181bf565b896001602e6040516121bd989796959493929190618583565b60405180910390a3602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561223757600080fd5b505af115801561224b573d6000803e3d6000fd5b505060295460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063048ae42c915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526122e7926207a120916001600160a01b0316908890600190602e906004016185e5565b600060405180830381600087803b15801561230157600080fd5b505af1158015612315573d6000803e3d6000fd5b5050602c54602d546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a591906181bf565b90506123b881611d98846207a120618570565b601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561243557600080fd5b505af1158015612449573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156124dc57600080fd5b505af11580156124f0573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b0316858989896040516125409594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156125da57600080fd5b505af11580156125ee573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506126339087908790618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156126ad57600080fd5b505af11580156126c1573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd9350889261271a9216908890600401618431565b60006040518083038185885af1158015612738573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611d9d919081019061850c565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561145a5783829060005260206000200180546127a490618064565b80601f01602080910402602001604051908101604052809291908181526020018280546127d090618064565b801561281d5780601f106127f25761010080835404028352916020019161281d565b820191906000526020600020905b81548152906001019060200180831161280057829003601f168201915b505050505081526020019060010190612785565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561145a5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561291457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116128c15790505b50505050508152505081526020019060010190612855565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f9700000000000000000000000000000000000000000000000000000000906129a8908790879087906024016181d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602d5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a7b57600080fd5b505af1158015612a8f573d6000803e3d6000fd5b50506029546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612b2157600080fd5b505af1158015612b35573d6000803e3d6000fd5b5050602c54602d5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf9060340160408051601f1981840301815290829052612bb5918690600190602e90618639565b60405180910390a36029546024546040805160609290921b6bffffffffffffffffffffffff19166020830152805180830360140181526034830191829052602c547f1cb5ea75000000000000000000000000000000000000000000000000000000009092526001600160a01b0393841693631cb5ea7593612c459391909116908690600190602e90603801618678565b600060405180830381600087803b158015612c5f57600080fd5b505af1158015612c73573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612cf457600080fd5b505af1158015612d08573d6000803e3d6000fd5b5050601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612d9e57600080fd5b505af1158015612db2573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612df79085908590618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e7157600080fd5b505af1158015612e85573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd93508692612ede9216908690600401618431565b60006040518083038185885af1158015612efc573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612f25919081019061850c565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561145a5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561301057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612fbd5790505b50505050508152505081526020019060010190612f51565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561145a57838290600052602060002001805461306b90618064565b80601f016020809104026020016040519081016040528092919081815260200182805461309790618064565b80156130e45780601f106130b9576101008083540402835291602001916130e4565b820191906000526020600020905b8154815290600101906020018083116130c757829003601f168201915b50505050508152602001906001019061304c565b60085460009060ff1615613110575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156131a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c591906181bf565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090613248908790879087906024016181d8565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260245490519193506000926132e1926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602c54613315926001600160a01b03909116908590600190602e906024016186d2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1cb5ea750000000000000000000000000000000000000000000000000000000017905260295490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916133d2916001600160a01b039190911690600090869060040161835a565b600060405180830381600087803b1580156133ec57600080fd5b505af1158015613400573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561347657600080fd5b505af115801561348a573d6000803e3d6000fd5b5050602a5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637a34d8bb915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352613521926001600160a01b03909116908b908b908b90600401618723565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b1580156135d057600080fd5b505af11580156135e4573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561367757600080fd5b505af115801561368b573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b0316848888886040516136db9594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561377557600080fd5b505af1158015613789573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506137ce9086908690618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561384857600080fd5b505af115801561385c573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd935087926138b59216908790600401618431565b60006040518083038185885af11580156138d3573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526138fc919081019061850c565b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b600061396f617ab7565b61397a848483613a03565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156139ef57600080fd5b505afa158015612f25573d6000803e3d6000fd5b600080613a108584613a7e565b9050613a736040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613a5e929190618431565b60405160208183030381529060405285613a8a565b9150505b9392505050565b6000613a778383613ab8565b60c08101515160009015613aae57613aa784848460c00151613ad3565b9050613a77565b613aa78484613c79565b6000613ac48383613d64565b613a7783836020015184613a8a565b600080613ade613d74565b90506000613aec8683613e47565b90506000613b0382606001518360200151856142ed565b90506000613b13838389896144ff565b90506000613b208261537c565b602081015181519192509060030b15613b9357898260400151604051602001613b4a929190618771565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b8a916004016187f2565b60405180910390fd5b6000613bd66040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161554b565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613c299084906004016187f2565b602060405180830381865afa158015613c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6a9190618805565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613cce9087906004016187f2565b600060405180830381865afa158015613ceb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d13919081019061850c565b90506000613d418285604051602001613d2d92919061882e565b60405160208183030381529060405261574b565b90506001600160a01b03811661397a578484604051602001613b4a92919061885d565b613d708282600061575e565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613dfb908490600401618908565b600060405180830381865afa158015613e18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e40919081019061894f565b9250505090565b613e796040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613ec46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613ecd85615861565b60208201526000613edd86615c46565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613f1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f47919081019061894f565b86838560200151604051602001613f619493929190618998565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613fb99085906004016187f2565b600060405180830381865afa158015613fd6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ffe919081019061894f565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614046908490600401618a9c565b602060405180830381865afa158015614063573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140879190617f1e565b61409c5781604051602001613b4a9190618aee565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906140e1908490600401618b80565b600060405180830381865afa1580156140fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614126919081019061894f565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061416d908490600401618bd2565b602060405180830381865afa15801561418a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ae9190617f1e565b15614243576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906141f8908490600401618bd2565b600060405180830381865afa158015614215573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261423d919081019061894f565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016142689190618c24565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614294929190618c90565b600060405180830381865afa1580156142b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142d9919081019061894f565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816143095790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061436957614369618cb5565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106143bd576143bd618cb5565b6020026020010181905250846040516020016143d99190618ce4565b604051602081830303815290604052816002815181106143fb576143fb618cb5565b6020026020010181905250826040516020016144179190618d50565b6040516020818303038152906040528160038151811061443957614439618cb5565b6020026020010181905250600061444f8261537c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144e09060408051808201825260008082526020918201528151808301909252845182528085019082015290615ec9565b6144f55785604051602001613b4a9190618d91565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561454f565b511590565b6146c35782602001511561460b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b8a565b8260c00151156146c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b8a565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816146dc57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061473790618e22565b935060ff168151811061474c5761474c618cb5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161479d9190618e41565b6040516020818303038152906040528282806147b890618e22565b935060ff16815181106147cd576147cd618cb5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061481a90618e22565b935060ff168151811061482f5761482f618cb5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061487c90618e22565b935060ff168151811061489157614891618cb5565b602002602001018190525087602001518282806148ad90618e22565b935060ff16815181106148c2576148c2618cb5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061490f90618e22565b935060ff168151811061492457614924618cb5565b60209081029190910101528751828261493c81618e22565b935060ff168151811061495157614951618cb5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061499e90618e22565b935060ff16815181106149b3576149b3618cb5565b60200260200101819052506149c746615f2a565b82826149d281618e22565b935060ff16815181106149e7576149e7618cb5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614a3490618e22565b935060ff1681518110614a4957614a49618cb5565b602002602001018190525086828280614a6190618e22565b935060ff1681518110614a7657614a76618cb5565b6020908102919091010152855115614b9d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614ac781618e22565b935060ff1681518110614adc57614adc618cb5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614b2c9089906004016187f2565b600060405180830381865afa158015614b49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b71919081019061894f565b8282614b7c81618e22565b935060ff1681518110614b9157614b91618cb5565b60200260200101819052505b846020015115614c6d5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614be681618e22565b935060ff1681518110614bfb57614bfb618cb5565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614c4890618e22565b935060ff1681518110614c5d57614c5d618cb5565b6020026020010181905250614e34565b614ca561454a8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614d385760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614ce881618e22565b935060ff1681518110614cfd57614cfd618cb5565b60200260200101819052508460a00151604051602001614d1d9190618ce4565b604051602081830303815290604052828280614c4890618e22565b8460c00151158015614d7b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d7990511590565b155b15614e345760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614dbf81618e22565b935060ff1681518110614dd457614dd4618cb5565b6020026020010181905250614de888615fca565b604051602001614df89190618ce4565b604051602081830303815290604052828280614e1390618e22565b935060ff1681518110614e2857614e28618cb5565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e6890511590565b614efd5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614eab81618e22565b935060ff1681518110614ec057614ec0618cb5565b60200260200101819052508460400151828280614edc90618e22565b935060ff1681518110614ef157614ef1618cb5565b60200260200101819052505b60608501511561501e5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614f4681618e22565b935060ff1681518110614f5b57614f5b618cb5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614fca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ff2919081019061894f565b8282614ffd81618e22565b935060ff168151811061501257615012618cb5565b60200260200101819052505b60e085015151156150c55760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261506881618e22565b935060ff168151811061507d5761507d618cb5565b60200260200101819052506150998560e0015160000151615f2a565b82826150a481618e22565b935060ff16815181106150b9576150b9618cb5565b60200260200101819052505b60e0850151602001511561516f5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261511281618e22565b935060ff168151811061512757615127618cb5565b60200260200101819052506151438560e0015160200151615f2a565b828261514e81618e22565b935060ff168151811061516357615163618cb5565b60200260200101819052505b60e085015160400151156152195760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826151bc81618e22565b935060ff16815181106151d1576151d1618cb5565b60200260200101819052506151ed8560e0015160400151615f2a565b82826151f881618e22565b935060ff168151811061520d5761520d618cb5565b60200260200101819052505b60e085015160600151156152c35760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261526681618e22565b935060ff168151811061527b5761527b618cb5565b60200260200101819052506152978560e0015160600151615f2a565b82826152a281618e22565b935060ff16815181106152b7576152b7618cb5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156152e1576152e1618035565b60405190808252806020026020018201604052801561531457816020015b60608152602001906001900390816152ff5790505b50905060005b8260ff168160ff16101561536d57838160ff168151811061533d5761533d618cb5565b6020026020010151828260ff168151811061535a5761535a618cb5565b602090810291909101015260010161531a565b5093505050505b949350505050565b6153a36040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161542991869101618eac565b600060405180830381865afa158015615446573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261546e919081019061894f565b9050600061547c8683616ab9565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016154ac9190617e10565b6000604051808303816000875af11580156154cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154f39190810190618ef3565b805190915060030b1580159061550c5750602081015151155b801561551b5750604081015151155b156144f5578160008151811061553357615533618cb5565b6020026020010151604051602001613b4a9190618fa9565b606060006155808560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155b79082905b90616c0e565b156157145760006156348261562e846156286155fa8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616c35565b90616c97565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615698908290616c0e565b1561570257604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526156ff905b8290616d1c565b90505b61570b81616d42565b92505050613a77565b821561572d578484604051602001613b4a929190619195565b5050604080516020810190915260008152613a77565b509392505050565b6000808251602084016000f09392505050565b8160a001511561576d57505050565b600061577a848484616dab565b905060006157878261537c565b602081015181519192509060030b1580156158235750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615823906040805180820182526000808252602091820152815180830190925284518252808501908201526155b1565b1561583057505050505050565b60408201515115615850578160400151604051602001613b4a919061923c565b80604051602001613b4a919061929a565b606060006158968360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506158fb905b8290615ec9565b1561596a57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a7790615965908390617346565b616d42565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159cc905b82906173d0565b600103615a9957604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a32906156f8565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a7790615965905b8390616d1c565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615af8906158f4565b15615c2f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b6090839061746a565b905060008160018351615b739190618570565b81518110615b8357615b83618cb5565b60200260200101519050615c26615965615bf96040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617346565b95945050505050565b82604051602001613b4a9190619305565b50919050565b60606000615c7b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615cdd906158f4565b15615ceb57613a7781616d42565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d4a906159c5565b600103615db457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a779061596590615a92565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e13906158f4565b15615c2f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e7b90839061746a565b9050600181511115615eb7578060028251615e969190618570565b81518110615ea657615ea6618cb5565b602002602001015192505050919050565b5082604051602001613b4a9190619305565b805182516000911115615ede5750600061397e565b81518351602085015160009291615ef4916193e3565b615efe9190618570565b905082602001518103615f1557600191505061397e565b82516020840151819020912014905092915050565b60606000615f378361750f565b600101905060008167ffffffffffffffff811115615f5757615f57618035565b6040519080825280601f01601f191660200182016040528015615f81576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f8b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616056905b82906175f1565b1561609657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160f59061604f565b1561613557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161949061604f565b156161d457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162339061604f565b806162985750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162989061604f565b156162d857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163379061604f565b8061639c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261639c9061604f565b156163dc57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261643b9061604f565b806164a05750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164a09061604f565b156164e057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653f9061604f565b806165a45750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165a49061604f565b156165e457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166439061604f565b1561668357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166e29061604f565b1561672257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167819061604f565b156167c157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168209061604f565b1561686057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168bf9061604f565b156168ff57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261695e9061604f565b806169c35750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169c39061604f565b15616a0357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a629061604f565b15616aa257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613b4a92906020016193f6565b60608060005b8451811015616b445781858281518110616adb57616adb618cb5565b6020026020010151604051602001616af492919061882e565b604051602081830303815290604052915060018551616b139190618570565b8114616b3c5781604051602001616b2a919061955f565b60405160208183030381529060405291505b600101616abf565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616b5d5790505090508381600081518110616b8857616b88618cb5565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616bdc57616bdc618cb5565b60200260200101819052508181600281518110616bfb57616bfb618cb5565b6020908102919091010152949350505050565b6020808301518351835192840151600093616c2c9291849190617605565b14159392505050565b60408051808201909152600080825260208201526000616c678460000151856020015185600001518660200151617716565b9050836020015181616c799190618570565b84518590616c88908390618570565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616cbc57508161397e565b6020808301519084015160019114616ce35750815160208481015190840151829020919020145b8015616d1457825184518590616cfa908390618570565b9052508251602085018051616d109083906193e3565b9052505b509192915050565b6040805180820190915260008082526020820152616d3b838383617836565b5092915050565b60606000826000015167ffffffffffffffff811115616d6357616d63618035565b6040519080825280601f01601f191660200182016040528015616d8d576020820181803683370190505b5090506000602082019050616d3b81856020015186600001516178e1565b60606000616db7613d74565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616dd457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616e2f90618e22565b935060ff1681518110616e4457616e44618cb5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616e9591906195a0565b604051602081830303815290604052828280616eb090618e22565b935060ff1681518110616ec557616ec5618cb5565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616f1290618e22565b935060ff1681518110616f2757616f27618cb5565b602002602001018190525082604051602001616f439190618d50565b604051602081830303815290604052828280616f5e90618e22565b935060ff1681518110616f7357616f73618cb5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616fc090618e22565b935060ff1681518110616fd557616fd5618cb5565b6020026020010181905250616fea878461795b565b8282616ff581618e22565b935060ff168151811061700a5761700a618cb5565b6020908102919091010152855151156170b65760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261705c81618e22565b935060ff168151811061707157617071618cb5565b602002602001018190525061708a86600001518461795b565b828261709581618e22565b935060ff16815181106170aa576170aa618cb5565b60200260200101819052505b8560800151156171245760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826170ff81618e22565b935060ff168151811061711457617114618cb5565b602002602001018190525061718a565b841561718a5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261716981618e22565b935060ff168151811061717e5761717e618cb5565b60200260200101819052505b604086015151156172265760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171d481618e22565b935060ff16815181106171e9576171e9618cb5565b6020026020010181905250856040015182828061720590618e22565b935060ff168151811061721a5761721a618cb5565b60200260200101819052505b8560600151156172905760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261726f81618e22565b935060ff168151811061728457617284618cb5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156172ae576172ae618035565b6040519080825280602002602001820160405280156172e157816020015b60608152602001906001900390816172cc5790505b50905060005b8260ff168160ff16101561733a57838160ff168151811061730a5761730a618cb5565b6020026020010151828260ff168151811061732757617327618cb5565b60209081029190910101526001016172e7565b50979650505050505050565b604080518082019091526000808252602082015281518351101561736b57508161397e565b81518351602085015160009291617381916193e3565b61738b9190618570565b602084015190915060019082146173ac575082516020840151819020908220145b80156173c7578351855186906173c3908390618570565b9052505b50929392505050565b60008082600001516173f48560000151866020015186600001518760200151617716565b6173fe91906193e3565b90505b8351602085015161741291906193e3565b8111616d3b5781617422816195e5565b925050826000015161745985602001518361743d9190618570565b86516174499190618570565b8386600001518760200151617716565b61746391906193e3565b9050617401565b6060600061747884846173d0565b6174839060016193e3565b67ffffffffffffffff81111561749b5761749b618035565b6040519080825280602002602001820160405280156174ce57816020015b60608152602001906001900390816174b95790505b50905060005b8151811015615743576174ea6159658686616d1c565b8282815181106174fc576174fc618cb5565b60209081029190910101526001016174d4565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617558577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617584576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106175a257662386f26fc10000830492506010015b6305f5e10083106175ba576305f5e100830492506008015b61271083106175ce57612710830492506004015b606483106175e0576064830492506002015b600a831061397e5760010192915050565b60006175fd838361799b565b159392505050565b60008085841161770c57602084116176b8576000841561765057600161762c866020618570565b6176379060086195ff565b6176429060026196fd565b61764c9190618570565b1990505b835181168561765f89896193e3565b6176699190618570565b805190935082165b8181146176a35787841161768b5787945050505050615374565b8361769581619709565b945050828451169050617671565b6176ad87856193e3565b945050505050615374565b8383206176c58588618570565b6176cf90876193e3565b91505b85821061770a578482208082036176f7576176ed86846193e3565b9350505050615374565b617702600184618570565b9250506176d2565b505b5092949350505050565b6000838186851161782157602085116177d0576000851561776257600161773e876020618570565b6177499060086195ff565b6177549060026196fd565b61775e9190618570565b1990505b845181166000876177738b8b6193e3565b61777d9190618570565b855190915083165b8281146177c2578186106177aa5761779d8b8b6193e3565b9650505050505050615374565b856177b4816195e5565b965050838651169050617785565b859650505050505050615374565b508383206000905b6177e28689618570565b821161781f578583208082036177fe5783945050505050615374565b6178096001856193e3565b9350508180617817906195e5565b9250506177d8565b505b61782b87876193e3565b979650505050505050565b604080518082019091526000808252602082015260006178688560000151866020015186600001518760200151617716565b6020808701805191860191909152519091506178849082618570565b83528451602086015161789791906193e3565b81036178a657600085526178d8565b835183516178b491906193e3565b855186906178c3908390618570565b90525083516178d290826193e3565b60208601525b50909392505050565b6020811061791957815183526178f86020846193e3565b92506179056020836193e3565b9150617912602082618570565b90506178e1565b600019811561794857600161792f836020618570565b61793b906101006196fd565b6179459190618570565b90505b9151835183169219169190911790915250565b606060006179698484613e47565b805160208083015160405193945061798393909101619720565b60405160208183030381529060405291505092915050565b81518151600091908111156179ae575081515b6020808501519084015160005b83811015617a675782518251808214617a37576000196020871015617a16576001846179e8896020618570565b6179f291906193e3565b6179fd9060086195ff565b617a089060026196fd565b617a129190618570565b1990505b8181168382168181039114617a3457975061397e9650505050505050565b50505b617a426020866193e3565b9450617a4f6020856193e3565b93505050602081617a6091906193e3565b90506179bb565b50845186516144f59190619778565b610c9f8061979983390190565b610de08061a43883390190565b610a2c8061b21883390190565b610b3f8061bc4483390190565b6120728061c78383390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617afa617aff565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617afa6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617bb15783516001600160a01b0316835260209384019390920191600101617b8a565b509095945050505050565b60005b83811015617bd7578181015183820152602001617bbf565b50506000910152565b60008151808452617bf8816020860160208601617bbc565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617cee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617cd8848651617be0565b6020958601959094509290920191600101617c9e565b509197505050602094850194929092019150600101617c34565b50929695505050505050565b600081518084526020840193506020830160005b82811015617d685781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617d28565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617dde6040880182617be0565b9050602082015191508681036020880152617df98183617d14565b965050506020938401939190910190600101617d9a565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e72858351617be0565b94506020938401939190910190600101617e38565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617f086040870182617d14565b9550506020938401939190910190600101617eaf565b600060208284031215617f3057600080fd5b81518015158114613a7757600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617ffa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261801b60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061807857607f821691505b602082108103615c40577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f8211156180fb57806000526020600020601f840160051c810160208510156180d85750805b601f840160051c820191505b818110156180f857600081556001016180e4565b50505b505050565b815167ffffffffffffffff81111561811a5761811a618035565b61812e816181288454618064565b846180b1565b6020601f821160018114618162576000831561814a5750848201515b600019600385901b1c1916600184901b1784556180f8565b600084815260208120601f198516915b828110156181925787850151825560209485019460019092019101618172565b50848210156181b05786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156181d157600080fd5b5051919050565b6060815260006181eb6060830186617be0565b602083019490945250901515604090910152919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a060608501526000815461824c81618064565b8060a0880152600182166000811461826b57600181146182a5576182d9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b89010193506182d9565b84600052602060002060005b838110156182d05781548a820160c001526001909101906020016182b1565b890160c0019450505b50505060038401546080860152809250505092915050565b60c08152600061830460c0830189617be0565b62ffffff881660208401526001600160a01b038716604084015282810360608401526183308187617be0565b905060ff8516608084015282810360a084015261834d8185618202565b9998505050505050505050565b6001600160a01b0384168152826020820152606060408201526000615c266060830184617be0565b60c08152600061839560c0830189617be0565b8760208401526001600160a01b038716604084015282810360608401526183bc8187617be0565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a0604082015260006183ff60a0830186617be0565b6060830194909452509015156080909101529392505050565b8281526040602082015260006153746040830184617be0565b6001600160a01b03831681526040602082015260006153746040830184617be0565b6040516060810167ffffffffffffffff8111828210171561847657618476618035565b60405290565b60008067ffffffffffffffff84111561849757618497618035565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156184c6576184c6618035565b6040528381529050808284018510156184de57600080fd5b615743846020830185617bbc565b600082601f8301126184fd57600080fd5b613a778383516020850161847c565b60006020828403121561851e57600080fd5b815167ffffffffffffffff81111561853557600080fd5b61397a848285016184ec565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561397e5761397e618541565b6101008152600061859861010083018b617be0565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a08401526185cb8187617be0565b90508460c084015282810360e0840152613c6a8185618202565b60c0815260006185f860c0830189617be0565b8760208401526001600160a01b0387166040840152828103606084015261861f8187617be0565b905084608084015282810360a084015261834d8185618202565b60808152600061864c6080830187617be0565b828103602084015261865e8187617be0565b9050846040840152828103606084015261782b8185618202565b60a08152600061868b60a0830188617be0565b6001600160a01b038716602084015282810360408401526186ac8187617be0565b905084606084015282810360808401526186c68185618202565b98975050505050505050565b60a0815260006186e560a0830188617be0565b6001600160a01b038716602084015282810360408401526187068187617be0565b905060ff8516606084015282810360808401526186c68185618202565b60a08152600061873660a0830188617be0565b6001600160a01b038716602084015282810360408401526187578187617be0565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516187a981601a850160208801617bbc565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516187e681601c840160208801617bbc565b01601c01949350505050565b602081526000613a776020830184617be0565b60006020828403121561881757600080fd5b81516001600160a01b0381168114613a7757600080fd5b60008351618840818460208801617bbc565b835190830190618854818360208801617bbc565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161889581601a850160208801617bbc565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516188d2816033840160208801617bbc565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a776080830184617be0565b60006020828403121561896157600080fd5b815167ffffffffffffffff81111561897857600080fd5b8201601f8101841361898957600080fd5b61397a8482516020840161847c565b600085516189aa818460208a01617bbc565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516189e4816001840160208a01617bbc565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618a22816002840160208901617bbc565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618a64816002840160208801617bbc565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618aaf6040830184617be0565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618b2681601f850160208701617bbc565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618b936040830184617be0565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618be56040830184617be0565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618c5c816014850160208701617bbc565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618ca36040830185617be0565b8281036020840152613a738185617be0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618d1c816001850160208701617bbc565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618d62818460208701617bbc565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618e1581604b850160208701617bbc565b91909101604b0192915050565b600060ff821660ff8103618e3857618e38618541565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618e9f816029850160208701617bbc565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a776080830184617be0565b600060208284031215618f0557600080fd5b815167ffffffffffffffff811115618f1c57600080fd5b820160608185031215618f2e57600080fd5b618f36618453565b81518060030b8114618f4757600080fd5b8152602082015167ffffffffffffffff811115618f6357600080fd5b618f6f868285016184ec565b602083015250604082015167ffffffffffffffff811115618f8f57600080fd5b618f9b868285016184ec565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619007816021850160208701617bbc565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516191f3816021850160208801617bbc565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161923081602e840160208801617bbc565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618e9f816029850160208701617bbc565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516192f8816022850160208701617bbc565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161933d81600e850160208701617bbc565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561397e5761397e618541565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161942e816018850160208801617bbc565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161946b81601c840160208801617bbc565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619571818460208701617bbc565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516195d881601c850160208701617bbc565b91909101601c0192915050565b600060001982036195f8576195f8618541565b5060010190565b808202811582820484141761397e5761397e618541565b6001815b60018411156196515780850481111561963557619635618541565b600184161561964357908102905b60019390931c92800261961a565b935093915050565b6000826196685750600161397e565b816196755750600061397e565b816001811461968b5760028114619695576196b1565b600191505061397e565b60ff8411156196a6576196a6618541565b50506001821b61397e565b5060208310610133831016604e8410600b84101617156196d4575081810a61397e565b6196e16000198484619616565b80600019048211156196f5576196f5618541565b029392505050565b6000613a778383619659565b60008161971857619718618541565b506000190190565b60008351619732818460208801617bbc565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161976c816001840160208801617bbc565b01600101949350505050565b8181036000831280158383131683831282161715616d3b57616d3b61854156fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610dbc806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c578063660b9de01461008c5780636ed70169146100ac57005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6100a73660046106f9565b6101aa565b3480156100b857600080fd5b5061006a6101e6565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e33826040516101db929190610a78565b60405180910390a150565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61022361036f565b6000610230600285610b57565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610c00565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c8a565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d4d565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d6a565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610ab683610694565b1660408201526000602083013567ffffffffffffffff8116808214610ada57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610b1657600080fd5b830160208101903567ffffffffffffffff811115610b3357600080fd5b803603821315610b4257600080fd5b606060808501526105b660a085018284610a2f565b600082610b8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610bad578181015183820152602001610b95565b50506000910152565b60008151808452610bce816020860160208601610b92565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c3560a0830186610bb6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c80578151865260209586019590910190600101610c62565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610d1d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610d08858351610bb6565b94506020938401939190910190600101610cce565b505050508281036040840152610d338186610c4e565b915050610d44606083018415159052565b95945050505050565b600060208284031215610d5f57600080fd5b81516104f681610840565b60008251610d7c818460208701610b92565b919091019291505056fea2646970667358221220084d92a79207d5024a4431b52d5d0038017908edb40aae1ce1d94a5ec3de914064736f6c634300081a00336080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea264697066735822122037e9f02c9f1066889aa75870351a007a7daaa8277c5c9d435a858ffde2091b1364736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220e349eeb22d87c24401c0e0a954fb5e1774b175448e0269cf8092b426d6a4912864736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220a624b17ead6bcd172bd741c1161f6b8ae9f0161a6cc69edb1d1a9b34e35d3bea64736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e82a8061003c6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b6101326112bf565b60405161013f9190617b70565b60405180910390f35b610150611321565b60405161013f9190617c0c565b610132611463565b6101326114c3565b610128611523565b61017d611da7565b60405161013f9190617d72565b610128611f29565b61019a612761565b60405161013f9190617e10565b6101af612831565b60405161013f9190617e87565b61012861292c565b6101af612f2d565b61019a613028565b6101dc6130f8565b604051901515815260200161013f565b6101286131cc565b610132613905565b601f546101dc9060ff1681565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780548216615678179055602d805490911661432117905560405161026790617a76565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617a76565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190851660248201526044810193909352921660648201526000916104a7916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613965565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c000000000000000000000000000000006020820152602754602554925193909504841660248401529383166044830152909116606482015291925061054a9160840161044a565b602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091178255604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c00000000000093810193909352601f546023546027546025549351610100909304851660248401529084166044830152831660648201529116608482015291925061064e9160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e00000000000000000000000000000000000000000000000000000000179052613965565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179091556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b5050601f546020546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b15801561080957600080fd5b505af115801561081d573d6000803e3d6000fd5b5050601f546021546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b15801561088857600080fd5b505af115801561089c573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108fe57600080fd5b505af1158015610912573d6000803e3d6000fd5b50506022546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561098157600080fd5b505af1158015610995573d6000803e3d6000fd5b50506022546020546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af1158015610a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2d9190617f1e565b50604051610a3a90617a83565b604051809103906000f080158015610a56573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316178155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602354602d5492519085169381019390935292166044820152610b3c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613965565b602880546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602980549092168117909155604051610b8d90617a90565b6001600160a01b039091168152602001604051809103906000f080158015610bb9573d6000803e3d6000fd5b50602a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c6e57600080fd5b505af1158015610c82573d6000803e3d6000fd5b505050506000806000604051610c9790617a9d565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610cd3573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602954604051601293600193600093849391921690610d2990617aaa565b610d3896959493929190617f40565b604051809103906000f080158015610d54573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602b546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610deb57600080fd5b505af1158015610dff573d6000803e3d6000fd5b5050602b546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b5050602c54602d546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f159190617f1e565b50602c54602a546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faa9190617f1e565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561100957600080fd5b505af115801561101d573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561109357600080fd5b505af11580156110a7573d6000803e3d6000fd5b5050602c546029546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af115801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190617f1e565b506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506040805160a0810182526103218082526000602080840182815284860193845285519182019095528181526060840181905260808401919091528251602e80549551151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009096166001600160a01b03928316179590951785559151602f8054919093167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179091559093509091506030906112ad9082618100565b50608082015181600301559050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561131757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112f9575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561145a57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114435783829060005260206000200180546113b690618064565b80601f01602080910402602001604051908101604052809291908181526020018280546113e290618064565b801561142f5780601f106114045761010080835404028352916020019161142f565b820191906000526020600020905b81548152906001019060200180831161141257829003601f168201915b505050505081526020019060010190611397565b505050508152505081526020019060010190611345565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602c54602a805493517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03948516600482015292939092600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa1580156115cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f391906181bf565b6040519091506000907fe04d4f970000000000000000000000000000000000000000000000000000000090611630908890889088906024016181d8565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260245490519193506000926116c9926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602c54611700926207a120916001600160a01b0316908690600190602e906024016182f1565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f048ae42c0000000000000000000000000000000000000000000000000000000017905260295490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916117bd916001600160a01b039190911690600090869060040161835a565b600060405180830381600087803b1580156117d757600080fd5b505af11580156117eb573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561186157600080fd5b505af1158015611875573d6000803e3d6000fd5b5050602a5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261190f926207a120916001600160a01b0316908d908d908d90600401618382565b600060405180830381600087803b15801561192957600080fd5b505af115801561193d573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b1580156119be57600080fd5b505af11580156119d2573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a6557600080fd5b505af1158015611a79573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031685898989604051611ac99594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b6357600080fd5b505af1158015611b77573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611bbc9087908690618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c3657600080fd5b505af1158015611c4a573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd93508892611ca39216908790600401618431565b60006040518083038185885af1158015611cc1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611cea919081019061850c565b50602c54602a546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7991906181bf565b9050611d9d816001611d8e6207a12088618570565b611d989190618570565b613984565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561145a5783829060005260206000209060020201604051806040016040529081600082018054611dfe90618064565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2a90618064565b8015611e775780601f10611e4c57610100808354040283529160200191611e77565b820191906000526020600020905b815481529060010190602001808311611e5a57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611f1157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611ebe5790505b50505050508152505081526020019060010190611dcb565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611fa5908790879087906024016181d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000949094169390931790925260295491517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039093166084820152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561209757600080fd5b505af11580156120ab573d6000803e3d6000fd5b5050602d5460245460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f19818403018152828252602c547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216916207a1209188918491634d8943bb916004808201926020929091908290030181865afa158015612180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a491906181bf565b896001602e6040516121bd989796959493929190618583565b60405180910390a3602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561223757600080fd5b505af115801561224b573d6000803e3d6000fd5b505060295460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063048ae42c915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526122e7926207a120916001600160a01b0316908890600190602e906004016185e5565b600060405180830381600087803b15801561230157600080fd5b505af1158015612315573d6000803e3d6000fd5b5050602c54602d546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a591906181bf565b90506123b881611d98846207a120618570565b601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561243557600080fd5b505af1158015612449573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156124dc57600080fd5b505af11580156124f0573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b0316858989896040516125409594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156125da57600080fd5b505af11580156125ee573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506126339087908790618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156126ad57600080fd5b505af11580156126c1573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd9350889261271a9216908890600401618431565b60006040518083038185885af1158015612738573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611d9d919081019061850c565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561145a5783829060005260206000200180546127a490618064565b80601f01602080910402602001604051908101604052809291908181526020018280546127d090618064565b801561281d5780601f106127f25761010080835404028352916020019161281d565b820191906000526020600020905b81548152906001019060200180831161280057829003601f168201915b505050505081526020019060010190612785565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561145a5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561291457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116128c15790505b50505050508152505081526020019060010190612855565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f9700000000000000000000000000000000000000000000000000000000906129a8908790879087906024016181d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602d5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a7b57600080fd5b505af1158015612a8f573d6000803e3d6000fd5b50506029546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612b2157600080fd5b505af1158015612b35573d6000803e3d6000fd5b5050602c54602d5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf9060340160408051601f1981840301815290829052612bb5918690600190602e90618639565b60405180910390a36029546024546040805160609290921b6bffffffffffffffffffffffff19166020830152805180830360140181526034830191829052602c547f1cb5ea75000000000000000000000000000000000000000000000000000000009092526001600160a01b0393841693631cb5ea7593612c459391909116908690600190602e90603801618678565b600060405180830381600087803b158015612c5f57600080fd5b505af1158015612c73573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612cf457600080fd5b505af1158015612d08573d6000803e3d6000fd5b5050601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612d9e57600080fd5b505af1158015612db2573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612df79085908590618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e7157600080fd5b505af1158015612e85573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd93508692612ede9216908690600401618431565b60006040518083038185885af1158015612efc573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612f25919081019061850c565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561145a5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561301057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612fbd5790505b50505050508152505081526020019060010190612f51565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561145a57838290600052602060002001805461306b90618064565b80601f016020809104026020016040519081016040528092919081815260200182805461309790618064565b80156130e45780601f106130b9576101008083540402835291602001916130e4565b820191906000526020600020905b8154815290600101906020018083116130c757829003601f168201915b50505050508152602001906001019061304c565b60085460009060ff1615613110575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156131a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c591906181bf565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090613248908790879087906024016181d8565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260245490519193506000926132e1926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602c54613315926001600160a01b03909116908590600190602e906024016186d2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1cb5ea750000000000000000000000000000000000000000000000000000000017905260295490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916133d2916001600160a01b039190911690600090869060040161835a565b600060405180830381600087803b1580156133ec57600080fd5b505af1158015613400573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561347657600080fd5b505af115801561348a573d6000803e3d6000fd5b5050602a5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637a34d8bb915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352613521926001600160a01b03909116908b908b908b90600401618723565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b1580156135d057600080fd5b505af11580156135e4573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561367757600080fd5b505af115801561368b573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b0316848888886040516136db9594939291906183d7565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561377557600080fd5b505af1158015613789573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506137ce9086908690618418565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561384857600080fd5b505af115801561385c573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd935087926138b59216908790600401618431565b60006040518083038185885af11580156138d3573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526138fc919081019061850c565b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015611317576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112f9575050505050905090565b600061396f617ab7565b61397a848483613a03565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156139ef57600080fd5b505afa158015612f25573d6000803e3d6000fd5b600080613a108584613a7e565b9050613a736040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613a5e929190618431565b60405160208183030381529060405285613a8a565b9150505b9392505050565b6000613a778383613ab8565b60c08101515160009015613aae57613aa784848460c00151613ad3565b9050613a77565b613aa78484613c79565b6000613ac48383613d64565b613a7783836020015184613a8a565b600080613ade613d74565b90506000613aec8683613e47565b90506000613b0382606001518360200151856142ed565b90506000613b13838389896144ff565b90506000613b208261537c565b602081015181519192509060030b15613b9357898260400151604051602001613b4a929190618771565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b8a916004016187f2565b60405180910390fd5b6000613bd66040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161554b565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613c299084906004016187f2565b602060405180830381865afa158015613c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6a9190618805565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613cce9087906004016187f2565b600060405180830381865afa158015613ceb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d13919081019061850c565b90506000613d418285604051602001613d2d92919061882e565b60405160208183030381529060405261574b565b90506001600160a01b03811661397a578484604051602001613b4a92919061885d565b613d708282600061575e565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613dfb908490600401618908565b600060405180830381865afa158015613e18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e40919081019061894f565b9250505090565b613e796040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613ec46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613ecd85615861565b60208201526000613edd86615c46565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613f1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f47919081019061894f565b86838560200151604051602001613f619493929190618998565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613fb99085906004016187f2565b600060405180830381865afa158015613fd6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ffe919081019061894f565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614046908490600401618a9c565b602060405180830381865afa158015614063573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140879190617f1e565b61409c5781604051602001613b4a9190618aee565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906140e1908490600401618b80565b600060405180830381865afa1580156140fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614126919081019061894f565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061416d908490600401618bd2565b602060405180830381865afa15801561418a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ae9190617f1e565b15614243576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906141f8908490600401618bd2565b600060405180830381865afa158015614215573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261423d919081019061894f565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016142689190618c24565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614294929190618c90565b600060405180830381865afa1580156142b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142d9919081019061894f565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816143095790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061436957614369618cb5565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106143bd576143bd618cb5565b6020026020010181905250846040516020016143d99190618ce4565b604051602081830303815290604052816002815181106143fb576143fb618cb5565b6020026020010181905250826040516020016144179190618d50565b6040516020818303038152906040528160038151811061443957614439618cb5565b6020026020010181905250600061444f8261537c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144e09060408051808201825260008082526020918201528151808301909252845182528085019082015290615ec9565b6144f55785604051602001613b4a9190618d91565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561454f565b511590565b6146c35782602001511561460b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b8a565b8260c00151156146c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b8a565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816146dc57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061473790618e22565b935060ff168151811061474c5761474c618cb5565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161479d9190618e41565b6040516020818303038152906040528282806147b890618e22565b935060ff16815181106147cd576147cd618cb5565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061481a90618e22565b935060ff168151811061482f5761482f618cb5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061487c90618e22565b935060ff168151811061489157614891618cb5565b602002602001018190525087602001518282806148ad90618e22565b935060ff16815181106148c2576148c2618cb5565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061490f90618e22565b935060ff168151811061492457614924618cb5565b60209081029190910101528751828261493c81618e22565b935060ff168151811061495157614951618cb5565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061499e90618e22565b935060ff16815181106149b3576149b3618cb5565b60200260200101819052506149c746615f2a565b82826149d281618e22565b935060ff16815181106149e7576149e7618cb5565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614a3490618e22565b935060ff1681518110614a4957614a49618cb5565b602002602001018190525086828280614a6190618e22565b935060ff1681518110614a7657614a76618cb5565b6020908102919091010152855115614b9d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614ac781618e22565b935060ff1681518110614adc57614adc618cb5565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614b2c9089906004016187f2565b600060405180830381865afa158015614b49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b71919081019061894f565b8282614b7c81618e22565b935060ff1681518110614b9157614b91618cb5565b60200260200101819052505b846020015115614c6d5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614be681618e22565b935060ff1681518110614bfb57614bfb618cb5565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614c4890618e22565b935060ff1681518110614c5d57614c5d618cb5565b6020026020010181905250614e34565b614ca561454a8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614d385760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614ce881618e22565b935060ff1681518110614cfd57614cfd618cb5565b60200260200101819052508460a00151604051602001614d1d9190618ce4565b604051602081830303815290604052828280614c4890618e22565b8460c00151158015614d7b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d7990511590565b155b15614e345760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614dbf81618e22565b935060ff1681518110614dd457614dd4618cb5565b6020026020010181905250614de888615fca565b604051602001614df89190618ce4565b604051602081830303815290604052828280614e1390618e22565b935060ff1681518110614e2857614e28618cb5565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e6890511590565b614efd5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614eab81618e22565b935060ff1681518110614ec057614ec0618cb5565b60200260200101819052508460400151828280614edc90618e22565b935060ff1681518110614ef157614ef1618cb5565b60200260200101819052505b60608501511561501e5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614f4681618e22565b935060ff1681518110614f5b57614f5b618cb5565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614fca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ff2919081019061894f565b8282614ffd81618e22565b935060ff168151811061501257615012618cb5565b60200260200101819052505b60e085015151156150c55760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261506881618e22565b935060ff168151811061507d5761507d618cb5565b60200260200101819052506150998560e0015160000151615f2a565b82826150a481618e22565b935060ff16815181106150b9576150b9618cb5565b60200260200101819052505b60e0850151602001511561516f5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261511281618e22565b935060ff168151811061512757615127618cb5565b60200260200101819052506151438560e0015160200151615f2a565b828261514e81618e22565b935060ff168151811061516357615163618cb5565b60200260200101819052505b60e085015160400151156152195760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826151bc81618e22565b935060ff16815181106151d1576151d1618cb5565b60200260200101819052506151ed8560e0015160400151615f2a565b82826151f881618e22565b935060ff168151811061520d5761520d618cb5565b60200260200101819052505b60e085015160600151156152c35760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261526681618e22565b935060ff168151811061527b5761527b618cb5565b60200260200101819052506152978560e0015160600151615f2a565b82826152a281618e22565b935060ff16815181106152b7576152b7618cb5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156152e1576152e1618035565b60405190808252806020026020018201604052801561531457816020015b60608152602001906001900390816152ff5790505b50905060005b8260ff168160ff16101561536d57838160ff168151811061533d5761533d618cb5565b6020026020010151828260ff168151811061535a5761535a618cb5565b602090810291909101015260010161531a565b5093505050505b949350505050565b6153a36040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161542991869101618eac565b600060405180830381865afa158015615446573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261546e919081019061894f565b9050600061547c8683616ab9565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016154ac9190617e10565b6000604051808303816000875af11580156154cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154f39190810190618ef3565b805190915060030b1580159061550c5750602081015151155b801561551b5750604081015151155b156144f5578160008151811061553357615533618cb5565b6020026020010151604051602001613b4a9190618fa9565b606060006155808560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155b79082905b90616c0e565b156157145760006156348261562e846156286155fa8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616c35565b90616c97565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615698908290616c0e565b1561570257604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526156ff905b8290616d1c565b90505b61570b81616d42565b92505050613a77565b821561572d578484604051602001613b4a929190619195565b5050604080516020810190915260008152613a77565b509392505050565b6000808251602084016000f09392505050565b8160a001511561576d57505050565b600061577a848484616dab565b905060006157878261537c565b602081015181519192509060030b1580156158235750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615823906040805180820182526000808252602091820152815180830190925284518252808501908201526155b1565b1561583057505050505050565b60408201515115615850578160400151604051602001613b4a919061923c565b80604051602001613b4a919061929a565b606060006158968360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506158fb905b8290615ec9565b1561596a57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a7790615965908390617346565b616d42565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159cc905b82906173d0565b600103615a9957604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a32906156f8565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a7790615965905b8390616d1c565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615af8906158f4565b15615c2f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b6090839061746a565b905060008160018351615b739190618570565b81518110615b8357615b83618cb5565b60200260200101519050615c26615965615bf96040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617346565b95945050505050565b82604051602001613b4a9190619305565b50919050565b60606000615c7b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615cdd906158f4565b15615ceb57613a7781616d42565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d4a906159c5565b600103615db457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a779061596590615a92565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e13906158f4565b15615c2f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e7b90839061746a565b9050600181511115615eb7578060028251615e969190618570565b81518110615ea657615ea6618cb5565b602002602001015192505050919050565b5082604051602001613b4a9190619305565b805182516000911115615ede5750600061397e565b81518351602085015160009291615ef4916193e3565b615efe9190618570565b905082602001518103615f1557600191505061397e565b82516020840151819020912014905092915050565b60606000615f378361750f565b600101905060008167ffffffffffffffff811115615f5757615f57618035565b6040519080825280601f01601f191660200182016040528015615f81576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f8b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616056905b82906175f1565b1561609657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160f59061604f565b1561613557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161949061604f565b156161d457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162339061604f565b806162985750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162989061604f565b156162d857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163379061604f565b8061639c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261639c9061604f565b156163dc57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261643b9061604f565b806164a05750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164a09061604f565b156164e057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653f9061604f565b806165a45750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165a49061604f565b156165e457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166439061604f565b1561668357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166e29061604f565b1561672257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167819061604f565b156167c157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168209061604f565b1561686057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168bf9061604f565b156168ff57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261695e9061604f565b806169c35750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169c39061604f565b15616a0357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a629061604f565b15616aa257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613b4a92906020016193f6565b60608060005b8451811015616b445781858281518110616adb57616adb618cb5565b6020026020010151604051602001616af492919061882e565b604051602081830303815290604052915060018551616b139190618570565b8114616b3c5781604051602001616b2a919061955f565b60405160208183030381529060405291505b600101616abf565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616b5d5790505090508381600081518110616b8857616b88618cb5565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616bdc57616bdc618cb5565b60200260200101819052508181600281518110616bfb57616bfb618cb5565b6020908102919091010152949350505050565b6020808301518351835192840151600093616c2c9291849190617605565b14159392505050565b60408051808201909152600080825260208201526000616c678460000151856020015185600001518660200151617716565b9050836020015181616c799190618570565b84518590616c88908390618570565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616cbc57508161397e565b6020808301519084015160019114616ce35750815160208481015190840151829020919020145b8015616d1457825184518590616cfa908390618570565b9052508251602085018051616d109083906193e3565b9052505b509192915050565b6040805180820190915260008082526020820152616d3b838383617836565b5092915050565b60606000826000015167ffffffffffffffff811115616d6357616d63618035565b6040519080825280601f01601f191660200182016040528015616d8d576020820181803683370190505b5090506000602082019050616d3b81856020015186600001516178e1565b60606000616db7613d74565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616dd457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616e2f90618e22565b935060ff1681518110616e4457616e44618cb5565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616e9591906195a0565b604051602081830303815290604052828280616eb090618e22565b935060ff1681518110616ec557616ec5618cb5565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616f1290618e22565b935060ff1681518110616f2757616f27618cb5565b602002602001018190525082604051602001616f439190618d50565b604051602081830303815290604052828280616f5e90618e22565b935060ff1681518110616f7357616f73618cb5565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616fc090618e22565b935060ff1681518110616fd557616fd5618cb5565b6020026020010181905250616fea878461795b565b8282616ff581618e22565b935060ff168151811061700a5761700a618cb5565b6020908102919091010152855151156170b65760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261705c81618e22565b935060ff168151811061707157617071618cb5565b602002602001018190525061708a86600001518461795b565b828261709581618e22565b935060ff16815181106170aa576170aa618cb5565b60200260200101819052505b8560800151156171245760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826170ff81618e22565b935060ff168151811061711457617114618cb5565b602002602001018190525061718a565b841561718a5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261716981618e22565b935060ff168151811061717e5761717e618cb5565b60200260200101819052505b604086015151156172265760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171d481618e22565b935060ff16815181106171e9576171e9618cb5565b6020026020010181905250856040015182828061720590618e22565b935060ff168151811061721a5761721a618cb5565b60200260200101819052505b8560600151156172905760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261726f81618e22565b935060ff168151811061728457617284618cb5565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156172ae576172ae618035565b6040519080825280602002602001820160405280156172e157816020015b60608152602001906001900390816172cc5790505b50905060005b8260ff168160ff16101561733a57838160ff168151811061730a5761730a618cb5565b6020026020010151828260ff168151811061732757617327618cb5565b60209081029190910101526001016172e7565b50979650505050505050565b604080518082019091526000808252602082015281518351101561736b57508161397e565b81518351602085015160009291617381916193e3565b61738b9190618570565b602084015190915060019082146173ac575082516020840151819020908220145b80156173c7578351855186906173c3908390618570565b9052505b50929392505050565b60008082600001516173f48560000151866020015186600001518760200151617716565b6173fe91906193e3565b90505b8351602085015161741291906193e3565b8111616d3b5781617422816195e5565b925050826000015161745985602001518361743d9190618570565b86516174499190618570565b8386600001518760200151617716565b61746391906193e3565b9050617401565b6060600061747884846173d0565b6174839060016193e3565b67ffffffffffffffff81111561749b5761749b618035565b6040519080825280602002602001820160405280156174ce57816020015b60608152602001906001900390816174b95790505b50905060005b8151811015615743576174ea6159658686616d1c565b8282815181106174fc576174fc618cb5565b60209081029190910101526001016174d4565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617558577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617584576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106175a257662386f26fc10000830492506010015b6305f5e10083106175ba576305f5e100830492506008015b61271083106175ce57612710830492506004015b606483106175e0576064830492506002015b600a831061397e5760010192915050565b60006175fd838361799b565b159392505050565b60008085841161770c57602084116176b8576000841561765057600161762c866020618570565b6176379060086195ff565b6176429060026196fd565b61764c9190618570565b1990505b835181168561765f89896193e3565b6176699190618570565b805190935082165b8181146176a35787841161768b5787945050505050615374565b8361769581619709565b945050828451169050617671565b6176ad87856193e3565b945050505050615374565b8383206176c58588618570565b6176cf90876193e3565b91505b85821061770a578482208082036176f7576176ed86846193e3565b9350505050615374565b617702600184618570565b9250506176d2565b505b5092949350505050565b6000838186851161782157602085116177d0576000851561776257600161773e876020618570565b6177499060086195ff565b6177549060026196fd565b61775e9190618570565b1990505b845181166000876177738b8b6193e3565b61777d9190618570565b855190915083165b8281146177c2578186106177aa5761779d8b8b6193e3565b9650505050505050615374565b856177b4816195e5565b965050838651169050617785565b859650505050505050615374565b508383206000905b6177e28689618570565b821161781f578583208082036177fe5783945050505050615374565b6178096001856193e3565b9350508180617817906195e5565b9250506177d8565b505b61782b87876193e3565b979650505050505050565b604080518082019091526000808252602082015260006178688560000151866020015186600001518760200151617716565b6020808701805191860191909152519091506178849082618570565b83528451602086015161789791906193e3565b81036178a657600085526178d8565b835183516178b491906193e3565b855186906178c3908390618570565b90525083516178d290826193e3565b60208601525b50909392505050565b6020811061791957815183526178f86020846193e3565b92506179056020836193e3565b9150617912602082618570565b90506178e1565b600019811561794857600161792f836020618570565b61793b906101006196fd565b6179459190618570565b90505b9151835183169219169190911790915250565b606060006179698484613e47565b805160208083015160405193945061798393909101619720565b60405160208183030381529060405291505092915050565b81518151600091908111156179ae575081515b6020808501519084015160005b83811015617a675782518251808214617a37576000196020871015617a16576001846179e8896020618570565b6179f291906193e3565b6179fd9060086195ff565b617a089060026196fd565b617a129190618570565b1990505b8181168382168181039114617a3457975061397e9650505050505050565b50505b617a426020866193e3565b9450617a4f6020856193e3565b93505050602081617a6091906193e3565b90506179bb565b50845186516144f59190619778565b610c9f8061979983390190565b610de08061a43883390190565b610a2c8061b21883390190565b610b3f8061bc4483390190565b6120728061c78383390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617afa617aff565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617afa6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617bb15783516001600160a01b0316835260209384019390920191600101617b8a565b509095945050505050565b60005b83811015617bd7578181015183820152602001617bbf565b50506000910152565b60008151808452617bf8816020860160208601617bbc565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617cee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617cd8848651617be0565b6020958601959094509290920191600101617c9e565b509197505050602094850194929092019150600101617c34565b50929695505050505050565b600081518084526020840193506020830160005b82811015617d685781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617d28565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617dde6040880182617be0565b9050602082015191508681036020880152617df98183617d14565b965050506020938401939190910190600101617d9a565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e72858351617be0565b94506020938401939190910190600101617e38565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d08577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617f086040870182617d14565b9550506020938401939190910190600101617eaf565b600060208284031215617f3057600080fd5b81518015158114613a7757600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617ffa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261801b60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061807857607f821691505b602082108103615c40577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f8211156180fb57806000526020600020601f840160051c810160208510156180d85750805b601f840160051c820191505b818110156180f857600081556001016180e4565b50505b505050565b815167ffffffffffffffff81111561811a5761811a618035565b61812e816181288454618064565b846180b1565b6020601f821160018114618162576000831561814a5750848201515b600019600385901b1c1916600184901b1784556180f8565b600084815260208120601f198516915b828110156181925787850151825560209485019460019092019101618172565b50848210156181b05786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156181d157600080fd5b5051919050565b6060815260006181eb6060830186617be0565b602083019490945250901515604090910152919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a060608501526000815461824c81618064565b8060a0880152600182166000811461826b57600181146182a5576182d9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b89010193506182d9565b84600052602060002060005b838110156182d05781548a820160c001526001909101906020016182b1565b890160c0019450505b50505060038401546080860152809250505092915050565b60c08152600061830460c0830189617be0565b62ffffff881660208401526001600160a01b038716604084015282810360608401526183308187617be0565b905060ff8516608084015282810360a084015261834d8185618202565b9998505050505050505050565b6001600160a01b0384168152826020820152606060408201526000615c266060830184617be0565b60c08152600061839560c0830189617be0565b8760208401526001600160a01b038716604084015282810360608401526183bc8187617be0565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a0604082015260006183ff60a0830186617be0565b6060830194909452509015156080909101529392505050565b8281526040602082015260006153746040830184617be0565b6001600160a01b03831681526040602082015260006153746040830184617be0565b6040516060810167ffffffffffffffff8111828210171561847657618476618035565b60405290565b60008067ffffffffffffffff84111561849757618497618035565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156184c6576184c6618035565b6040528381529050808284018510156184de57600080fd5b615743846020830185617bbc565b600082601f8301126184fd57600080fd5b613a778383516020850161847c565b60006020828403121561851e57600080fd5b815167ffffffffffffffff81111561853557600080fd5b61397a848285016184ec565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561397e5761397e618541565b6101008152600061859861010083018b617be0565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a08401526185cb8187617be0565b90508460c084015282810360e0840152613c6a8185618202565b60c0815260006185f860c0830189617be0565b8760208401526001600160a01b0387166040840152828103606084015261861f8187617be0565b905084608084015282810360a084015261834d8185618202565b60808152600061864c6080830187617be0565b828103602084015261865e8187617be0565b9050846040840152828103606084015261782b8185618202565b60a08152600061868b60a0830188617be0565b6001600160a01b038716602084015282810360408401526186ac8187617be0565b905084606084015282810360808401526186c68185618202565b98975050505050505050565b60a0815260006186e560a0830188617be0565b6001600160a01b038716602084015282810360408401526187068187617be0565b905060ff8516606084015282810360808401526186c68185618202565b60a08152600061873660a0830188617be0565b6001600160a01b038716602084015282810360408401526187578187617be0565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516187a981601a850160208801617bbc565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516187e681601c840160208801617bbc565b01601c01949350505050565b602081526000613a776020830184617be0565b60006020828403121561881757600080fd5b81516001600160a01b0381168114613a7757600080fd5b60008351618840818460208801617bbc565b835190830190618854818360208801617bbc565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161889581601a850160208801617bbc565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516188d2816033840160208801617bbc565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a776080830184617be0565b60006020828403121561896157600080fd5b815167ffffffffffffffff81111561897857600080fd5b8201601f8101841361898957600080fd5b61397a8482516020840161847c565b600085516189aa818460208a01617bbc565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516189e4816001840160208a01617bbc565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618a22816002840160208901617bbc565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618a64816002840160208801617bbc565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618aaf6040830184617be0565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618b2681601f850160208701617bbc565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618b936040830184617be0565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618be56040830184617be0565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618c5c816014850160208701617bbc565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618ca36040830185617be0565b8281036020840152613a738185617be0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618d1c816001850160208701617bbc565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618d62818460208701617bbc565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618e1581604b850160208701617bbc565b91909101604b0192915050565b600060ff821660ff8103618e3857618e38618541565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618e9f816029850160208701617bbc565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a776080830184617be0565b600060208284031215618f0557600080fd5b815167ffffffffffffffff811115618f1c57600080fd5b820160608185031215618f2e57600080fd5b618f36618453565b81518060030b8114618f4757600080fd5b8152602082015167ffffffffffffffff811115618f6357600080fd5b618f6f868285016184ec565b602083015250604082015167ffffffffffffffff811115618f8f57600080fd5b618f9b868285016184ec565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619007816021850160208701617bbc565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516191f3816021850160208801617bbc565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161923081602e840160208801617bbc565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618e9f816029850160208701617bbc565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516192f8816022850160208701617bbc565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161933d81600e850160208701617bbc565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561397e5761397e618541565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161942e816018850160208801617bbc565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161946b81601c840160208801617bbc565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619571818460208701617bbc565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516195d881601c850160208701617bbc565b91909101601c0192915050565b600060001982036195f8576195f8618541565b5060010190565b808202811582820484141761397e5761397e618541565b6001815b60018411156196515780850481111561963557619635618541565b600184161561964357908102905b60019390931c92800261961a565b935093915050565b6000826196685750600161397e565b816196755750600061397e565b816001811461968b5760028114619695576196b1565b600191505061397e565b60ff8411156196a6576196a6618541565b50506001821b61397e565b5060208310610133831016604e8410600b84101617156196d4575081810a61397e565b6196e16000198484619616565b80600019048211156196f5576196f5618541565b029392505050565b6000613a778383619659565b60008161971857619718618541565b506000190190565b60008351619732818460208801617bbc565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161976c816001840160208801617bbc565b01600101949350505050565b8181036000831280158383131683831282161715616d3b57616d3b61854156fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610dbc806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c578063660b9de01461008c5780636ed70169146100ac57005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106bd565b610114565b34801561009857600080fd5b5061006a6100a73660046106f9565b6101aa565b3480156100b857600080fd5b5061006a6101e6565b3480156100cd57600080fd5b5061006a6100dc3660046106bd565b61021b565b61006a6100ef366004610859565b6102f6565b34801561010057600080fd5b5061006a61010f366004610945565b61033a565b61011c61036f565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b2565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e33826040516101db929190610a78565b60405180910390a150565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61022361036f565b6000610230600285610b57565b90508060000361026c576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028e73ffffffffffffffffffffffffffffffffffffffff84163384846103b2565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa333485858560405161032d959493929190610c00565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1463384848460405161032d9493929190610c8a565b6002600054036103ab576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044790859061044d565b50505050565b600061046f73ffffffffffffffffffffffffffffffffffffffff8416836104e8565b905080516000141580156104945750808060200190518101906104929190610d4d565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f6838360006104fd565b9392505050565b60608147101561053b576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104df565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105649190610d6a565b60006040518083038185875af1925050503d80600081146105a1576040519150601f19603f3d011682016040523d82523d6000602084013e6105a6565b606091505b50915091506105b68683836105c0565b9695505050505050565b6060826105d5576105d08261064f565b6104f6565b81511580156105f9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610648576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104df565b50806104f6565b80511561065f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b857600080fd5b919050565b6000806000606084860312156106d257600080fd5b833592506106e260208501610694565b91506106f060408501610694565b90509250925092565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b8201606081850312156104f657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107aa576107aa610734565b604052919050565b600082601f8301126107c357600080fd5b813567ffffffffffffffff8111156107dd576107dd610734565b61080e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610763565b81815284602083860101111561082357600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069157600080fd5b80356106b881610840565b60008060006060848603121561086e57600080fd5b833567ffffffffffffffff81111561088557600080fd5b610891868287016107b2565b9350506020840135915060408401356108a981610840565b809150509250925092565b600067ffffffffffffffff8211156108ce576108ce610734565b5060051b60200190565b600082601f8301126108e957600080fd5b81356108fc6108f7826108b4565b610763565b8082825260208201915060208360051b86010192508583111561091e57600080fd5b602085015b8381101561093b578035835260209283019201610923565b5095945050505050565b60008060006060848603121561095a57600080fd5b833567ffffffffffffffff81111561097157600080fd5b8401601f8101861361098257600080fd5b80356109906108f7826108b4565b8082825260208201915060208360051b8501019250888311156109b257600080fd5b602084015b838110156109f457803567ffffffffffffffff8111156109d657600080fd5b6109e58b6020838901016107b2565b845250602092830192016109b7565b509550505050602084013567ffffffffffffffff811115610a1457600080fd5b610a20868287016108d8565b9250506106f06040850161084e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610ab683610694565b1660408201526000602083013567ffffffffffffffff8116808214610ada57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610b1657600080fd5b830160208101903567ffffffffffffffff811115610b3357600080fd5b803603821315610b4257600080fd5b606060808501526105b660a085018284610a2f565b600082610b8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610bad578181015183820152602001610b95565b50506000910152565b60008151808452610bce816020860160208601610b92565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610c3560a0830186610bb6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610c80578151865260209586019590910190600101610c62565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610d1d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610d08858351610bb6565b94506020938401939190910190600101610cce565b505050508281036040840152610d338186610c4e565b915050610d44606083018415159052565b95945050505050565b600060208284031215610d5f57600080fd5b81516104f681610840565b60008251610d7c818460208701610b92565b919091019291505056fea2646970667358221220084d92a79207d5024a4431b52d5d0038017908edb40aae1ce1d94a5ec3de914064736f6c634300081a00336080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220739c9c1e00fa8ae113982bcbaea09686e9af47d7f82902bcf8b8e278cd41157564736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea26469706673582212202cd1363cf0f0a33af114eb5bdaaf7ba04572b0560a3882c5c6aecd5f02fe50f364736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a26469706673582212208f504639fc9cad7cdebc6ae1853cafaa333d88668e60819005b542179d2d9f6264736f6c634300081a0033", } // GatewayEVMZEVMTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.sol/gatewayzevm.go b/v2/pkg/gatewayzevm.sol/gatewayzevm.go index 23b601156..39ee1fcee 100644 --- a/v2/pkg/gatewayzevm.sol/gatewayzevm.go +++ b/v2/pkg/gatewayzevm.sol/gatewayzevm.go @@ -55,7 +55,7 @@ type RevertOptions struct { // GatewayZEVMMetaData contains all meta data concerning the GatewayZEVM contract. var GatewayZEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_MESSAGE_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallOnRevertNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZETANotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b0380861692635bcfd6169261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b03841690635bcfd6169061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea26469706673582212205b760c9072c4b8b5ebc94339927027ff9e67d3127c5bf7f24bb821ffbe32443064736f6c634300081a0033", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b0380861692635bcfd6169261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b03841690635bcfd6169061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea264697066735822122007dc2fc270cd9173cd51e6e82a40e69a3e4c880140d29f35b36663598c05686864736f6c634300081a0033", } // GatewayZEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go index 5870a7671..ca78382bb 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go @@ -59,7 +59,7 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMInboundTestMetaData contains all meta data concerning the GatewayZEVMInboundTest contract. var GatewayZEVMInboundTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfGasLimitIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfMessageSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfGasLimitIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfMessageSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfMessageSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIsAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f4968061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c806385226c811161012a578063ba9adeef116100bd578063dde7e9671161008c578063fa7626d411610071578063fa7626d41461037f578063fbc611c81461038c578063fdad0ad01461039457600080fd5b8063dde7e9671461036f578063e20c9f711461037757600080fd5b8063ba9adeef1461034f578063bed3e81314610357578063ceccfab31461035f578063d5a446891461036757600080fd5b8063b5508aa9116100f9578063b5508aa91461031f578063b7f0583614610327578063ba414fa61461032f578063ba800c911461034757600080fd5b806385226c81146102e5578063916a17c6146102fa578063ae9da0881461030f578063b0464fdc1461031757600080fd5b806339cbb457116101bd5780635006fd801161018c5780636221b509116101715780636221b509146102c057806366d9a9a0146102c857806383ababa9146102dd57600080fd5b80635006fd80146102b05780635d72228f146102b857600080fd5b806339cbb457146102905780633e5e3c23146102985780633f7286f4146102a05780634ffab9de146102a857600080fd5b806320dee15f116101f957806320dee15f14610263578063264b524c1461026b5780632ade38801461027357806336431b3f1461028857600080fd5b80630a9254e41461022b5780631238212c146102355780631e63d2b91461023d5780631ed7831c14610245575b600080fd5b61023361039c565b005b610233610eec565b6102336112c1565b61024d6116d4565b60405161025a9190619611565b60405180910390f35b610233611736565b610233611b13565b61027b611d4e565b60405161025a91906196ad565b610233611e90565b61023361204f565b61024d6121d9565b61024d612239565b610233612299565b610233612536565b6102336129f7565b610233612d49565b6102d0612f6e565b60405161025a9190619813565b6102336130f0565b6102ed6131ed565b60405161025a91906198b1565b6103026132bd565b60405161025a9190619928565b6102336133b8565b610302613560565b6102ed61365b565b61023361372b565b61033761390a565b604051901515815260200161025a565b6102336139de565b610233613b0d565b610233613cb6565b610233613e5f565b6102336141c4565b610233614461565b61024d6148a0565b601f546103379060ff1681565b610233614900565b610233614c7c565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680549091166112341790556040516103e290619524565b604051809103906000f0801580156103fe573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260255491516024810193909352921660448201526104e2919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614e0b565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa1580156105a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c891906199bf565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161060c90619531565b604051809103906000f080158015610628573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b1580156106c457600080fd5b505af11580156106d8573d6000803e3d6000fd5b5050505060008060006040516106ed9061953e565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610729573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560205460405160129360019384936000939192169061077f9061954b565b61078e969594939291906199e8565b604051809103906000f0801580156107aa573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b1580156108bf57600080fd5b505af11580156108d3573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561095357600080fd5b505af1158015610967573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156109bc57600080fd5b505af11580156109d0573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190619add565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afd9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610be657600080fd5b505af1158015610bfa573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190619add565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ce457600080fd5b505af1158015610cf8573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d909190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b50506040805160a0810182526103218082526000602080840182815284860193845285519182019095528181526060840181905260808401919091528251602880549551151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009096166001600160a01b0392831617959095178555915160298054919093167fffffffffffffffffffffffff00000000000000000000000000000000000000009190911617909155909350909150602a90610edc9082619bc2565b5060808201518160030155905050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f619190619c81565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110809190619add565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561115c57600080fd5b505af1158015611170573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261120a9288916001600160a01b0316908790600190602890600401619d89565b600060405180830381600087803b15801561122457600080fd5b505af1158015611238573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af9190619c81565b90506112bb8382614e2a565b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113369190619c81565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039092166084820152919250908190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561144157600080fd5b505af1158015611455573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216918b9189918491634d8943bb916004808201926020929091908290030181865afa158015611527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154b9190619c81565b8a896028604051611563989796959493929190619dea565b60405180910390a3602080546026546040516001600160a01b039283169363048ae42c936115ab9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611607928a916001600160a01b03169089908890602890600401619d89565b600060405180830381600087803b15801561162157600080fd5b505af1158015611635573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac9190619c81565b90506116cc836116bc8888619e7b565b6116c69190619e7b565b82614e2a565b505050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561172c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161170e575b5050505050905090565b601f54604080518082018252601a81527f476174657761795a45564d55706772616465546573742e736f6c00000000000060208083019190915282519081019092526000825260255461179b936001600160a01b036101009091048116939116614ea9565b601f546021546025546040516370a0823160e01b81526001600160a01b03918216600482015261010090930481169260019260009216906370a0823190602401602060405180830381865afa1580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190619c81565b6040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0385166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156118a957600080fd5b505af11580156118bd573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d355789060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b49190619c81565b600060286040516119cb9796959493929190619e8e565b60405180910390a360265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03841690637c0dcb5f9060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611a5f9287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015611a7957600080fd5b505af1158015611a8d573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b049190619c81565b90506112bb6116c68484619e7b565b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216926397d340f5926004808401938290030181865afa158015611b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b959190619c81565b611ba0906001619f36565b67ffffffffffffffff811115611bb857611bb8619aff565b6040519080825280601f01601f191660200182016040528015611be2576020820181803683370190505b50602a90611bf09082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611c7657600080fd5b505af1158015611c8a573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611d20926002916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015611d3a57600080fd5b505af11580156112bb573d6000803e3d6000fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611e8757600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611e70578382906000526020600020018054611de390619b2e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0f90619b2e565b8015611e5c5780601f10611e3157610100808354040283529160200191611e5c565b820191906000526020600020905b815481529060010190602001808311611e3f57829003601f168201915b505050505081526020019060010190611dc4565b505050508152505081526020019060010190611d72565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611f8a57600080fd5b505af1158015611f9e573d6000803e3d6000fd5b5050602080546040516001600160a01b03909116935063048ae42c9250015b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001916001600160a01b03169087908390602890600401619d89565b600060405180830381600087803b15801561203457600080fd5b505af1158015612048573d6000803e3d6000fd5b5050505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561214957600080fd5b505af115801561215d573d6000803e3d6000fd5b5050602080546040516001600160a01b039091169350631cb5ea759250015b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001600160a01b03909116908690600190602890600401619f49565b6060601880548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516000936002936001600160a01b0316926397d340f592600480830193928290030181865afa1580156122fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123209190619c81565b61232a9190619fa3565b67ffffffffffffffff81111561234257612342619aff565b6040519080825280601f01601f19166020018201604052801561236c576020820181803683370190505b5060208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b03909216926397d340f5926004808401938290030181865afa1580156123d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f59190619c81565b6123ff9190619fa3565b61240a906001619f36565b67ffffffffffffffff81111561242257612422619aff565b6040519080825280601f01601f19166020018201604052801561244c576020820181803683370190505b50602a9061245a9082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156124e057600080fd5b505af11580156124f4573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c9150603401611fbd565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ab9190619c81565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156125fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126219190619c81565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561271557600080fd5b505af1158015612729573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561279b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127bf9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561281e57600080fd5b505af1158015612832573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250633b283933915060340160405160208183030381529060405288848660286040518663ffffffff1660e01b81526004016128a3959493929190619fde565b600060405180830381600087803b1580156128bd57600080fd5b505af11580156128d1573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129489190619c81565b90506129548682614e2a565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190619c81565b90506129d58682614e2a565b6027546129ed9086906001600160a01b031631614e2a565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6c9190619c81565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ae157600080fd5b505af1158015612af5573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8b9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612bea57600080fd5b505af1158015612bfe573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352612c939287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015612cad57600080fd5b505af1158015612cc1573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d389190619c81565b9050612d448282614e2a565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbe9190619c81565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015612e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4f9190619add565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612eb457600080fd5b505af1158015612ec8573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052858460286040518563ffffffff1660e01b8152600401612f37949392919061a023565b600060405180830381600087803b158015612f5157600080fd5b505af1158015612f65573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611e875783829060005260206000209060020201604051806040016040529081600082018054612fc590619b2e565b80601f0160208091040260200160405190810160405280929190818152602001828054612ff190619b2e565b801561303e5780601f106130135761010080835404028352916020019161303e565b820191906000526020600020905b81548152906001019060200180831161302157829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156130d857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116130855790505b50505050508152505081526020019060010190612f92565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561317557600080fd5b505af1158015613189573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7c0dcb5f000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637c0dcb5f9350611d20929160019116602860248401619efc565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611e8757838290600052602060002001805461323090619b2e565b80601f016020809104026020016040519081016040528092919081815260200182805461325c90619b2e565b80156132a95780601f1061327e576101008083540402835291602001916132a9565b820191906000526020600020905b81548152906001019060200180831161328c57829003601f168201915b505050505081526020019060010190613211565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611e875760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156133a057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161334d5790505b505050505081525050815260200190600101906132e1565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f60ee1247000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134b257600080fd5b505af11580156134c6573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250631cb5ea75915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001600160a01b03909116908690600090602890600401619f49565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611e875760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561364357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135f05790505b50505050508152505081526020019060010190613584565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611e8757838290600052602060002001805461369e90619b2e565b80601f01602080910402602001604051908101604052809291908181526020018280546136ca90619b2e565b80156137175780601f106136ec57610100808354040283529160200191613717565b820191906000526020600020905b8154815290600101906020018083116136fa57829003601f168201915b50505050508152602001906001019061367f565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561382e57600080fd5b505af1158015613842573d6000803e3d6000fd5b505060215460255460265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf9060340160408051601f19818403018152908290526138c291869060019060289061a054565b60405180910390a3602080546026546040516001600160a01b0392831693631cb5ea759361217c9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60085460009060ff1615613922575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156139b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d79190619c81565b1415905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613a6357600080fd5b505af1158015613a77573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611d20926000916001600160a01b031690602890600401619efc565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613c0757600080fd5b505af1158015613c1b573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926000916001600160a01b0316908790600190602890600401619d89565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f60ee1247000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613db057600080fd5b505af1158015613dc4573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001916001600160a01b0316908790600090602890600401619d89565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed49190619c81565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190619add565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613fd857600080fd5b505af1158015613fec573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b15801561404f57600080fd5b505af1158015614063573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156140ed57600080fd5b505af1158015614101573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526141969287916001600160a01b031690602890600401619efc565b600060405180830381600087803b1580156141b057600080fd5b505af11580156116cc573d6000803e3d6000fd5b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516000936002936001600160a01b0316926397d340f592600480830193928290030181865afa158015614227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424b9190619c81565b6142559190619fa3565b67ffffffffffffffff81111561426d5761426d619aff565b6040519080825280601f01601f191660200182016040528015614297576020820181803683370190505b5060208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b03909216926397d340f5926004808401938290030181865afa1580156142fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143209190619c81565b61432a9190619fa3565b614335906001619f36565b67ffffffffffffffff81111561434d5761434d619aff565b6040519080825280601f01601f191660200182016040528015614377576020820181803683370190505b50602a906143859082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561440b57600080fd5b505af115801561441f573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250631cb5ea75915060340161217c565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156144b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d69190619c81565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454c9190619c81565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156145ca57600080fd5b505af11580156145de573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015614650573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146749190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156146d357600080fd5b505af11580156146e7573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052878460286040518563ffffffff1660e01b8152600401614756949392919061a023565b600060405180830381600087803b15801561477057600080fd5b505af1158015614784573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156147d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fb9190619c81565b90506148078582614e2a565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061487c9190619c81565b90506148888582614e2a565b602754612f659085906001600160a01b031631614e2a565b6060601580548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149759190619c81565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614a0657600080fd5b505af1158015614a1a573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015614aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b119190619c81565b60006028604051614b289796959493929190619e8e565b60405180910390a3602080546026546040516001600160a01b0392831693637c0dcb5f93614b709316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352614bc89287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015614be257600080fd5b505af1158015614bf6573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6d9190619c81565b9050612d446116c68484619e7b565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa158015614ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cf19190619c81565b6021549091506001600160a01b031663a9059cbb610123614d13600185619e7b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015614d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d9a9190619add565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024016140d3565b6000614e15619558565b614e20848483614ebe565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614e9557600080fd5b505afa1580156116cc573d6000803e3d6000fd5b614eb1619558565b6120488585858486614f39565b600080614ecb8584615039565b9050614f2e6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f1992919061a093565b60405160208183030381529060405285615045565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015614fab57600080fd5b505af1925050508015614fbc575060015b614fd157614fcc87878787615073565b612f65565b614fdd87878787615073565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561501857600080fd5b505af115801561502c573d6000803e3d6000fd5b5050505050505050505050565b6000614f32838361508c565b60c081015151600090156150695761506284848460c001516150a7565b9050614f32565b615062848461524d565b600061507f8483615338565b9050612048858285615344565b6000615098838361570e565b614f3283836020015184615045565b6000806150b261571e565b905060006150c086836157f1565b905060006150d78260600151836020015185615c97565b905060006150e783838989615ea9565b905060006150f482616d26565b602081015181519192509060030b156151675789826040015160405160200161511e92919061a0b5565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261515e9160040161a136565b60405180910390fd5b60006151aa6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616ef5565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906151fd90849060040161a136565b602060405180830381865afa15801561521a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061523e91906199bf565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906152a290879060040161a136565b600060405180830381865afa1580156152bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152e7919081019061a202565b90506000615315828560405160200161530192919061a237565b6040516020818303038152906040526170f5565b90506001600160a01b038116614e2057848460405160200161511e92919061a266565b60006150988383617108565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa1580156153e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906154049190619c81565b9050806155ab57600061541686617114565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506154a1905b6040805180820182526000808252602091820152815180830190925284518252808501908201529061720c565b806154ad575060008451115b15615530576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906154f9908890889060040161a093565b600060405180830381600087803b15801561551357600080fd5b505af1158015615527573d6000803e3d6000fd5b505050506155a5565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561558c57600080fd5b505af11580156155a0573d6000803e3d6000fd5b505050505b50612048565b8060006155b782617114565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061561990615474565b80615625575060008551115b156156aa576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90615673908a908a908a9060040161a311565b600060405180830381600087803b15801561568d57600080fd5b505af11580156156a1573d6000803e3d6000fd5b50505050612f65565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b15801561501857600080fd5b61571a82826000617220565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906157a590849060040161a342565b600060405180830381865afa1580156157c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157ea919081019061a389565b9250505090565b6158236040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061586e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61587785617323565b6020820152600061588786617708565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156158c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158f1919081019061a389565b8683856020015160405160200161590b949392919061a3d2565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061596390859060040161a136565b600060405180830381865afa158015615980573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526159a8919081019061a389565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906159f090849060040161a4d6565b602060405180830381865afa158015615a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615a319190619add565b615a46578160405160200161511e919061a528565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615a8b90849060040161a5ba565b600060405180830381865afa158015615aa8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ad0919081019061a389565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615b1790849060040161a60c565b602060405180830381865afa158015615b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615b589190619add565b15615bed576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615ba290849060040161a60c565b600060405180830381865afa158015615bbf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615be7919081019061a389565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615c12919061a65e565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615c3e92919061a6ca565b600060405180830381865afa158015615c5b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615c83919081019061a389565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615cb35790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615d1357615d1361a6ef565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615d6757615d6761a6ef565b602002602001018190525084604051602001615d83919061a71e565b60405160208183030381529060405281600281518110615da557615da561a6ef565b602002602001018190525082604051602001615dc1919061a78a565b60405160208183030381529060405281600381518110615de357615de361a6ef565b60200260200101819052506000615df982616d26565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615e8a906040805180820182526000808252602091820152815180830190925284518252808501908201529061798b565b615e9f578560405160200161511e919061a7cb565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615ef9565b511590565b61606d57826020015115615fb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161515e565b8260c001511561606d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161515e565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161608657905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806160e19061a85c565b935060ff16815181106160f6576160f661a6ef565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616147919061a87b565b6040516020818303038152906040528282806161629061a85c565b935060ff16815181106161775761617761a6ef565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806161c49061a85c565b935060ff16815181106161d9576161d961a6ef565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806162269061a85c565b935060ff168151811061623b5761623b61a6ef565b602002602001018190525087602001518282806162579061a85c565b935060ff168151811061626c5761626c61a6ef565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806162b99061a85c565b935060ff16815181106162ce576162ce61a6ef565b6020908102919091010152875182826162e68161a85c565b935060ff16815181106162fb576162fb61a6ef565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806163489061a85c565b935060ff168151811061635d5761635d61a6ef565b6020026020010181905250616371466179ec565b828261637c8161a85c565b935060ff16815181106163915761639161a6ef565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806163de9061a85c565b935060ff16815181106163f3576163f361a6ef565b60200260200101819052508682828061640b9061a85c565b935060ff16815181106164205761642061a6ef565b60209081029190910101528551156165475760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826164718161a85c565b935060ff16815181106164865761648661a6ef565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906164d690899060040161a136565b600060405180830381865afa1580156164f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261651b919081019061a389565b82826165268161a85c565b935060ff168151811061653b5761653b61a6ef565b60200260200101819052505b8460200151156166175760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826165908161a85c565b935060ff16815181106165a5576165a561a6ef565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806165f29061a85c565b935060ff16815181106166075761660761a6ef565b60200260200101819052506167de565b61664f615ef48660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6166e25760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826166928161a85c565b935060ff16815181106166a7576166a761a6ef565b60200260200101819052508460a001516040516020016166c7919061a71e565b6040516020818303038152906040528282806165f29061a85c565b8460c0015115801561672557506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261672390511590565b155b156167de5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826167698161a85c565b935060ff168151811061677e5761677e61a6ef565b602002602001018190525061679288617a8c565b6040516020016167a2919061a71e565b6040516020818303038152906040528282806167bd9061a85c565b935060ff16815181106167d2576167d261a6ef565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261681290511590565b6168a75760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826168558161a85c565b935060ff168151811061686a5761686a61a6ef565b602002602001018190525084604001518282806168869061a85c565b935060ff168151811061689b5761689b61a6ef565b60200260200101819052505b6060850151156169c85760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826168f08161a85c565b935060ff16815181106169055761690561a6ef565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616974573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261699c919081019061a389565b82826169a78161a85c565b935060ff16815181106169bc576169bc61a6ef565b60200260200101819052505b60e08501515115616a6f5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616a128161a85c565b935060ff1681518110616a2757616a2761a6ef565b6020026020010181905250616a438560e00151600001516179ec565b8282616a4e8161a85c565b935060ff1681518110616a6357616a6361a6ef565b60200260200101819052505b60e08501516020015115616b195760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616abc8161a85c565b935060ff1681518110616ad157616ad161a6ef565b6020026020010181905250616aed8560e00151602001516179ec565b8282616af88161a85c565b935060ff1681518110616b0d57616b0d61a6ef565b60200260200101819052505b60e08501516040015115616bc35760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282616b668161a85c565b935060ff1681518110616b7b57616b7b61a6ef565b6020026020010181905250616b978560e00151604001516179ec565b8282616ba28161a85c565b935060ff1681518110616bb757616bb761a6ef565b60200260200101819052505b60e08501516060015115616c6d5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616c108161a85c565b935060ff1681518110616c2557616c2561a6ef565b6020026020010181905250616c418560e00151606001516179ec565b8282616c4c8161a85c565b935060ff1681518110616c6157616c6161a6ef565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616c8b57616c8b619aff565b604051908082528060200260200182016040528015616cbe57816020015b6060815260200190600190039081616ca95790505b50905060005b8260ff168160ff161015616d1757838160ff1681518110616ce757616ce761a6ef565b6020026020010151828260ff1681518110616d0457616d0461a6ef565b6020908102919091010152600101616cc4565b5093505050505b949350505050565b616d4d6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91616dd39186910161a8e6565b600060405180830381865afa158015616df0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616e18919081019061a389565b90506000616e26868361857b565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401616e5691906198b1565b6000604051808303816000875af1158015616e75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616e9d919081019061a92d565b805190915060030b15801590616eb65750602081015151155b8015616ec55750604081015151155b15615e9f5781600081518110616edd57616edd61a6ef565b602002602001015160405160200161511e919061a9e3565b60606000616f2a8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616f619082905b906186d0565b156170be576000616fde82616fd884616fd2616fa48a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906186f7565b90618759565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506170429082906186d0565b156170ac57604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170a9905b82906187de565b90505b6170b581618804565b92505050614f32565b82156170d757848460405160200161511e92919061abcf565b5050604080516020810190915260008152614f32565b509392505050565b6000808251602084016000f09392505050565b61571a82826001617220565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691617189919061ac76565b600060405180830381855afa9150503d80600081146171c4576040519150601f19603f3d011682016040523d82523d6000602084013e6171c9565b606091505b50915091508180156171dc575060208151115b156171f55780806020019051810190616d1e919061a389565b505060408051602081019091526000815292915050565b6000617218838361886d565b159392505050565b8160a001511561722f57505050565b600061723c848484618948565b9050600061724982616d26565b602081015181519192509060030b1580156172e55750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172e590604080518082018252600080825260209182015281518083019092528451825280850190820152616f5b565b156172f257505050505050565b6040820151511561731257816040015160405160200161511e919061ac92565b8060405160200161511e919061acf0565b606060006173588360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506173bd905b829061798b565b1561742c57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f3290617427908390618ee3565b618804565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261748e905b8290618f6d565b60010361755b57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174f4906170a2565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f3290617427905b83906187de565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ba906173b6565b156176f157604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617622908390619007565b9050600081600183516176359190619e7b565b815181106176455761764561a6ef565b602002602001015190506176e86174276176bb6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618ee3565b95945050505050565b8260405160200161511e919061ad5b565b50919050565b6060600061773d8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061779f906173b6565b156177ad57614f3281618804565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261780c90617487565b60010361787657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f329061742790617554565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178d5906173b6565b156176f157604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061793d908390619007565b90506001815111156179795780600282516179589190619e7b565b815181106179685761796861a6ef565b602002602001015192505050919050565b508260405160200161511e919061ad5b565b8051825160009111156179a057506000614e24565b815183516020850151600092916179b691619f36565b6179c09190619e7b565b9050826020015181036179d7576001915050614e24565b82516020840151819020912014905092915050565b606060006179f9836190ac565b600101905060008167ffffffffffffffff811115617a1957617a19619aff565b6040519080825280601f01601f191660200182016040528015617a43576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617a4d57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617b18905b829061720c565b15617b5857505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bb790617b11565b15617bf757505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c5690617b11565b15617c9657505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cf590617b11565b80617d5a5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d5a90617b11565b15617d9a57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617df990617b11565b80617e5e5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5e90617b11565b15617e9e57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617efd90617b11565b80617f625750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f6290617b11565b15617fa257505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261800190617b11565b806180665750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261806690617b11565b156180a657505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261810590617b11565b1561814557505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526181a490617b11565b156181e457505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261824390617b11565b1561828357505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182e290617b11565b1561832257505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261838190617b11565b156183c157505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261842090617b11565b806184855750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261848590617b11565b156184c557505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261852490617b11565b1561856457505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161511e929060200161ae39565b60608060005b8451811015618606578185828151811061859d5761859d61a6ef565b60200260200101516040516020016185b692919061a237565b6040516020818303038152906040529150600185516185d59190619e7b565b81146185fe57816040516020016185ec919061afa2565b60405160208183030381529060405291505b600101618581565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161861f579050509050838160008151811061864a5761864a61a6ef565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061869e5761869e61a6ef565b602002602001018190525081816002815181106186bd576186bd61a6ef565b6020908102919091010152949350505050565b60208083015183518351928401516000936186ee929184919061918e565b14159392505050565b60408051808201909152600080825260208201526000618729846000015185602001518560000151866020015161929f565b905083602001518161873b9190619e7b565b8451859061874a908390619e7b565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561877e575081614e24565b60208083015190840151600191146187a55750815160208481015190840151829020919020145b80156187d6578251845185906187bc908390619e7b565b90525082516020850180516187d2908390619f36565b9052505b509192915050565b60408051808201909152600080825260208201526187fd8383836193bf565b5092915050565b60606000826000015167ffffffffffffffff81111561882557618825619aff565b6040519080825280601f01601f19166020018201604052801561884f576020820181803683370190505b50905060006020820190506187fd818560200151866000015161946a565b8151815160009190811115618880575081515b6020808501519084015160005b8381101561893957825182518082146189095760001960208710156188e8576001846188ba896020619e7b565b6188c49190619f36565b6188cf90600861afe3565b6188da90600261b0e1565b6188e49190619e7b565b1990505b8181168382168181039114618906579750614e249650505050505050565b50505b618914602086619f36565b9450618921602085619f36565b935050506020816189329190619f36565b905061888d565b5084518651615e9f919061b0ed565b6060600061895461571e565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161897157905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806189cc9061a85c565b935060ff16815181106189e1576189e161a6ef565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618a32919061b10d565b604051602081830303815290604052828280618a4d9061a85c565b935060ff1681518110618a6257618a6261a6ef565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618aaf9061a85c565b935060ff1681518110618ac457618ac461a6ef565b602002602001018190525082604051602001618ae0919061a78a565b604051602081830303815290604052828280618afb9061a85c565b935060ff1681518110618b1057618b1061a6ef565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618b5d9061a85c565b935060ff1681518110618b7257618b7261a6ef565b6020026020010181905250618b8787846194e4565b8282618b928161a85c565b935060ff1681518110618ba757618ba761a6ef565b602090810291909101015285515115618c535760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282618bf98161a85c565b935060ff1681518110618c0e57618c0e61a6ef565b6020026020010181905250618c278660000151846194e4565b8282618c328161a85c565b935060ff1681518110618c4757618c4761a6ef565b60200260200101819052505b856080015115618cc15760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282618c9c8161a85c565b935060ff1681518110618cb157618cb161a6ef565b6020026020010181905250618d27565b8415618d275760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282618d068161a85c565b935060ff1681518110618d1b57618d1b61a6ef565b60200260200101819052505b60408601515115618dc35760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618d718161a85c565b935060ff1681518110618d8657618d8661a6ef565b60200260200101819052508560400151828280618da29061a85c565b935060ff1681518110618db757618db761a6ef565b60200260200101819052505b856060015115618e2d5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618e0c8161a85c565b935060ff1681518110618e2157618e2161a6ef565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618e4b57618e4b619aff565b604051908082528060200260200182016040528015618e7e57816020015b6060815260200190600190039081618e695790505b50905060005b8260ff168160ff161015618ed757838160ff1681518110618ea757618ea761a6ef565b6020026020010151828260ff1681518110618ec457618ec461a6ef565b6020908102919091010152600101618e84565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618f08575081614e24565b81518351602085015160009291618f1e91619f36565b618f289190619e7b565b60208401519091506001908214618f49575082516020840151819020908220145b8015618f6457835185518690618f60908390619e7b565b9052505b50929392505050565b6000808260000151618f91856000015186602001518660000151876020015161929f565b618f9b9190619f36565b90505b83516020850151618faf9190619f36565b81116187fd5781618fbf8161b152565b9250508260000151618ff6856020015183618fda9190619e7b565b8651618fe69190619e7b565b838660000151876020015161929f565b6190009190619f36565b9050618f9e565b606060006190158484618f6d565b619020906001619f36565b67ffffffffffffffff81111561903857619038619aff565b60405190808252806020026020018201604052801561906b57816020015b60608152602001906001900390816190565790505b50905060005b81518110156170ed5761908761742786866187de565b8282815181106190995761909961a6ef565b6020908102919091010152600101619071565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106190f5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619121576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061913f57662386f26fc10000830492506010015b6305f5e1008310619157576305f5e100830492506008015b612710831061916b57612710830492506004015b6064831061917d576064830492506002015b600a8310614e245760010192915050565b600080858411619295576020841161924157600084156191d95760016191b5866020619e7b565b6191c090600861afe3565b6191cb90600261b0e1565b6191d59190619e7b565b1990505b83518116856191e88989619f36565b6191f29190619e7b565b805190935082165b81811461922c578784116192145787945050505050616d1e565b8361921e8161b16c565b9450508284511690506191fa565b6192368785619f36565b945050505050616d1e565b83832061924e8588619e7b565b6192589087619f36565b91505b85821061929357848220808203619280576192768684619f36565b9350505050616d1e565b61928b600184619e7b565b92505061925b565b505b5092949350505050565b600083818685116193aa576020851161935957600085156192eb5760016192c7876020619e7b565b6192d290600861afe3565b6192dd90600261b0e1565b6192e79190619e7b565b1990505b845181166000876192fc8b8b619f36565b6193069190619e7b565b855190915083165b82811461934b57818610619333576193268b8b619f36565b9650505050505050616d1e565b8561933d8161b152565b96505083865116905061930e565b859650505050505050616d1e565b508383206000905b61936b8689619e7b565b82116193a8578583208082036193875783945050505050616d1e565b619392600185619f36565b93505081806193a09061b152565b925050619361565b505b6193b48787619f36565b979650505050505050565b604080518082019091526000808252602082015260006193f1856000015186602001518660000151876020015161929f565b60208087018051918601919091525190915061940d9082619e7b565b8352845160208601516194209190619f36565b810361942f5760008552619461565b8351835161943d9190619f36565b8551869061944c908390619e7b565b905250835161945b9082619f36565b60208601525b50909392505050565b602081106194a25781518352619481602084619f36565b925061948e602083619f36565b915061949b602082619e7b565b905061946a565b60001981156194d15760016194b8836020619e7b565b6194c49061010061b0e1565b6194ce9190619e7b565b90505b9151835183169219169190911790915250565b606060006194f284846157f1565b805160208083015160405193945061950c9390910161b183565b60405160208183030381529060405291505092915050565b610b678061b1dc83390190565b61063d8061bd4383390190565b61106f8061c38083390190565b6120728061d3ef83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161959b6195a0565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161959b6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156196525783516001600160a01b031683526020938401939092019160010161962b565b509095945050505050565b60005b83811015619678578181015183820152602001619660565b50506000910152565b6000815180845261969981602086016020860161965d565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561978f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352619779848651619681565b602095860195909450929092019160010161973f565b5091975050506020948501949290920191506001016196d5565b50929695505050505050565b600081518084526020840193506020830160005b828110156198095781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016197c9565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261987f6040880182619681565b905060208201519150868103602088015261989a81836197b5565b96505050602093840193919091019060010161983b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619913858351619681565b945060209384019391909101906001016198d9565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526199a960408701826197b5565b9550506020938401939190910190600101619950565b6000602082840312156199d157600080fd5b81516001600160a01b0381168114614f3257600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619aa2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152619ac360c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215619aef57600080fd5b81518015158114614f3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c90821680619b4257607f821691505b602082108103617702577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115612d4457806000526020600020601f840160051c81016020851015619ba25750805b601f840160051c820191505b818110156120485760008155600101619bae565b815167ffffffffffffffff811115619bdc57619bdc619aff565b619bf081619bea8454619b2e565b84619b7b565b6020601f821160018114619c245760008315619c0c5750848201515b600019600385901b1c1916600184901b178455612048565b600084815260208120601f198516915b82811015619c545787850151825560209485019460019092019101619c34565b5084821015619c725786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215619c9357600080fd5b5051919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a0606085015260008154619ce481619b2e565b8060a08801526001821660008114619d035760018114619d3d57619d71565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b8901019350619d71565b84600052602060002060005b83811015619d685781548a820160c00152600190910190602001619d49565b890160c0019450505b50505060038401546080860152809250505092915050565b60c081526000619d9c60c0830189619681565b8760208401526001600160a01b03871660408401528281036060840152619dc38187619681565b905084608084015282810360a0840152619ddd8185619c9a565b9998505050505050505050565b61010081526000619dff61010083018b619681565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a0840152619e328187619681565b90508460c084015282810360e084015261523e8185619c9a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614e2457614e24619e4c565b61010081526000619ea361010083018a619681565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e085015250619eee6020820185619c9a565b9a9950505050505050505050565b608081526000619f0f6080830187619681565b8560208401526001600160a01b038516604084015282810360608401526193b48185619c9a565b80820180821115614e2457614e24619e4c565b60a081526000619f5c60a0830188619681565b6001600160a01b03871660208401528281036040840152619f7d8187619681565b90508460608401528281036080840152619f978185619c9a565b98975050505050505050565b600082619fd9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60a081526000619ff160a0830188619681565b866020840152856040840152828103606084015261a00f8186619681565b90508281036080840152619f978185619c9a565b60808152600061a0366080830187619681565b85602084015284604084015282810360608401526193b48185619c9a565b60808152600061a0676080830187619681565b828103602084015261a0798187619681565b905084604084015282810360608401526193b48185619c9a565b6001600160a01b0383168152604060208201526000616d1e6040830184619681565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a0ed81601a85016020880161965d565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a12a81601c84016020880161965d565b01601c01949350505050565b602081526000614f326020830184619681565b6040516060810167ffffffffffffffff8111828210171561a16c5761a16c619aff565b60405290565b60008067ffffffffffffffff84111561a18d5761a18d619aff565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a1bc5761a1bc619aff565b60405283815290508082840185101561a1d457600080fd5b6170ed84602083018561965d565b600082601f83011261a1f357600080fd5b614f328383516020850161a172565b60006020828403121561a21457600080fd5b815167ffffffffffffffff81111561a22b57600080fd5b614e208482850161a1e2565b6000835161a24981846020880161965d565b83519083019061a25d81836020880161965d565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a29e81601a85016020880161965d565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a2db81603384016020880161965d565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006176e86060830184619681565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f326080830184619681565b60006020828403121561a39b57600080fd5b815167ffffffffffffffff81111561a3b257600080fd5b8201601f8101841361a3c357600080fd5b614e208482516020840161a172565b6000855161a3e4818460208a0161965d565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a41e816001840160208a0161965d565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a45c81600284016020890161965d565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a49e81600284016020880161965d565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a4e96040830184619681565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a56081601f85016020870161965d565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a5cd6040830184619681565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a61f6040830184619681565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a69681601485016020870161965d565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061a6dd6040830185619681565b8281036020840152614f2e8185619681565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a75681600185016020870161965d565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a79c81846020870161965d565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a84f81604b85016020870161965d565b91909101604b0192915050565b600060ff821660ff810361a8725761a872619e4c565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a8d981602985016020870161965d565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f326080830184619681565b60006020828403121561a93f57600080fd5b815167ffffffffffffffff81111561a95657600080fd5b82016060818503121561a96857600080fd5b61a97061a149565b81518060030b811461a98157600080fd5b8152602082015167ffffffffffffffff81111561a99d57600080fd5b61a9a98682850161a1e2565b602083015250604082015167ffffffffffffffff81111561a9c957600080fd5b61a9d58682850161a1e2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161aa4181602185016020870161965d565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161ac2d81602185016020880161965d565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161ac6a81602e84016020880161965d565b01602e01949350505050565b6000825161ac8881846020870161965d565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a8d981602985016020870161965d565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161ad4e81602285016020870161965d565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161ad9381600e85016020870161965d565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161ae7181601885016020880161965d565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161aeae81601c84016020880161965d565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161afb481846020870161965d565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417614e2457614e24619e4c565b6001815b600184111561b0355780850481111561b0195761b019619e4c565b600184161561b02757908102905b60019390931c92800261affe565b935093915050565b60008261b04c57506001614e24565b8161b05957506000614e24565b816001811461b06f576002811461b0795761b095565b6001915050614e24565b60ff84111561b08a5761b08a619e4c565b50506001821b614e24565b5060208310610133831016604e8410600b841016171561b0b8575081810a614e24565b61b0c5600019848461affa565b806000190482111561b0d95761b0d9619e4c565b029392505050565b6000614f32838361b03d565b81810360008312801583831316838312821617156187fd576187fd619e4c565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b14581601c85016020870161965d565b91909101601c0192915050565b6000600019820361b1655761b165619e4c565b5060010190565b60008161b17b5761b17b619e4c565b506000190190565b6000835161b19581846020880161965d565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161b1cf81600184016020880161965d565b0160010194935050505056fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c80635bcfd61614610033578063660b9de01461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610169565b610073565b34801561005f57600080fd5b5061003161006e366004610221565b6100ee565b6060811561008a576100878284018461028d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610383565b6100c560408a0160208b016103ef565b896040013533866040516100de9695949392919061045a565b60405180910390a1505050505050565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c768160405161011d919061051c565b60405180910390a150565b60006060828403121561013a57600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016457600080fd5b919050565b60008060008060006080868803121561018157600080fd5b853567ffffffffffffffff81111561019857600080fd5b6101a488828901610128565b9550506101b360208701610140565b935060408601359250606086013567ffffffffffffffff8111156101d657600080fd5b8601601f810188136101e757600080fd5b803567ffffffffffffffff8111156101fe57600080fd5b88602082840101111561021057600080fd5b959894975092955050506020019190565b60006020828403121561023357600080fd5b813567ffffffffffffffff81111561024a57600080fd5b61025684828501610128565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561029f57600080fd5b813567ffffffffffffffff8111156102b657600080fd5b8201601f810184136102c757600080fd5b803567ffffffffffffffff8111156102e1576102e161025e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561034d5761034d61025e565b60405281815282820160200186101561036557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126103b857600080fd5b83018035915067ffffffffffffffff8211156103d357600080fd5b6020019150368190038213156103e857600080fd5b9250929050565b60006020828403121561040157600080fd5b61040a82610140565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a08152600061046e60a08301888a610411565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156104d8576020818701810151848301820152016104bc565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683010192505050979650505050505050565b6020815273ffffffffffffffffffffffffffffffffffffffff61053e83610140565b1660208201526000602083013567ffffffffffffffff811680821461056257600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261059f57600080fd5b830160208101903567ffffffffffffffff8111156105bc57600080fd5b8036038213156105cb57600080fd5b6060808501526105df608085018284610411565b9594505050505056fea2646970667358221220cb26ed07348041180f6631404fac1759ff8efa800dbae7e9722129211743d1d664736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212206cfc8728f3e6a008fa60110012d328f8d2a859ba07c5fdfb6776051dc27a333964736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a264697066735822122070883b1fc1f38da59f714f15aedf2da85315e7fcdd5f1808c397f95c29b3418564736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f4968061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c806385226c811161012a578063ba9adeef116100bd578063dde7e9671161008c578063fa7626d411610071578063fa7626d41461037f578063fbc611c81461038c578063fdad0ad01461039457600080fd5b8063dde7e9671461036f578063e20c9f711461037757600080fd5b8063ba9adeef1461034f578063bed3e81314610357578063ceccfab31461035f578063d5a446891461036757600080fd5b8063b5508aa9116100f9578063b5508aa91461031f578063b7f0583614610327578063ba414fa61461032f578063ba800c911461034757600080fd5b806385226c81146102e5578063916a17c6146102fa578063ae9da0881461030f578063b0464fdc1461031757600080fd5b806339cbb457116101bd5780635006fd801161018c5780636221b509116101715780636221b509146102c057806366d9a9a0146102c857806383ababa9146102dd57600080fd5b80635006fd80146102b05780635d72228f146102b857600080fd5b806339cbb457146102905780633e5e3c23146102985780633f7286f4146102a05780634ffab9de146102a857600080fd5b806320dee15f116101f957806320dee15f14610263578063264b524c1461026b5780632ade38801461027357806336431b3f1461028857600080fd5b80630a9254e41461022b5780631238212c146102355780631e63d2b91461023d5780631ed7831c14610245575b600080fd5b61023361039c565b005b610233610eec565b6102336112c1565b61024d6116d4565b60405161025a9190619611565b60405180910390f35b610233611736565b610233611b13565b61027b611d4e565b60405161025a91906196ad565b610233611e90565b61023361204f565b61024d6121d9565b61024d612239565b610233612299565b610233612536565b6102336129f7565b610233612d49565b6102d0612f6e565b60405161025a9190619813565b6102336130f0565b6102ed6131ed565b60405161025a91906198b1565b6103026132bd565b60405161025a9190619928565b6102336133b8565b610302613560565b6102ed61365b565b61023361372b565b61033761390a565b604051901515815260200161025a565b6102336139de565b610233613b0d565b610233613cb6565b610233613e5f565b6102336141c4565b610233614461565b61024d6148a0565b601f546103379060ff1681565b610233614900565b610233614c7c565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680549091166112341790556040516103e290619524565b604051809103906000f0801580156103fe573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260255491516024810193909352921660448201526104e2919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052614e0b565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa1580156105a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c891906199bf565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161060c90619531565b604051809103906000f080158015610628573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b1580156106c457600080fd5b505af11580156106d8573d6000803e3d6000fd5b5050505060008060006040516106ed9061953e565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610729573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560205460405160129360019384936000939192169061077f9061954b565b61078e969594939291906199e8565b604051809103906000f0801580156107aa573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b1580156108bf57600080fd5b505af11580156108d3573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561095357600080fd5b505af1158015610967573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156109bc57600080fd5b505af11580156109d0573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190619add565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afd9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610be657600080fd5b505af1158015610bfa573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190619add565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ce457600080fd5b505af1158015610cf8573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d909190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b50506040805160a0810182526103218082526000602080840182815284860193845285519182019095528181526060840181905260808401919091528251602880549551151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009096166001600160a01b0392831617959095178555915160298054919093167fffffffffffffffffffffffff00000000000000000000000000000000000000009190911617909155909350909150602a90610edc9082619bc2565b5060808201518160030155905050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f619190619c81565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110809190619add565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561115c57600080fd5b505af1158015611170573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261120a9288916001600160a01b0316908790600190602890600401619d89565b600060405180830381600087803b15801561122457600080fd5b505af1158015611238573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af9190619c81565b90506112bb8382614e2a565b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113369190619c81565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039092166084820152919250908190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561144157600080fd5b505af1158015611455573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216918b9189918491634d8943bb916004808201926020929091908290030181865afa158015611527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154b9190619c81565b8a896028604051611563989796959493929190619dea565b60405180910390a3602080546026546040516001600160a01b039283169363048ae42c936115ab9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611607928a916001600160a01b03169089908890602890600401619d89565b600060405180830381600087803b15801561162157600080fd5b505af1158015611635573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac9190619c81565b90506116cc836116bc8888619e7b565b6116c69190619e7b565b82614e2a565b505050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561172c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161170e575b5050505050905090565b601f54604080518082018252601a81527f476174657761795a45564d55706772616465546573742e736f6c00000000000060208083019190915282519081019092526000825260255461179b936001600160a01b036101009091048116939116614ea9565b601f546021546025546040516370a0823160e01b81526001600160a01b03918216600482015261010090930481169260019260009216906370a0823190602401602060405180830381865afa1580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190619c81565b6040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0385166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156118a957600080fd5b505af11580156118bd573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d355789060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b49190619c81565b600060286040516119cb9796959493929190619e8e565b60405180910390a360265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03841690637c0dcb5f9060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611a5f9287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015611a7957600080fd5b505af1158015611a8d573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b049190619c81565b90506112bb6116c68484619e7b565b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216926397d340f5926004808401938290030181865afa158015611b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b959190619c81565b611ba0906001619f36565b67ffffffffffffffff811115611bb857611bb8619aff565b6040519080825280601f01601f191660200182016040528015611be2576020820181803683370190505b50602a90611bf09082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611c7657600080fd5b505af1158015611c8a573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611d20926002916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015611d3a57600080fd5b505af11580156112bb573d6000803e3d6000fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611e8757600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611e70578382906000526020600020018054611de390619b2e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0f90619b2e565b8015611e5c5780601f10611e3157610100808354040283529160200191611e5c565b820191906000526020600020905b815481529060010190602001808311611e3f57829003601f168201915b505050505081526020019060010190611dc4565b505050508152505081526020019060010190611d72565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611f8a57600080fd5b505af1158015611f9e573d6000803e3d6000fd5b5050602080546040516001600160a01b03909116935063048ae42c9250015b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001916001600160a01b03169087908390602890600401619d89565b600060405180830381600087803b15801561203457600080fd5b505af1158015612048573d6000803e3d6000fd5b5050505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561214957600080fd5b505af115801561215d573d6000803e3d6000fd5b5050602080546040516001600160a01b039091169350631cb5ea759250015b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001600160a01b03909116908690600190602890600401619f49565b6060601880548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516000936002936001600160a01b0316926397d340f592600480830193928290030181865afa1580156122fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123209190619c81565b61232a9190619fa3565b67ffffffffffffffff81111561234257612342619aff565b6040519080825280601f01601f19166020018201604052801561236c576020820181803683370190505b5060208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b03909216926397d340f5926004808401938290030181865afa1580156123d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f59190619c81565b6123ff9190619fa3565b61240a906001619f36565b67ffffffffffffffff81111561242257612422619aff565b6040519080825280601f01601f19166020018201604052801561244c576020820181803683370190505b50602a9061245a9082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156124e057600080fd5b505af11580156124f4573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c9150603401611fbd565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ab9190619c81565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156125fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126219190619c81565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561271557600080fd5b505af1158015612729573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561279b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127bf9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561281e57600080fd5b505af1158015612832573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250633b283933915060340160405160208183030381529060405288848660286040518663ffffffff1660e01b81526004016128a3959493929190619fde565b600060405180830381600087803b1580156128bd57600080fd5b505af11580156128d1573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129489190619c81565b90506129548682614e2a565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190619c81565b90506129d58682614e2a565b6027546129ed9086906001600160a01b031631614e2a565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6c9190619c81565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ae157600080fd5b505af1158015612af5573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8b9190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612bea57600080fd5b505af1158015612bfe573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352612c939287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015612cad57600080fd5b505af1158015612cc1573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d389190619c81565b9050612d448282614e2a565b505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbe9190619c81565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015612e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4f9190619add565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612eb457600080fd5b505af1158015612ec8573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052858460286040518563ffffffff1660e01b8152600401612f37949392919061a023565b600060405180830381600087803b158015612f5157600080fd5b505af1158015612f65573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611e875783829060005260206000209060020201604051806040016040529081600082018054612fc590619b2e565b80601f0160208091040260200160405190810160405280929190818152602001828054612ff190619b2e565b801561303e5780601f106130135761010080835404028352916020019161303e565b820191906000526020600020905b81548152906001019060200180831161302157829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156130d857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116130855790505b50505050508152505081526020019060010190612f92565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561317557600080fd5b505af1158015613189573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7c0dcb5f000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637c0dcb5f9350611d20929160019116602860248401619efc565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611e8757838290600052602060002001805461323090619b2e565b80601f016020809104026020016040519081016040528092919081815260200182805461325c90619b2e565b80156132a95780601f1061327e576101008083540402835291602001916132a9565b820191906000526020600020905b81548152906001019060200180831161328c57829003601f168201915b505050505081526020019060010190613211565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611e875760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156133a057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161334d5790505b505050505081525050815260200190600101906132e1565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f60ee1247000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156134b257600080fd5b505af11580156134c6573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250631cb5ea75915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001600160a01b03909116908690600090602890600401619f49565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611e875760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561364357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135f05790505b50505050508152505081526020019060010190613584565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611e8757838290600052602060002001805461369e90619b2e565b80601f01602080910402602001604051908101604052809291908181526020018280546136ca90619b2e565b80156137175780601f106136ec57610100808354040283529160200191613717565b820191906000526020600020905b8154815290600101906020018083116136fa57829003601f168201915b50505050508152602001906001019061367f565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561382e57600080fd5b505af1158015613842573d6000803e3d6000fd5b505060215460255460265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf9060340160408051601f19818403018152908290526138c291869060019060289061a054565b60405180910390a3602080546026546040516001600160a01b0392831693631cb5ea759361217c9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60085460009060ff1615613922575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156139b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d79190619c81565b1415905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613a6357600080fd5b505af1158015613a77573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352611d20926000916001600160a01b031690602890600401619efc565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613c0757600080fd5b505af1158015613c1b573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926000916001600160a01b0316908790600190602890600401619d89565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f60ee1247000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613db057600080fd5b505af1158015613dc4573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261201a926001916001600160a01b0316908790600090602890600401619d89565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed49190619c81565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190619add565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613fd857600080fd5b505af1158015613fec573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b15801561404f57600080fd5b505af1158015614063573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156140ed57600080fd5b505af1158015614101573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526141969287916001600160a01b031690602890600401619efc565b600060405180830381600087803b1580156141b057600080fd5b505af11580156116cc573d6000803e3d6000fd5b60208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290516000936002936001600160a01b0316926397d340f592600480830193928290030181865afa158015614227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424b9190619c81565b6142559190619fa3565b67ffffffffffffffff81111561426d5761426d619aff565b6040519080825280601f01601f191660200182016040528015614297576020820181803683370190505b5060208054604080517f97d340f500000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b03909216926397d340f5926004808401938290030181865afa1580156142fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143209190619c81565b61432a9190619fa3565b614335906001619f36565b67ffffffffffffffff81111561434d5761434d619aff565b6040519080825280601f01601f191660200182016040528015614377576020820181803683370190505b50602a906143859082619bc2565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9507fb3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561440b57600080fd5b505af115801561441f573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250631cb5ea75915060340161217c565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156144b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d69190619c81565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454c9190619c81565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156145ca57600080fd5b505af11580156145de573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015614650573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146749190619add565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156146d357600080fd5b505af11580156146e7573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052878460286040518563ffffffff1660e01b8152600401614756949392919061a023565b600060405180830381600087803b15801561477057600080fd5b505af1158015614784573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156147d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fb9190619c81565b90506148078582614e2a565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061487c9190619c81565b90506148888582614e2a565b602754612f659085906001600160a01b031631614e2a565b6060601580548060200260200160405190810160405280929190818152602001828054801561172c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161170e575050505050905090565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149759190619c81565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614a0657600080fd5b505af1158015614a1a573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015614aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b119190619c81565b60006028604051614b289796959493929190619e8e565b60405180910390a3602080546026546040516001600160a01b0392831693637c0dcb5f93614b709316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352614bc89287916001600160a01b031690602890600401619efc565b600060405180830381600087803b158015614be257600080fd5b505af1158015614bf6573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6d9190619c81565b9050612d446116c68484619e7b565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa158015614ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cf19190619c81565b6021549091506001600160a01b031663a9059cbb610123614d13600185619e7b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015614d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d9a9190619add565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024016140d3565b6000614e15619558565b614e20848483614ebe565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614e9557600080fd5b505afa1580156116cc573d6000803e3d6000fd5b614eb1619558565b6120488585858486614f39565b600080614ecb8584615039565b9050614f2e6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614f1992919061a093565b60405160208183030381529060405285615045565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015614fab57600080fd5b505af1925050508015614fbc575060015b614fd157614fcc87878787615073565b612f65565b614fdd87878787615073565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561501857600080fd5b505af115801561502c573d6000803e3d6000fd5b5050505050505050505050565b6000614f32838361508c565b60c081015151600090156150695761506284848460c001516150a7565b9050614f32565b615062848461524d565b600061507f8483615338565b9050612048858285615344565b6000615098838361570e565b614f3283836020015184615045565b6000806150b261571e565b905060006150c086836157f1565b905060006150d78260600151836020015185615c97565b905060006150e783838989615ea9565b905060006150f482616d26565b602081015181519192509060030b156151675789826040015160405160200161511e92919061a0b5565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261515e9160040161a136565b60405180910390fd5b60006151aa6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616ef5565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906151fd90849060040161a136565b602060405180830381865afa15801561521a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061523e91906199bf565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906152a290879060040161a136565b600060405180830381865afa1580156152bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152e7919081019061a202565b90506000615315828560405160200161530192919061a237565b6040516020818303038152906040526170f5565b90506001600160a01b038116614e2057848460405160200161511e92919061a266565b60006150988383617108565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa1580156153e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906154049190619c81565b9050806155ab57600061541686617114565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506154a1905b6040805180820182526000808252602091820152815180830190925284518252808501908201529061720c565b806154ad575060008451115b15615530576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906154f9908890889060040161a093565b600060405180830381600087803b15801561551357600080fd5b505af1158015615527573d6000803e3d6000fd5b505050506155a5565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561558c57600080fd5b505af11580156155a0573d6000803e3d6000fd5b505050505b50612048565b8060006155b782617114565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061561990615474565b80615625575060008551115b156156aa576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90615673908a908a908a9060040161a311565b600060405180830381600087803b15801561568d57600080fd5b505af11580156156a1573d6000803e3d6000fd5b50505050612f65565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b15801561501857600080fd5b61571a82826000617220565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906157a590849060040161a342565b600060405180830381865afa1580156157c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157ea919081019061a389565b9250505090565b6158236040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061586e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61587785617323565b6020820152600061588786617708565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156158c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158f1919081019061a389565b8683856020015160405160200161590b949392919061a3d2565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061596390859060040161a136565b600060405180830381865afa158015615980573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526159a8919081019061a389565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906159f090849060040161a4d6565b602060405180830381865afa158015615a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615a319190619add565b615a46578160405160200161511e919061a528565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615a8b90849060040161a5ba565b600060405180830381865afa158015615aa8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ad0919081019061a389565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615b1790849060040161a60c565b602060405180830381865afa158015615b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615b589190619add565b15615bed576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615ba290849060040161a60c565b600060405180830381865afa158015615bbf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615be7919081019061a389565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615c12919061a65e565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615c3e92919061a6ca565b600060405180830381865afa158015615c5b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615c83919081019061a389565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615cb35790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615d1357615d1361a6ef565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615d6757615d6761a6ef565b602002602001018190525084604051602001615d83919061a71e565b60405160208183030381529060405281600281518110615da557615da561a6ef565b602002602001018190525082604051602001615dc1919061a78a565b60405160208183030381529060405281600381518110615de357615de361a6ef565b60200260200101819052506000615df982616d26565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615e8a906040805180820182526000808252602091820152815180830190925284518252808501908201529061798b565b615e9f578560405160200161511e919061a7cb565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615ef9565b511590565b61606d57826020015115615fb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161515e565b8260c001511561606d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161515e565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161608657905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806160e19061a85c565b935060ff16815181106160f6576160f661a6ef565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616147919061a87b565b6040516020818303038152906040528282806161629061a85c565b935060ff16815181106161775761617761a6ef565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806161c49061a85c565b935060ff16815181106161d9576161d961a6ef565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806162269061a85c565b935060ff168151811061623b5761623b61a6ef565b602002602001018190525087602001518282806162579061a85c565b935060ff168151811061626c5761626c61a6ef565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806162b99061a85c565b935060ff16815181106162ce576162ce61a6ef565b6020908102919091010152875182826162e68161a85c565b935060ff16815181106162fb576162fb61a6ef565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806163489061a85c565b935060ff168151811061635d5761635d61a6ef565b6020026020010181905250616371466179ec565b828261637c8161a85c565b935060ff16815181106163915761639161a6ef565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806163de9061a85c565b935060ff16815181106163f3576163f361a6ef565b60200260200101819052508682828061640b9061a85c565b935060ff16815181106164205761642061a6ef565b60209081029190910101528551156165475760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826164718161a85c565b935060ff16815181106164865761648661a6ef565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906164d690899060040161a136565b600060405180830381865afa1580156164f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261651b919081019061a389565b82826165268161a85c565b935060ff168151811061653b5761653b61a6ef565b60200260200101819052505b8460200151156166175760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826165908161a85c565b935060ff16815181106165a5576165a561a6ef565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806165f29061a85c565b935060ff16815181106166075761660761a6ef565b60200260200101819052506167de565b61664f615ef48660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6166e25760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826166928161a85c565b935060ff16815181106166a7576166a761a6ef565b60200260200101819052508460a001516040516020016166c7919061a71e565b6040516020818303038152906040528282806165f29061a85c565b8460c0015115801561672557506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261672390511590565b155b156167de5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826167698161a85c565b935060ff168151811061677e5761677e61a6ef565b602002602001018190525061679288617a8c565b6040516020016167a2919061a71e565b6040516020818303038152906040528282806167bd9061a85c565b935060ff16815181106167d2576167d261a6ef565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261681290511590565b6168a75760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826168558161a85c565b935060ff168151811061686a5761686a61a6ef565b602002602001018190525084604001518282806168869061a85c565b935060ff168151811061689b5761689b61a6ef565b60200260200101819052505b6060850151156169c85760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826168f08161a85c565b935060ff16815181106169055761690561a6ef565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616974573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261699c919081019061a389565b82826169a78161a85c565b935060ff16815181106169bc576169bc61a6ef565b60200260200101819052505b60e08501515115616a6f5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616a128161a85c565b935060ff1681518110616a2757616a2761a6ef565b6020026020010181905250616a438560e00151600001516179ec565b8282616a4e8161a85c565b935060ff1681518110616a6357616a6361a6ef565b60200260200101819052505b60e08501516020015115616b195760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616abc8161a85c565b935060ff1681518110616ad157616ad161a6ef565b6020026020010181905250616aed8560e00151602001516179ec565b8282616af88161a85c565b935060ff1681518110616b0d57616b0d61a6ef565b60200260200101819052505b60e08501516040015115616bc35760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282616b668161a85c565b935060ff1681518110616b7b57616b7b61a6ef565b6020026020010181905250616b978560e00151604001516179ec565b8282616ba28161a85c565b935060ff1681518110616bb757616bb761a6ef565b60200260200101819052505b60e08501516060015115616c6d5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616c108161a85c565b935060ff1681518110616c2557616c2561a6ef565b6020026020010181905250616c418560e00151606001516179ec565b8282616c4c8161a85c565b935060ff1681518110616c6157616c6161a6ef565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616c8b57616c8b619aff565b604051908082528060200260200182016040528015616cbe57816020015b6060815260200190600190039081616ca95790505b50905060005b8260ff168160ff161015616d1757838160ff1681518110616ce757616ce761a6ef565b6020026020010151828260ff1681518110616d0457616d0461a6ef565b6020908102919091010152600101616cc4565b5093505050505b949350505050565b616d4d6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91616dd39186910161a8e6565b600060405180830381865afa158015616df0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616e18919081019061a389565b90506000616e26868361857b565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401616e5691906198b1565b6000604051808303816000875af1158015616e75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616e9d919081019061a92d565b805190915060030b15801590616eb65750602081015151155b8015616ec55750604081015151155b15615e9f5781600081518110616edd57616edd61a6ef565b602002602001015160405160200161511e919061a9e3565b60606000616f2a8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616f619082905b906186d0565b156170be576000616fde82616fd884616fd2616fa48a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906186f7565b90618759565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506170429082906186d0565b156170ac57604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170a9905b82906187de565b90505b6170b581618804565b92505050614f32565b82156170d757848460405160200161511e92919061abcf565b5050604080516020810190915260008152614f32565b509392505050565b6000808251602084016000f09392505050565b61571a82826001617220565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691617189919061ac76565b600060405180830381855afa9150503d80600081146171c4576040519150601f19603f3d011682016040523d82523d6000602084013e6171c9565b606091505b50915091508180156171dc575060208151115b156171f55780806020019051810190616d1e919061a389565b505060408051602081019091526000815292915050565b6000617218838361886d565b159392505050565b8160a001511561722f57505050565b600061723c848484618948565b9050600061724982616d26565b602081015181519192509060030b1580156172e55750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172e590604080518082018252600080825260209182015281518083019092528451825280850190820152616f5b565b156172f257505050505050565b6040820151511561731257816040015160405160200161511e919061ac92565b8060405160200161511e919061acf0565b606060006173588360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506173bd905b829061798b565b1561742c57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f3290617427908390618ee3565b618804565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261748e905b8290618f6d565b60010361755b57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174f4906170a2565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f3290617427905b83906187de565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ba906173b6565b156176f157604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617622908390619007565b9050600081600183516176359190619e7b565b815181106176455761764561a6ef565b602002602001015190506176e86174276176bb6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618ee3565b95945050505050565b8260405160200161511e919061ad5b565b50919050565b6060600061773d8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061779f906173b6565b156177ad57614f3281618804565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261780c90617487565b60010361787657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f329061742790617554565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178d5906173b6565b156176f157604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061793d908390619007565b90506001815111156179795780600282516179589190619e7b565b815181106179685761796861a6ef565b602002602001015192505050919050565b508260405160200161511e919061ad5b565b8051825160009111156179a057506000614e24565b815183516020850151600092916179b691619f36565b6179c09190619e7b565b9050826020015181036179d7576001915050614e24565b82516020840151819020912014905092915050565b606060006179f9836190ac565b600101905060008167ffffffffffffffff811115617a1957617a19619aff565b6040519080825280601f01601f191660200182016040528015617a43576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617a4d57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617b18905b829061720c565b15617b5857505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bb790617b11565b15617bf757505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c5690617b11565b15617c9657505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cf590617b11565b80617d5a5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d5a90617b11565b15617d9a57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617df990617b11565b80617e5e5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e5e90617b11565b15617e9e57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617efd90617b11565b80617f625750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f6290617b11565b15617fa257505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261800190617b11565b806180665750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261806690617b11565b156180a657505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261810590617b11565b1561814557505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526181a490617b11565b156181e457505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261824390617b11565b1561828357505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182e290617b11565b1561832257505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261838190617b11565b156183c157505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261842090617b11565b806184855750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261848590617b11565b156184c557505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261852490617b11565b1561856457505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161511e929060200161ae39565b60608060005b8451811015618606578185828151811061859d5761859d61a6ef565b60200260200101516040516020016185b692919061a237565b6040516020818303038152906040529150600185516185d59190619e7b565b81146185fe57816040516020016185ec919061afa2565b60405160208183030381529060405291505b600101618581565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161861f579050509050838160008151811061864a5761864a61a6ef565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061869e5761869e61a6ef565b602002602001018190525081816002815181106186bd576186bd61a6ef565b6020908102919091010152949350505050565b60208083015183518351928401516000936186ee929184919061918e565b14159392505050565b60408051808201909152600080825260208201526000618729846000015185602001518560000151866020015161929f565b905083602001518161873b9190619e7b565b8451859061874a908390619e7b565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561877e575081614e24565b60208083015190840151600191146187a55750815160208481015190840151829020919020145b80156187d6578251845185906187bc908390619e7b565b90525082516020850180516187d2908390619f36565b9052505b509192915050565b60408051808201909152600080825260208201526187fd8383836193bf565b5092915050565b60606000826000015167ffffffffffffffff81111561882557618825619aff565b6040519080825280601f01601f19166020018201604052801561884f576020820181803683370190505b50905060006020820190506187fd818560200151866000015161946a565b8151815160009190811115618880575081515b6020808501519084015160005b8381101561893957825182518082146189095760001960208710156188e8576001846188ba896020619e7b565b6188c49190619f36565b6188cf90600861afe3565b6188da90600261b0e1565b6188e49190619e7b565b1990505b8181168382168181039114618906579750614e249650505050505050565b50505b618914602086619f36565b9450618921602085619f36565b935050506020816189329190619f36565b905061888d565b5084518651615e9f919061b0ed565b6060600061895461571e565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161897157905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806189cc9061a85c565b935060ff16815181106189e1576189e161a6ef565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618a32919061b10d565b604051602081830303815290604052828280618a4d9061a85c565b935060ff1681518110618a6257618a6261a6ef565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618aaf9061a85c565b935060ff1681518110618ac457618ac461a6ef565b602002602001018190525082604051602001618ae0919061a78a565b604051602081830303815290604052828280618afb9061a85c565b935060ff1681518110618b1057618b1061a6ef565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618b5d9061a85c565b935060ff1681518110618b7257618b7261a6ef565b6020026020010181905250618b8787846194e4565b8282618b928161a85c565b935060ff1681518110618ba757618ba761a6ef565b602090810291909101015285515115618c535760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282618bf98161a85c565b935060ff1681518110618c0e57618c0e61a6ef565b6020026020010181905250618c278660000151846194e4565b8282618c328161a85c565b935060ff1681518110618c4757618c4761a6ef565b60200260200101819052505b856080015115618cc15760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282618c9c8161a85c565b935060ff1681518110618cb157618cb161a6ef565b6020026020010181905250618d27565b8415618d275760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282618d068161a85c565b935060ff1681518110618d1b57618d1b61a6ef565b60200260200101819052505b60408601515115618dc35760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618d718161a85c565b935060ff1681518110618d8657618d8661a6ef565b60200260200101819052508560400151828280618da29061a85c565b935060ff1681518110618db757618db761a6ef565b60200260200101819052505b856060015115618e2d5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618e0c8161a85c565b935060ff1681518110618e2157618e2161a6ef565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618e4b57618e4b619aff565b604051908082528060200260200182016040528015618e7e57816020015b6060815260200190600190039081618e695790505b50905060005b8260ff168160ff161015618ed757838160ff1681518110618ea757618ea761a6ef565b6020026020010151828260ff1681518110618ec457618ec461a6ef565b6020908102919091010152600101618e84565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618f08575081614e24565b81518351602085015160009291618f1e91619f36565b618f289190619e7b565b60208401519091506001908214618f49575082516020840151819020908220145b8015618f6457835185518690618f60908390619e7b565b9052505b50929392505050565b6000808260000151618f91856000015186602001518660000151876020015161929f565b618f9b9190619f36565b90505b83516020850151618faf9190619f36565b81116187fd5781618fbf8161b152565b9250508260000151618ff6856020015183618fda9190619e7b565b8651618fe69190619e7b565b838660000151876020015161929f565b6190009190619f36565b9050618f9e565b606060006190158484618f6d565b619020906001619f36565b67ffffffffffffffff81111561903857619038619aff565b60405190808252806020026020018201604052801561906b57816020015b60608152602001906001900390816190565790505b50905060005b81518110156170ed5761908761742786866187de565b8282815181106190995761909961a6ef565b6020908102919091010152600101619071565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106190f5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619121576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061913f57662386f26fc10000830492506010015b6305f5e1008310619157576305f5e100830492506008015b612710831061916b57612710830492506004015b6064831061917d576064830492506002015b600a8310614e245760010192915050565b600080858411619295576020841161924157600084156191d95760016191b5866020619e7b565b6191c090600861afe3565b6191cb90600261b0e1565b6191d59190619e7b565b1990505b83518116856191e88989619f36565b6191f29190619e7b565b805190935082165b81811461922c578784116192145787945050505050616d1e565b8361921e8161b16c565b9450508284511690506191fa565b6192368785619f36565b945050505050616d1e565b83832061924e8588619e7b565b6192589087619f36565b91505b85821061929357848220808203619280576192768684619f36565b9350505050616d1e565b61928b600184619e7b565b92505061925b565b505b5092949350505050565b600083818685116193aa576020851161935957600085156192eb5760016192c7876020619e7b565b6192d290600861afe3565b6192dd90600261b0e1565b6192e79190619e7b565b1990505b845181166000876192fc8b8b619f36565b6193069190619e7b565b855190915083165b82811461934b57818610619333576193268b8b619f36565b9650505050505050616d1e565b8561933d8161b152565b96505083865116905061930e565b859650505050505050616d1e565b508383206000905b61936b8689619e7b565b82116193a8578583208082036193875783945050505050616d1e565b619392600185619f36565b93505081806193a09061b152565b925050619361565b505b6193b48787619f36565b979650505050505050565b604080518082019091526000808252602082015260006193f1856000015186602001518660000151876020015161929f565b60208087018051918601919091525190915061940d9082619e7b565b8352845160208601516194209190619f36565b810361942f5760008552619461565b8351835161943d9190619f36565b8551869061944c908390619e7b565b905250835161945b9082619f36565b60208601525b50909392505050565b602081106194a25781518352619481602084619f36565b925061948e602083619f36565b915061949b602082619e7b565b905061946a565b60001981156194d15760016194b8836020619e7b565b6194c49061010061b0e1565b6194ce9190619e7b565b90505b9151835183169219169190911790915250565b606060006194f284846157f1565b805160208083015160405193945061950c9390910161b183565b60405160208183030381529060405291505092915050565b610b678061b1dc83390190565b61063d8061bd4383390190565b61106f8061c38083390190565b6120728061d3ef83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161959b6195a0565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161959b6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156196525783516001600160a01b031683526020938401939092019160010161962b565b509095945050505050565b60005b83811015619678578181015183820152602001619660565b50506000910152565b6000815180845261969981602086016020860161965d565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561978f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352619779848651619681565b602095860195909450929092019160010161973f565b5091975050506020948501949290920191506001016196d5565b50929695505050505050565b600081518084526020840193506020830160005b828110156198095781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016197c9565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261987f6040880182619681565b905060208201519150868103602088015261989a81836197b5565b96505050602093840193919091019060010161983b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619913858351619681565b945060209384019391909101906001016198d9565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156197a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526199a960408701826197b5565b9550506020938401939190910190600101619950565b6000602082840312156199d157600080fd5b81516001600160a01b0381168114614f3257600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619aa2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152619ac360c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215619aef57600080fd5b81518015158114614f3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c90821680619b4257607f821691505b602082108103617702577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115612d4457806000526020600020601f840160051c81016020851015619ba25750805b601f840160051c820191505b818110156120485760008155600101619bae565b815167ffffffffffffffff811115619bdc57619bdc619aff565b619bf081619bea8454619b2e565b84619b7b565b6020601f821160018114619c245760008315619c0c5750848201515b600019600385901b1c1916600184901b178455612048565b600084815260208120601f198516915b82811015619c545787850151825560209485019460019092019101619c34565b5084821015619c725786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215619c9357600080fd5b5051919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a0606085015260008154619ce481619b2e565b8060a08801526001821660008114619d035760018114619d3d57619d71565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b8901019350619d71565b84600052602060002060005b83811015619d685781548a820160c00152600190910190602001619d49565b890160c0019450505b50505060038401546080860152809250505092915050565b60c081526000619d9c60c0830189619681565b8760208401526001600160a01b03871660408401528281036060840152619dc38187619681565b905084608084015282810360a0840152619ddd8185619c9a565b9998505050505050505050565b61010081526000619dff61010083018b619681565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a0840152619e328187619681565b90508460c084015282810360e084015261523e8185619c9a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115614e2457614e24619e4c565b61010081526000619ea361010083018a619681565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e085015250619eee6020820185619c9a565b9a9950505050505050505050565b608081526000619f0f6080830187619681565b8560208401526001600160a01b038516604084015282810360608401526193b48185619c9a565b80820180821115614e2457614e24619e4c565b60a081526000619f5c60a0830188619681565b6001600160a01b03871660208401528281036040840152619f7d8187619681565b90508460608401528281036080840152619f978185619c9a565b98975050505050505050565b600082619fd9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60a081526000619ff160a0830188619681565b866020840152856040840152828103606084015261a00f8186619681565b90508281036080840152619f978185619c9a565b60808152600061a0366080830187619681565b85602084015284604084015282810360608401526193b48185619c9a565b60808152600061a0676080830187619681565b828103602084015261a0798187619681565b905084604084015282810360608401526193b48185619c9a565b6001600160a01b0383168152604060208201526000616d1e6040830184619681565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a0ed81601a85016020880161965d565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a12a81601c84016020880161965d565b01601c01949350505050565b602081526000614f326020830184619681565b6040516060810167ffffffffffffffff8111828210171561a16c5761a16c619aff565b60405290565b60008067ffffffffffffffff84111561a18d5761a18d619aff565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a1bc5761a1bc619aff565b60405283815290508082840185101561a1d457600080fd5b6170ed84602083018561965d565b600082601f83011261a1f357600080fd5b614f328383516020850161a172565b60006020828403121561a21457600080fd5b815167ffffffffffffffff81111561a22b57600080fd5b614e208482850161a1e2565b6000835161a24981846020880161965d565b83519083019061a25d81836020880161965d565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a29e81601a85016020880161965d565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a2db81603384016020880161965d565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006176e86060830184619681565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f326080830184619681565b60006020828403121561a39b57600080fd5b815167ffffffffffffffff81111561a3b257600080fd5b8201601f8101841361a3c357600080fd5b614e208482516020840161a172565b6000855161a3e4818460208a0161965d565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a41e816001840160208a0161965d565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a45c81600284016020890161965d565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a49e81600284016020880161965d565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a4e96040830184619681565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a56081601f85016020870161965d565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a5cd6040830184619681565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a61f6040830184619681565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a69681601485016020870161965d565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061a6dd6040830185619681565b8281036020840152614f2e8185619681565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a75681600185016020870161965d565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a79c81846020870161965d565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a84f81604b85016020870161965d565b91909101604b0192915050565b600060ff821660ff810361a8725761a872619e4c565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a8d981602985016020870161965d565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f326080830184619681565b60006020828403121561a93f57600080fd5b815167ffffffffffffffff81111561a95657600080fd5b82016060818503121561a96857600080fd5b61a97061a149565b81518060030b811461a98157600080fd5b8152602082015167ffffffffffffffff81111561a99d57600080fd5b61a9a98682850161a1e2565b602083015250604082015167ffffffffffffffff81111561a9c957600080fd5b61a9d58682850161a1e2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161aa4181602185016020870161965d565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161ac2d81602185016020880161965d565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161ac6a81602e84016020880161965d565b01602e01949350505050565b6000825161ac8881846020870161965d565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a8d981602985016020870161965d565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161ad4e81602285016020870161965d565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161ad9381600e85016020870161965d565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161ae7181601885016020880161965d565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161aeae81601c84016020880161965d565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161afb481846020870161965d565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417614e2457614e24619e4c565b6001815b600184111561b0355780850481111561b0195761b019619e4c565b600184161561b02757908102905b60019390931c92800261affe565b935093915050565b60008261b04c57506001614e24565b8161b05957506000614e24565b816001811461b06f576002811461b0795761b095565b6001915050614e24565b60ff84111561b08a5761b08a619e4c565b50506001821b614e24565b5060208310610133831016604e8410600b841016171561b0b8575081810a614e24565b61b0c5600019848461affa565b806000190482111561b0d95761b0d9619e4c565b029392505050565b6000614f32838361b03d565b81810360008312801583831316838312821617156187fd576187fd619e4c565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b14581601c85016020870161965d565b91909101601c0192915050565b6000600019820361b1655761b165619e4c565b5060010190565b60008161b17b5761b17b619e4c565b506000190190565b6000835161b19581846020880161965d565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161b1cf81600184016020880161965d565b0160010194935050505056fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c80635bcfd61614610033578063660b9de01461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610169565b610073565b34801561005f57600080fd5b5061003161006e366004610221565b6100ee565b6060811561008a576100878284018461028d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610383565b6100c560408a0160208b016103ef565b896040013533866040516100de9695949392919061045a565b60405180910390a1505050505050565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c768160405161011d919061051c565b60405180910390a150565b60006060828403121561013a57600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016457600080fd5b919050565b60008060008060006080868803121561018157600080fd5b853567ffffffffffffffff81111561019857600080fd5b6101a488828901610128565b9550506101b360208701610140565b935060408601359250606086013567ffffffffffffffff8111156101d657600080fd5b8601601f810188136101e757600080fd5b803567ffffffffffffffff8111156101fe57600080fd5b88602082840101111561021057600080fd5b959894975092955050506020019190565b60006020828403121561023357600080fd5b813567ffffffffffffffff81111561024a57600080fd5b61025684828501610128565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561029f57600080fd5b813567ffffffffffffffff8111156102b657600080fd5b8201601f810184136102c757600080fd5b803567ffffffffffffffff8111156102e1576102e161025e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561034d5761034d61025e565b60405281815282820160200186101561036557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126103b857600080fd5b83018035915067ffffffffffffffff8211156103d357600080fd5b6020019150368190038213156103e857600080fd5b9250929050565b60006020828403121561040157600080fd5b61040a82610140565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a08152600061046e60a08301888a610411565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156104d8576020818701810151848301820152016104bc565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683010192505050979650505050505050565b6020815273ffffffffffffffffffffffffffffffffffffffff61053e83610140565b1660208201526000602083013567ffffffffffffffff811680821461056257600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261059f57600080fd5b830160208101903567ffffffffffffffff8111156105bc57600080fd5b8036038213156105cb57600080fd5b6060808501526105df608085018284610411565b9594505050505056fea2646970667358221220078ed23f1e4df13b41aee8ed02311eda755ac8a9fe6e1a9a5736af6396fa30f964736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220e022243ea23b9a8b3124c978103fdd8ef6145763525499fed01d4848faff43a264736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220eb6dd296db136f982a2d8d007c1bf106961bdc78dd89452a1251c4f96fff0fd864736f6c634300081a0033", } // GatewayZEVMInboundTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go index 3cdf826ce..f1bc38550 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go @@ -66,7 +66,7 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMOutboundTestMetaData contains all meta data concerning the GatewayZEVMOutboundTest contract. var GatewayZEVMOutboundTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversal\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ff488061003c6000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c806385226c81116101bd578063ba414fa6116100f9578063e20c9f71116100a2578063ec294d9f1161007c578063ec294d9f1461054a578063ef2b539414610552578063fa7626d41461055a578063fb339a1c1461056757600080fd5b8063e20c9f7114610505578063e63ab1e91461050d578063eab7674e1461054257600080fd5b8063d9978513116100d3578063d9978513146104ed578063d9a4fa16146104f5578063e09bc659146104fd57600080fd5b8063ba414fa6146104c5578063c7b388b1146104dd578063c8814d2e146104e557600080fd5b80639c9acd5d11610166578063b0464fdc11610140578063b0464fdc146104a5578063b5508aa9146104ad578063b8f2b821146104b5578063b936be8c146104bd57600080fd5b80639c9acd5d1461048d5780639ca37e9214610495578063a0b2c7b11461049d57600080fd5b806396d9d8761161019757806396d9d8761461047d57806397f7661f14610443578063996b76751461048557600080fd5b806385226c811461044b578063884660a314610460578063916a17c61461046857600080fd5b80633f7286f41161028c5780635cec7db5116102355780636efa04b51161020f5780636efa04b51461042b5780637cec29b0146104335780637f924c4e1461043b578063828d267c1461044357600080fd5b80635cec7db51461040657806366d9a9a01461040e578063671b91e21461042357600080fd5b806351336fb01161026657806351336fb0146103f657806358c9987f146103fe5780635b4c90e1146103a157600080fd5b80633f7286f4146103de57806344b2a40b146103e657806348f4fd07146103ee57600080fd5b80632468bc0f116102f95780632fa381f4116102d35780632fa381f4146103be578063339bd828146103c65780633ab5b199146103ce5780633e5e3c23146103d657600080fd5b80632468bc0f146103995780632948df41146103a15780632ade3880146103a957600080fd5b8063198d5ca41161032a578063198d5ca41461036b5780631c785a14146103735780631ed7831c1461037b57600080fd5b8063084fafab146103515780630a9254e41461035b57806314b7a6da14610363575b600080fd5b61035961056f565b005b610359610745565b610359611252565b6103596113a2565b610359611625565b610383611f3c565b604051610390919061a1f6565b60405180910390f35b610359611f9e565b610359612469565b6103b1612652565b604051610390919061a292565b610359612794565b610359612986565b610359612ad2565b610383612c83565b610383612ce3565b610359612d43565b610359612ecb565b610359613016565b610359613161565b610359613316565b6104166134cd565b604051610390919061a3f8565b61035961364f565b61035961379d565b610359613b41565b610359613db4565b610359613ded565b610453613f99565b604051610390919061a496565b610359614069565b610470614348565b604051610390919061a50d565b610359614443565b610359614596565b6103596146ea565b61035961483a565b610359614971565b610470614b2c565b610453614c27565b610359614cf7565b610359614e45565b6104cd615128565b6040519015158152602001610390565b6103596151fc565b6103596153ba565b6103596154fc565b6103596155c4565b610359615782565b61038361593b565b6105347f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b604051908152602001610390565b61035961599b565b610359615ae9565b610359615c98565b601f546104cd9060ff1681565b610359615e49565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156105fe57600080fd5b505af1158015610612573d6000803e3d6000fd5b505050507f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76602c604051610646919061a6c6565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156106a857600080fd5b505af11580156106bc573d6000803e3d6000fd5b50506020546024546040517f717d335f0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063717d335f93506107119290911690602c9060040161a6d9565b600060405180830381600087803b15801561072b57600080fd5b505af115801561073f573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161078b9061a109565b604051809103906000f0801580156107a7573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602554915160248101939093529216604482015261088b919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052615ffc565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610971919061a6fb565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516109b59061a116565b604051809103906000f0801580156109d1573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610a6d57600080fd5b505af1158015610a81573d6000803e3d6000fd5b505050506000806000604051610a969061a123565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610ad2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610b289061a130565b610b379695949392919061a724565b604051809103906000f080158015610b53573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610c6857600080fd5b505af1158015610c7c573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610cfc57600080fd5b505af1158015610d10573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e11919061a819565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea6919061a819565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b919061a819565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015611115573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611139919061a819565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505060408051606081018252600080825260016020808401918252845190810185529182529282018190528151602c8054945167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009095166001600160a01b039290921691909117939093178355909350909150602d9061124d908261a8b1565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156112ab57600080fd5b505af11580156112bf573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561132f57600080fd5b505af1158015611343573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc9150606401610711565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156113f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611417919061a970565b905061142460008261601b565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561147d57600080fd5b505af1158015611491573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561150157600080fd5b505af1158015611515573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561158d57600080fd5b505af11580156115a1573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611618919061a970565b905061124d60008261601b565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561167e57600080fd5b505af1158015611692573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061177d919060040161a989565b600060405180830381600087803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117ff57600080fd5b505af1158015611813573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561187057600080fd5b505af1158015611884573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061196f919060040161a989565b600060405180830381600087803b15801561198957600080fd5b505af115801561199d573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119f157600080fd5b505af1158015611a05573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a6257600080fd5b505af1158015611a76573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611aca57600080fd5b505af1158015611ade573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b158015611b5157600080fd5b505af1158015611b65573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611bc257600080fd5b505af1158015611bd6573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611c4e57600080fd5b505af1158015611c62573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611cbf57600080fd5b505af1158015611cd3573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d2757600080fd5b505af1158015611d3b573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db3919061a970565b9050611dc060008261601b565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611e1957600080fd5b505af1158015611e2d573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611ea557600080fd5b505af1158015611eb9573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f30919061a970565b905061124d838261601b565b60606016805480602002602001604051908101604052809291908181526020018280548015611f9457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f76575b5050505050905090565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611fef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612013919061a970565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061a970565b6024546040519192506001600160a01b031631906000906120ac9060200161a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061220993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054612239936001600160a01b03928316928c92169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561229a57600080fd5b505af11580156122ae573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506123059286928c92911690889060040161aa8a565b600060405180830381600087803b15801561231f57600080fd5b505af1158015612333573d6000803e3d6000fd5b50506022546027546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612386573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123aa919061a970565b90506123bf6123b9888861aaf3565b8261601b565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612410573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612434919061a970565b9050612440868261601b565b61245f61244d898761ab06565b6024546001600160a01b03163161601b565b5050505050505050565b600060405160200161247a9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561252857600080fd5b505af115801561253c573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156125ac57600080fd5b505af11580156125c0573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061261c92869260009260019290911690899060040161ab19565b600060405180830381600087803b15801561263657600080fd5b505af115801561264a573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561278b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156127745783829060005260206000200180546126e79061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546127139061a5a4565b80156127605780601f1061273557610100808354040283529160200191612760565b820191906000526020600020905b81548152906001019060200180831161274357829003601f168201915b5050505050815260200190600101906126c8565b505050508152505081526020019060010190612676565b50505050905090565b6040516001906000906127a99060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561287357600080fd5b505af1158015612887573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156128e457600080fd5b505af11580156128f8573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061294f9286928992911690889060040161aa8a565b600060405180830381600087803b15801561296957600080fd5b505af115801561297d573d6000803e3d6000fd5b50505050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156129df57600080fd5b505af11580156129f3573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612a6357600080fd5b505af1158015612a77573d6000803e3d6000fd5b50506020546021546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb7693506107119290911690600190600090602c9060040161ab6e565b6000604051602001612ae39061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612b9157600080fd5b505af1158015612ba5573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612c1557600080fd5b505af1158015612c29573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061261c9286921690600190600090899060040161ab19565b60606018805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d9f57600080fd5b505af1158015612db3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612e2357600080fd5b505af1158015612e37573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015612eb057600080fd5b505af1158015612ec4573d6000803e3d6000fd5b5050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f2457600080fd5b505af1158015612f38573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612fa857600080fd5b505af1158015612fbc573d6000803e3d6000fd5b50506020546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb76935061071192600092600192911690602c9060040161ab6e565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561308257600080fd5b505af1158015613096573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156130f357600080fd5b505af1158015613107573d6000803e3d6000fd5b50506020546021546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb76935061071192909116906001908590602c9060040161ab6e565b60006040516020016131729061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561322057600080fd5b505af1158015613234573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156132a457600080fd5b505af11580156132b8573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600092911690899060040161ab19565b60405160019060009061332b9060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156133f557600080fd5b505af1158015613409573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561346657600080fd5b505af115801561347a573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061294f90849087908590889060040161aa8a565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561278b57838290600052602060002090600202016040518060400160405290816000820180546135249061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546135509061a5a4565b801561359d5780601f106135725761010080835404028352916020019161359d565b820191906000526020600020905b81548152906001019060200180831161358057829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561363757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135e45790505b505050505081525050815260200190600101906134f1565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156136bb57600080fd5b505af11580156136cf573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561372c57600080fd5b505af1158015613740573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926001921690602c9060040161ab6e565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156137ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613811919061a970565b905061381e60008261601b565b600060405160200161382f9061a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561391d57600080fd5b505af1158015613931573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061398c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526027546020546139bd936001600160a01b0392831692600192169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a1e57600080fd5b505af1158015613a32573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613a90938793811692600192911690899060040161ab19565b600060405180830381600087803b158015613aaa57600080fd5b505af1158015613abe573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b34919061a970565b905061073f60018261601b565b6000604051602001613b529061a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c4057600080fd5b505af1158015613c54573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613caf93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613ce0936001600160a01b0392831692600192169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015613d4257600080fd5b505af1158015613d56573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061261c938793811692600192911690899060040161ab19565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401611d72565b6000604051602001613dfe9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015613eac57600080fd5b505af1158015613ec0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613f3057600080fd5b505af1158015613f44573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061261c908490600190600090889060040161aa8a565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561278b578382906000526020600020018054613fdc9061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546140089061a5a4565b80156140555780601f1061402a57610100808354040283529160200191614055565b820191906000526020600020905b81548152906001019060200180831161403857829003601f168201915b505050505081526020019060010190613fbd565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156140b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140dd919061a970565b90506140ea60008261601b565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561417957600080fd5b505af115801561418d573d6000803e3d6000fd5b505050507f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76602c6040516141c1919061a6c6565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561422257600080fd5b505af1158015614236573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061429393928316926001921690602c9060040161ab6e565b600060405180830381600087803b1580156142ad57600080fd5b505af11580156142c1573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015614313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614337919061a970565b905061434460018261601b565b5050565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561278b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561442b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116143d85790505b5050505050815250508152602001906001019061436c565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561449f57600080fd5b505af11580156144b3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561452357600080fd5b505af1158015614537573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401612e96565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156145ef57600080fd5b505af1158015614603573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561467357600080fd5b505af1158015614687573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc9150606401610711565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561474357600080fd5b505af1158015614757573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156147c757600080fd5b505af11580156147db573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc9150606401610711565b600060405160200161484b9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561491557600080fd5b505af1158015614929573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401613d28565b6040516001906000906149869060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015614a5057600080fd5b505af1158015614a64573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614ac157600080fd5b505af1158015614ad5573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061294f9286928992911690889060040161aa8a565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561278b5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015614c0f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411614bbc5790505b50505050508152505081526020019060010190614b50565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561278b578382906000526020600020018054614c6a9061a5a4565b80601f0160208091040260200160405190810160405280929190818152602001828054614c969061a5a4565b8015614ce35780601f10614cb857610100808354040283529160200191614ce3565b820191906000526020600020905b815481529060010190602001808311614cc657829003601f168201915b505050505081526020019060010190614c4b565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614d6357600080fd5b505af1158015614d77573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614dd457600080fd5b505af1158015614de8573d6000803e3d6000fd5b50506020546021546027546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926001921690602c9060040161ab6e565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614eba919061a970565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f30919061a970565b6024546040519192506001600160a01b03163190600090614f539060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561500157600080fd5b505af1158015615015573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561508557600080fd5b505af1158015615099573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a9591506150ee908490600190600090889060040161aa8a565b600060405180830381600087803b15801561510857600080fd5b505af115801561511c573d6000803e3d6000fd5b50505050505050505050565b60085460009060ff1615615140575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156151d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151f5919061a970565b1415905090565b600060405160200161520d9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156152d757600080fd5b505af11580156152eb573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561534857600080fd5b505af115801561535c573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600192911690899060040161ab19565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561541357600080fd5b505af1158015615427573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561549757600080fd5b505af11580156154ab573d6000803e3d6000fd5b50506020546040517f717d335f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063717d335f915061071190600090602c9060040161a6d9565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561556857600080fd5b505af115801561557c573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa7915060240161068e565b60006040516020016155d59061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561569f57600080fd5b505af11580156156b3573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561571057600080fd5b505af1158015615724573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600192911690899060040161ab19565b60006040516020016157939061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561585d57600080fd5b505af1158015615871573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156158ce57600080fd5b505af11580156158e2573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c92869216906001908690899060040161ab19565b60606015805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156159f457600080fd5b505af1158015615a08573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615a7857600080fd5b505af1158015615a8c573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926000921690602c9060040161ab6e565b6000604051602001615afa9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615ba857600080fd5b505af1158015615bbc573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615c2c57600080fd5b505af1158015615c40573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061261c928692600092911690889060040161aa8a565b6000604051602001615ca99061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615d5757600080fd5b505af1158015615d6b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615ddb57600080fd5b505af1158015615def573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c9286921690600190600090899060040161ab19565b6000604051602001615e5a9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615f0857600080fd5b505af1158015615f1c573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615f8c57600080fd5b505af1158015615fa0573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c92869260009260019290911690899060040161ab19565b600061600661a13d565b61601184848361609a565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561608657600080fd5b505afa15801561264a573d6000803e3d6000fd5b6000806160a78584616115565b905061610a6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016160f592919061aba5565b60405160208183030381529060405285616121565b9150505b9392505050565b600061610e838361614f565b60c081015151600090156161455761613e84848460c0015161616a565b905061610e565b61613e8484616310565b600061615b83836163fb565b61610e83836020015184616121565b600080616175616407565b9050600061618386836164da565b9050600061619a8260600151836020015185616980565b905060006161aa83838989616b92565b905060006161b782617a0f565b602081015181519192509060030b1561622a578982604001516040516020016161e192919061abc7565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526162219160040161a989565b60405180910390fd5b600061626d6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617bde565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906162c090849060040161a989565b602060405180830381865afa1580156162dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616301919061a6fb565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061636590879060040161a989565b600060405180830381865afa158015616382573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163aa919081019061ad01565b905060006163d882856040516020016163c492919061ad36565b604051602081830303815290604052617dde565b90506001600160a01b0381166160115784846040516020016161e192919061ad65565b61434482826000617df1565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061648e90849060040161ae10565b600060405180830381865afa1580156164ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164d3919081019061ae57565b9250505090565b61650c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506165576040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61656085617ef4565b60208201526000616570866182d9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156165b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165da919081019061ae57565b868385602001516040516020016165f4949392919061aea0565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061664c90859060040161a989565b600060405180830381865afa158015616669573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616691919081019061ae57565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906166d990849060040161afa4565b602060405180830381865afa1580156166f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061671a919061a819565b61672f57816040516020016161e1919061aff6565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061677490849060040161b088565b600060405180830381865afa158015616791573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167b9919081019061ae57565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061680090849060040161b0da565b602060405180830381865afa15801561681d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616841919061a819565b156168d6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061688b90849060040161b0da565b600060405180830381865afa1580156168a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168d0919081019061ae57565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016168fb919061b12c565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161692792919061b198565b600060405180830381865afa158015616944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261696c919081019061ae57565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161699c5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106169fc576169fc61b1bd565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110616a5057616a5061b1bd565b602002602001018190525084604051602001616a6c919061b1ec565b60405160208183030381529060405281600281518110616a8e57616a8e61b1bd565b602002602001018190525082604051602001616aaa919061b258565b60405160208183030381529060405281600381518110616acc57616acc61b1bd565b60200260200101819052506000616ae282617a0f565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616b73906040805180820182526000808252602091820152815180830190925284518252808501908201529061855c565b616b8857856040516020016161e1919061b299565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616be2565b511590565b616d5657826020015115616c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616221565b8260c0015115616d56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616221565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616d6f57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616dca9061b32a565b935060ff1681518110616ddf57616ddf61b1bd565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616e30919061b349565b604051602081830303815290604052828280616e4b9061b32a565b935060ff1681518110616e6057616e6061b1bd565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616ead9061b32a565b935060ff1681518110616ec257616ec261b1bd565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616f0f9061b32a565b935060ff1681518110616f2457616f2461b1bd565b60200260200101819052508760200151828280616f409061b32a565b935060ff1681518110616f5557616f5561b1bd565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616fa29061b32a565b935060ff1681518110616fb757616fb761b1bd565b602090810291909101015287518282616fcf8161b32a565b935060ff1681518110616fe457616fe461b1bd565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806170319061b32a565b935060ff16815181106170465761704661b1bd565b602002602001018190525061705a466185bd565b82826170658161b32a565b935060ff168151811061707a5761707a61b1bd565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806170c79061b32a565b935060ff16815181106170dc576170dc61b1bd565b6020026020010181905250868282806170f49061b32a565b935060ff16815181106171095761710961b1bd565b60209081029190910101528551156172305760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261715a8161b32a565b935060ff168151811061716f5761716f61b1bd565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906171bf90899060040161a989565b600060405180830381865afa1580156171dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617204919081019061ae57565b828261720f8161b32a565b935060ff16815181106172245761722461b1bd565b60200260200101819052505b8460200151156173005760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826172798161b32a565b935060ff168151811061728e5761728e61b1bd565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806172db9061b32a565b935060ff16815181106172f0576172f061b1bd565b60200260200101819052506174c7565b617338616bdd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6173cb5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261737b8161b32a565b935060ff16815181106173905761739061b1bd565b60200260200101819052508460a001516040516020016173b0919061b1ec565b6040516020818303038152906040528282806172db9061b32a565b8460c0015115801561740e57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261740c90511590565b155b156174c75760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826174528161b32a565b935060ff16815181106174675761746761b1bd565b602002602001018190525061747b8861865d565b60405160200161748b919061b1ec565b6040516020818303038152906040528282806174a69061b32a565b935060ff16815181106174bb576174bb61b1bd565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526174fb90511590565b6175905760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261753e8161b32a565b935060ff16815181106175535761755361b1bd565b6020026020010181905250846040015182828061756f9061b32a565b935060ff16815181106175845761758461b1bd565b60200260200101819052505b6060850151156176b15760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826175d98161b32a565b935060ff16815181106175ee576175ee61b1bd565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561765d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617685919081019061ae57565b82826176908161b32a565b935060ff16815181106176a5576176a561b1bd565b60200260200101819052505b60e085015151156177585760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826176fb8161b32a565b935060ff16815181106177105761771061b1bd565b602002602001018190525061772c8560e00151600001516185bd565b82826177378161b32a565b935060ff168151811061774c5761774c61b1bd565b60200260200101819052505b60e085015160200151156178025760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826177a58161b32a565b935060ff16815181106177ba576177ba61b1bd565b60200260200101819052506177d68560e00151602001516185bd565b82826177e18161b32a565b935060ff16815181106177f6576177f661b1bd565b60200260200101819052505b60e085015160400151156178ac5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261784f8161b32a565b935060ff16815181106178645761786461b1bd565b60200260200101819052506178808560e00151604001516185bd565b828261788b8161b32a565b935060ff16815181106178a0576178a061b1bd565b60200260200101819052505b60e085015160600151156179565760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826178f98161b32a565b935060ff168151811061790e5761790e61b1bd565b602002602001018190525061792a8560e00151606001516185bd565b82826179358161b32a565b935060ff168151811061794a5761794a61b1bd565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156179745761797461a83b565b6040519080825280602002602001820160405280156179a757816020015b60608152602001906001900390816179925790505b50905060005b8260ff168160ff161015617a0057838160ff16815181106179d0576179d061b1bd565b6020026020010151828260ff16815181106179ed576179ed61b1bd565b60209081029190910101526001016179ad565b5093505050505b949350505050565b617a366040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617abc9186910161b3b4565b600060405180830381865afa158015617ad9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617b01919081019061ae57565b90506000617b0f868361914c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617b3f919061a496565b6000604051808303816000875af1158015617b5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617b86919081019061b3fb565b805190915060030b15801590617b9f5750602081015151155b8015617bae5750604081015151155b15616b885781600081518110617bc657617bc661b1bd565b60200260200101516040516020016161e1919061b4b1565b60606000617c138560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617c4a9082905b906192a1565b15617da7576000617cc782617cc184617cbb617c8d8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906192c8565b9061932a565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617d2b9082906192a1565b15617d9557604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d92905b82906193af565b90505b617d9e816193d5565b9250505061610e565b8215617dc05784846040516020016161e192919061b69d565b505060408051602081019091526000815261610e565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617e0057505050565b6000617e0d84848461943e565b90506000617e1a82617a0f565b602081015181519192509060030b158015617eb65750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617eb690604080518082018252600080825260209182015281518083019092528451825280850190820152617c44565b15617ec357505050505050565b60408201515115617ee35781604001516040516020016161e1919061b744565b806040516020016161e1919061b7a2565b60606000617f298360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617f8e905b829061855c565b15617ffd57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff89083906199d9565b6193d5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261805f905b8290619a63565b60010361812c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180c590617d8b565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff8905b83906193af565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261818b90617f87565b156182c257604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906181f3908390619afd565b905060008160018351618206919061aaf3565b815181106182165761821661b1bd565b602002602001015190506182b9617ff861828c6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906199d9565b95945050505050565b826040516020016161e1919061b80d565b50919050565b6060600061830e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061837090617f87565b1561837e5761610e816193d5565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526183dd90618058565b60010361844757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff890618125565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184a690617f87565b156182c257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061850e908390619afd565b905060018151111561854a578060028251618529919061aaf3565b815181106185395761853961b1bd565b602002602001015192505050919050565b50826040516020016161e1919061b80d565b80518251600091111561857157506000616015565b815183516020850151600092916185879161ab06565b618591919061aaf3565b9050826020015181036185a8576001915050616015565b82516020840151819020912014905092915050565b606060006185ca83619ba2565b600101905060008167ffffffffffffffff8111156185ea576185ea61a83b565b6040519080825280601f01601f191660200182016040528015618614576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461861e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916186e9905b8290619c84565b1561872957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618788906186e2565b156187c857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618827906186e2565b1561886757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188c6906186e2565b8061892b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261892b906186e2565b1561896b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189ca906186e2565b80618a2f5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a2f906186e2565b15618a6f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ace906186e2565b80618b335750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b33906186e2565b15618b7357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bd2906186e2565b80618c375750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c37906186e2565b15618c7757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cd6906186e2565b15618d1657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d75906186e2565b15618db557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e14906186e2565b15618e5457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618eb3906186e2565b15618ef357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f52906186e2565b15618f9257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ff1906186e2565b806190565750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619056906186e2565b1561909657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190f5906186e2565b1561913557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516161e1929060200161b8eb565b60608060005b84518110156191d7578185828151811061916e5761916e61b1bd565b602002602001015160405160200161918792919061ad36565b6040516020818303038152906040529150600185516191a6919061aaf3565b81146191cf57816040516020016191bd919061ba54565b60405160208183030381529060405291505b600101619152565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816191f0579050509050838160008151811061921b5761921b61b1bd565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061926f5761926f61b1bd565b6020026020010181905250818160028151811061928e5761928e61b1bd565b6020908102919091010152949350505050565b60208083015183518351928401516000936192bf9291849190619c98565b14159392505050565b604080518082019091526000808252602082015260006192fa8460000151856020015185600001518660200151619da9565b905083602001518161930c919061aaf3565b8451859061931b90839061aaf3565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561934f575081616015565b60208083015190840151600191146193765750815160208481015190840151829020919020145b80156193a75782518451859061938d90839061aaf3565b90525082516020850180516193a390839061ab06565b9052505b509192915050565b60408051808201909152600080825260208201526193ce838383619ec9565b5092915050565b60606000826000015167ffffffffffffffff8111156193f6576193f661a83b565b6040519080825280601f01601f191660200182016040528015619420576020820181803683370190505b50905060006020820190506193ce8185602001518660000151619f74565b6060600061944a616407565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161946757905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806194c29061b32a565b935060ff16815181106194d7576194d761b1bd565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619528919061ba95565b6040516020818303038152906040528282806195439061b32a565b935060ff16815181106195585761955861b1bd565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806195a59061b32a565b935060ff16815181106195ba576195ba61b1bd565b6020026020010181905250826040516020016195d6919061b258565b6040516020818303038152906040528282806195f19061b32a565b935060ff16815181106196065761960661b1bd565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806196539061b32a565b935060ff16815181106196685761966861b1bd565b602002602001018190525061967d8784619fee565b82826196888161b32a565b935060ff168151811061969d5761969d61b1bd565b6020908102919091010152855151156197495760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826196ef8161b32a565b935060ff16815181106197045761970461b1bd565b602002602001018190525061971d866000015184619fee565b82826197288161b32a565b935060ff168151811061973d5761973d61b1bd565b60200260200101819052505b8560800151156197b75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826197928161b32a565b935060ff16815181106197a7576197a761b1bd565b602002602001018190525061981d565b841561981d5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826197fc8161b32a565b935060ff16815181106198115761981161b1bd565b60200260200101819052505b604086015151156198b95760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826198678161b32a565b935060ff168151811061987c5761987c61b1bd565b602002602001018190525085604001518282806198989061b32a565b935060ff16815181106198ad576198ad61b1bd565b60200260200101819052505b8560600151156199235760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826199028161b32a565b935060ff16815181106199175761991761b1bd565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156199415761994161a83b565b60405190808252806020026020018201604052801561997457816020015b606081526020019060019003908161995f5790505b50905060005b8260ff168160ff1610156199cd57838160ff168151811061999d5761999d61b1bd565b6020026020010151828260ff16815181106199ba576199ba61b1bd565b602090810291909101015260010161997a565b50979650505050505050565b60408051808201909152600080825260208201528151835110156199fe575081616015565b81518351602085015160009291619a149161ab06565b619a1e919061aaf3565b60208401519091506001908214619a3f575082516020840151819020908220145b8015619a5a57835185518690619a5690839061aaf3565b9052505b50929392505050565b6000808260000151619a878560000151866020015186600001518760200151619da9565b619a91919061ab06565b90505b83516020850151619aa5919061ab06565b81116193ce5781619ab58161bada565b9250508260000151619aec856020015183619ad0919061aaf3565b8651619adc919061aaf3565b8386600001518760200151619da9565b619af6919061ab06565b9050619a94565b60606000619b0b8484619a63565b619b1690600161ab06565b67ffffffffffffffff811115619b2e57619b2e61a83b565b604051908082528060200260200182016040528015619b6157816020015b6060815260200190600190039081619b4c5790505b50905060005b8151811015617dd657619b7d617ff886866193af565b828281518110619b8f57619b8f61b1bd565b6020908102919091010152600101619b67565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619beb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619c17576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619c3557662386f26fc10000830492506010015b6305f5e1008310619c4d576305f5e100830492506008015b6127108310619c6157612710830492506004015b60648310619c73576064830492506002015b600a83106160155760010192915050565b6000619c90838361a02e565b159392505050565b600080858411619d9f5760208411619d4b5760008415619ce3576001619cbf86602061aaf3565b619cca90600861baf4565b619cd590600261bbf2565b619cdf919061aaf3565b1990505b8351811685619cf2898961ab06565b619cfc919061aaf3565b805190935082165b818114619d3657878411619d1e5787945050505050617a07565b83619d288161bbfe565b945050828451169050619d04565b619d40878561ab06565b945050505050617a07565b838320619d58858861aaf3565b619d62908761ab06565b91505b858210619d9d57848220808203619d8a57619d80868461ab06565b9350505050617a07565b619d9560018461aaf3565b925050619d65565b505b5092949350505050565b60008381868511619eb45760208511619e635760008515619df5576001619dd187602061aaf3565b619ddc90600861baf4565b619de790600261bbf2565b619df1919061aaf3565b1990505b84518116600087619e068b8b61ab06565b619e10919061aaf3565b855190915083165b828114619e5557818610619e3d57619e308b8b61ab06565b9650505050505050617a07565b85619e478161bada565b965050838651169050619e18565b859650505050505050617a07565b508383206000905b619e75868961aaf3565b8211619eb257858320808203619e915783945050505050617a07565b619e9c60018561ab06565b9350508180619eaa9061bada565b925050619e6b565b505b619ebe878761ab06565b979650505050505050565b60408051808201909152600080825260208201526000619efb8560000151866020015186600001518760200151619da9565b602080870180519186019190915251909150619f17908261aaf3565b835284516020860151619f2a919061ab06565b8103619f395760008552619f6b565b83518351619f47919061ab06565b85518690619f5690839061aaf3565b9052508351619f65908261ab06565b60208601525b50909392505050565b60208110619fac5781518352619f8b60208461ab06565b9250619f9860208361ab06565b9150619fa560208261aaf3565b9050619f74565b6000198115619fdb576001619fc283602061aaf3565b619fce9061010061bbf2565b619fd8919061aaf3565b90505b9151835183169219169190911790915250565b60606000619ffc84846164da565b805160208083015160405193945061a0169390910161bc15565b60405160208183030381529060405291505092915050565b815181516000919081111561a041575081515b6020808501519084015160005b8381101561a0fa578251825180821461a0ca57600019602087101561a0a95760018461a07b89602061aaf3565b61a085919061ab06565b61a09090600861baf4565b61a09b90600261bbf2565b61a0a5919061aaf3565b1990505b818116838216818103911461a0c75797506160159650505050505050565b50505b61a0d560208661ab06565b945061a0e260208561ab06565b9350505060208161a0f3919061ab06565b905061a04e565b5084518651616b88919061bc6d565b610b678061bc8e83390190565b61063d8061c7f583390190565b61106f8061ce3283390190565b6120728061dea183390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a18061a185565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a1806040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a2375783516001600160a01b031683526020938401939092019160010161a210565b509095945050505050565b60005b8381101561a25d57818101518382015260200161a245565b50506000910152565b6000815180845261a27e81602086016020860161a242565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a374577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a35e84865161a266565b602095860195909450929092019160010161a324565b50919750505060209485019492909201915060010161a2ba565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a3ee5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a3ae565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a464604088018261a266565b905060208201519150868103602088015261a47f818361a39a565b96505050602093840193919091019060010161a420565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a4f885835161a266565b9450602093840193919091019060010161a4be565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a58e604087018261a39a565b955050602093840193919091019060010161a535565b600181811c9082168061a5b857607f821691505b6020821081036182d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845267ffffffffffffffff8160a01c1660208501525060018201606060408501526000815461a62d8161a5a4565b806060880152600182166000811461a64c576001811461a6865761a6ba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b890101935061a6ba565b84600052602060002060005b8381101561a6b15781548a82016080015260019091019060200161a692565b89016080019450505b50919695505050505050565b60208152600061610e602083018461a5f1565b6001600160a01b0383168152604060208201526000617a07604083018461a5f1565b60006020828403121561a70d57600080fd5b81516001600160a01b038116811461610e57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061a7de577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261a7ff60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561a82b57600080fd5b8151801515811461610e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561124d57806000526020600020601f840160051c8101602085101561a8915750805b601f840160051c820191505b81811015612ec4576000815560010161a89d565b815167ffffffffffffffff81111561a8cb5761a8cb61a83b565b61a8df8161a8d9845461a5a4565b8461a86a565b6020601f82116001811461a913576000831561a8fb5750848201515b600019600385901b1c1916600184901b178455612ec4565b600084815260208120601f198516915b8281101561a943578785015182556020948501946001909201910161a923565b508482101561a9615786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561a98257600080fd5b5051919050565b60208152600061610e602083018461a266565b60208152600061601560208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b60a08152600061a9ec60a083018761a266565b6001600160a01b03861660208401528460408401526001600160a01b03841660608401528281036080840152619ebe81600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261aa61606085018261a266565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60808152600061aa9d608083018761aa4c565b8560208401526001600160a01b03851660408401528281036060840152619ebe818561a266565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156160155761601561aac4565b808201808211156160155761601561aac4565b60a08152600061ab2c60a083018861aa4c565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261ab62818561a266565b98975050505050505050565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000616b88608083018461a5f1565b6001600160a01b0383168152604060208201526000617a07604083018461a266565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161abff81601a85016020880161a242565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ac3c81601c84016020880161a242565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561ac6b5761ac6b61a83b565b60405290565b60008067ffffffffffffffff84111561ac8c5761ac8c61a83b565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561acbb5761acbb61a83b565b60405283815290508082840185101561acd357600080fd5b617dd684602083018561a242565b600082601f83011261acf257600080fd5b61610e8383516020850161ac71565b60006020828403121561ad1357600080fd5b815167ffffffffffffffff81111561ad2a57600080fd5b6160118482850161ace1565b6000835161ad4881846020880161a242565b83519083019061ad5c81836020880161a242565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ad9d81601a85016020880161a242565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161adda81603384016020880161a242565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061610e608083018461a266565b60006020828403121561ae6957600080fd5b815167ffffffffffffffff81111561ae8057600080fd5b8201601f8101841361ae9157600080fd5b6160118482516020840161ac71565b6000855161aeb2818460208a0161a242565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161aeec816001840160208a0161a242565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161af2a81600284016020890161a242565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161af6c81600284016020880161a242565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061afb7604083018461a266565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b02e81601f85016020870161a242565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b09b604083018461a266565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b0ed604083018461a266565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b16481601485016020870161a242565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b1ab604083018561a266565b828103602084015261610a818561a266565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b22481600185016020870161a242565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b26a81846020870161a242565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b31d81604b85016020870161a242565b91909101604b0192915050565b600060ff821660ff810361b3405761b34061aac4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b3a781602985016020870161a242565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061610e608083018461a266565b60006020828403121561b40d57600080fd5b815167ffffffffffffffff81111561b42457600080fd5b82016060818503121561b43657600080fd5b61b43e61ac48565b81518060030b811461b44f57600080fd5b8152602082015167ffffffffffffffff81111561b46b57600080fd5b61b4778682850161ace1565b602083015250604082015167ffffffffffffffff81111561b49757600080fd5b61b4a38682850161ace1565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b50f81602185016020870161a242565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b6fb81602185016020880161a242565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b73881602e84016020880161a242565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b3a781602985016020870161a242565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b80081602285016020870161a242565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b84581600e85016020870161a242565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b92381601885016020880161a242565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b96081601c84016020880161a242565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ba6681846020870161a242565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161bacd81601c85016020870161a242565b91909101601c0192915050565b6000600019820361baed5761baed61aac4565b5060010190565b80820281158282048414176160155761601561aac4565b6001815b600184111561bb465780850481111561bb2a5761bb2a61aac4565b600184161561bb3857908102905b60019390931c92800261bb0f565b935093915050565b60008261bb5d57506001616015565b8161bb6a57506000616015565b816001811461bb80576002811461bb8a5761bba6565b6001915050616015565b60ff84111561bb9b5761bb9b61aac4565b50506001821b616015565b5060208310610133831016604e8410600b841016171561bbc9575081810a616015565b61bbd6600019848461bb0b565b806000190482111561bbea5761bbea61aac4565b029392505050565b600061610e838361bb4e565b60008161bc0d5761bc0d61aac4565b506000190190565b6000835161bc2781846020880161a242565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bc6181600184016020880161a242565b01600101949350505050565b81810360008312801583831316838312821617156193ce576193ce61aac456fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c80635bcfd61614610033578063660b9de01461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610169565b610073565b34801561005f57600080fd5b5061003161006e366004610221565b6100ee565b6060811561008a576100878284018461028d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610383565b6100c560408a0160208b016103ef565b896040013533866040516100de9695949392919061045a565b60405180910390a1505050505050565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c768160405161011d919061051c565b60405180910390a150565b60006060828403121561013a57600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016457600080fd5b919050565b60008060008060006080868803121561018157600080fd5b853567ffffffffffffffff81111561019857600080fd5b6101a488828901610128565b9550506101b360208701610140565b935060408601359250606086013567ffffffffffffffff8111156101d657600080fd5b8601601f810188136101e757600080fd5b803567ffffffffffffffff8111156101fe57600080fd5b88602082840101111561021057600080fd5b959894975092955050506020019190565b60006020828403121561023357600080fd5b813567ffffffffffffffff81111561024a57600080fd5b61025684828501610128565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561029f57600080fd5b813567ffffffffffffffff8111156102b657600080fd5b8201601f810184136102c757600080fd5b803567ffffffffffffffff8111156102e1576102e161025e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561034d5761034d61025e565b60405281815282820160200186101561036557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126103b857600080fd5b83018035915067ffffffffffffffff8211156103d357600080fd5b6020019150368190038213156103e857600080fd5b9250929050565b60006020828403121561040157600080fd5b61040a82610140565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a08152600061046e60a08301888a610411565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156104d8576020818701810151848301820152016104bc565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683010192505050979650505050505050565b6020815273ffffffffffffffffffffffffffffffffffffffff61053e83610140565b1660208201526000602083013567ffffffffffffffff811680821461056257600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261059f57600080fd5b830160208101903567ffffffffffffffff8111156105bc57600080fd5b8036038213156105cb57600080fd5b6060808501526105df608085018284610411565b9594505050505056fea2646970667358221220cb26ed07348041180f6631404fac1759ff8efa800dbae7e9722129211743d1d664736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212206cfc8728f3e6a008fa60110012d328f8d2a859ba07c5fdfb6776051dc27a333964736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220aa5125c0038a8bce02845af74e7306a14927e9d3a91554006493dda61f47334c64736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ff488061003c6000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c806385226c81116101bd578063ba414fa6116100f9578063e20c9f71116100a2578063ec294d9f1161007c578063ec294d9f1461054a578063ef2b539414610552578063fa7626d41461055a578063fb339a1c1461056757600080fd5b8063e20c9f7114610505578063e63ab1e91461050d578063eab7674e1461054257600080fd5b8063d9978513116100d3578063d9978513146104ed578063d9a4fa16146104f5578063e09bc659146104fd57600080fd5b8063ba414fa6146104c5578063c7b388b1146104dd578063c8814d2e146104e557600080fd5b80639c9acd5d11610166578063b0464fdc11610140578063b0464fdc146104a5578063b5508aa9146104ad578063b8f2b821146104b5578063b936be8c146104bd57600080fd5b80639c9acd5d1461048d5780639ca37e9214610495578063a0b2c7b11461049d57600080fd5b806396d9d8761161019757806396d9d8761461047d57806397f7661f14610443578063996b76751461048557600080fd5b806385226c811461044b578063884660a314610460578063916a17c61461046857600080fd5b80633f7286f41161028c5780635cec7db5116102355780636efa04b51161020f5780636efa04b51461042b5780637cec29b0146104335780637f924c4e1461043b578063828d267c1461044357600080fd5b80635cec7db51461040657806366d9a9a01461040e578063671b91e21461042357600080fd5b806351336fb01161026657806351336fb0146103f657806358c9987f146103fe5780635b4c90e1146103a157600080fd5b80633f7286f4146103de57806344b2a40b146103e657806348f4fd07146103ee57600080fd5b80632468bc0f116102f95780632fa381f4116102d35780632fa381f4146103be578063339bd828146103c65780633ab5b199146103ce5780633e5e3c23146103d657600080fd5b80632468bc0f146103995780632948df41146103a15780632ade3880146103a957600080fd5b8063198d5ca41161032a578063198d5ca41461036b5780631c785a14146103735780631ed7831c1461037b57600080fd5b8063084fafab146103515780630a9254e41461035b57806314b7a6da14610363575b600080fd5b61035961056f565b005b610359610745565b610359611252565b6103596113a2565b610359611625565b610383611f3c565b604051610390919061a1f6565b60405180910390f35b610359611f9e565b610359612469565b6103b1612652565b604051610390919061a292565b610359612794565b610359612986565b610359612ad2565b610383612c83565b610383612ce3565b610359612d43565b610359612ecb565b610359613016565b610359613161565b610359613316565b6104166134cd565b604051610390919061a3f8565b61035961364f565b61035961379d565b610359613b41565b610359613db4565b610359613ded565b610453613f99565b604051610390919061a496565b610359614069565b610470614348565b604051610390919061a50d565b610359614443565b610359614596565b6103596146ea565b61035961483a565b610359614971565b610470614b2c565b610453614c27565b610359614cf7565b610359614e45565b6104cd615128565b6040519015158152602001610390565b6103596151fc565b6103596153ba565b6103596154fc565b6103596155c4565b610359615782565b61038361593b565b6105347f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b604051908152602001610390565b61035961599b565b610359615ae9565b610359615c98565b601f546104cd9060ff1681565b610359615e49565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156105fe57600080fd5b505af1158015610612573d6000803e3d6000fd5b505050507f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76602c604051610646919061a6c6565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156106a857600080fd5b505af11580156106bc573d6000803e3d6000fd5b50506020546024546040517f717d335f0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063717d335f93506107119290911690602c9060040161a6d9565b600060405180830381600087803b15801561072b57600080fd5b505af115801561073f573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161078b9061a109565b604051809103906000f0801580156107a7573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602554915160248101939093529216604482015261088b919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052615ffc565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610971919061a6fb565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516109b59061a116565b604051809103906000f0801580156109d1573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610a6d57600080fd5b505af1158015610a81573d6000803e3d6000fd5b505050506000806000604051610a969061a123565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610ad2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610b289061a130565b610b379695949392919061a724565b604051809103906000f080158015610b53573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610c6857600080fd5b505af1158015610c7c573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610cfc57600080fd5b505af1158015610d10573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e11919061a819565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea6919061a819565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b919061a819565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015611115573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611139919061a819565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505060408051606081018252600080825260016020808401918252845190810185529182529282018190528151602c8054945167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009095166001600160a01b039290921691909117939093178355909350909150602d9061124d908261a8b1565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156112ab57600080fd5b505af11580156112bf573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561132f57600080fd5b505af1158015611343573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc9150606401610711565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156113f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611417919061a970565b905061142460008261601b565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561147d57600080fd5b505af1158015611491573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561150157600080fd5b505af1158015611515573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561158d57600080fd5b505af11580156115a1573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611618919061a970565b905061124d60008261601b565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561167e57600080fd5b505af1158015611692573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061177d919060040161a989565b600060405180830381600087803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117ff57600080fd5b505af1158015611813573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561187057600080fd5b505af1158015611884573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061196f919060040161a989565b600060405180830381600087803b15801561198957600080fd5b505af115801561199d573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156119f157600080fd5b505af1158015611a05573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a6257600080fd5b505af1158015611a76573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611aca57600080fd5b505af1158015611ade573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b158015611b5157600080fd5b505af1158015611b65573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611bc257600080fd5b505af1158015611bd6573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611c4e57600080fd5b505af1158015611c62573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611cbf57600080fd5b505af1158015611cd3573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d2757600080fd5b505af1158015611d3b573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db3919061a970565b9050611dc060008261601b565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611e1957600080fd5b505af1158015611e2d573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611ea557600080fd5b505af1158015611eb9573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f30919061a970565b905061124d838261601b565b60606016805480602002602001604051908101604052809291908181526020018280548015611f9457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f76575b5050505050905090565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611fef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612013919061a970565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061a970565b6024546040519192506001600160a01b031631906000906120ac9060200161a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061220993506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054612239936001600160a01b03928316928c92169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561229a57600080fd5b505af11580156122ae573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506123059286928c92911690889060040161aa8a565b600060405180830381600087803b15801561231f57600080fd5b505af1158015612333573d6000803e3d6000fd5b50506022546027546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612386573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123aa919061a970565b90506123bf6123b9888861aaf3565b8261601b565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612410573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612434919061a970565b9050612440868261601b565b61245f61244d898761ab06565b6024546001600160a01b03163161601b565b5050505050505050565b600060405160200161247a9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561252857600080fd5b505af115801561253c573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156125ac57600080fd5b505af11580156125c0573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061261c92869260009260019290911690899060040161ab19565b600060405180830381600087803b15801561263657600080fd5b505af115801561264a573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561278b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156127745783829060005260206000200180546126e79061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546127139061a5a4565b80156127605780601f1061273557610100808354040283529160200191612760565b820191906000526020600020905b81548152906001019060200180831161274357829003601f168201915b5050505050815260200190600101906126c8565b505050508152505081526020019060010190612676565b50505050905090565b6040516001906000906127a99060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561287357600080fd5b505af1158015612887573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156128e457600080fd5b505af11580156128f8573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061294f9286928992911690889060040161aa8a565b600060405180830381600087803b15801561296957600080fd5b505af115801561297d573d6000803e3d6000fd5b50505050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156129df57600080fd5b505af11580156129f3573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612a6357600080fd5b505af1158015612a77573d6000803e3d6000fd5b50506020546021546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb7693506107119290911690600190600090602c9060040161ab6e565b6000604051602001612ae39061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612b9157600080fd5b505af1158015612ba5573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612c1557600080fd5b505af1158015612c29573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061261c9286921690600190600090899060040161ab19565b60606018805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d9f57600080fd5b505af1158015612db3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612e2357600080fd5b505af1158015612e37573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015612eb057600080fd5b505af1158015612ec4573d6000803e3d6000fd5b5050505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f2457600080fd5b505af1158015612f38573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612fa857600080fd5b505af1158015612fbc573d6000803e3d6000fd5b50506020546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb76935061071192600092600192911690602c9060040161ab6e565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561308257600080fd5b505af1158015613096573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156130f357600080fd5b505af1158015613107573d6000803e3d6000fd5b50506020546021546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb76935061071192909116906001908590602c9060040161ab6e565b60006040516020016131729061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561322057600080fd5b505af1158015613234573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156132a457600080fd5b505af11580156132b8573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600092911690899060040161ab19565b60405160019060009061332b9060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156133f557600080fd5b505af1158015613409573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561346657600080fd5b505af115801561347a573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061294f90849087908590889060040161aa8a565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561278b57838290600052602060002090600202016040518060400160405290816000820180546135249061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546135509061a5a4565b801561359d5780601f106135725761010080835404028352916020019161359d565b820191906000526020600020905b81548152906001019060200180831161358057829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561363757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135e45790505b505050505081525050815260200190600101906134f1565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156136bb57600080fd5b505af11580156136cf573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561372c57600080fd5b505af1158015613740573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926001921690602c9060040161ab6e565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156137ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613811919061a970565b905061381e60008261601b565b600060405160200161382f9061a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561391d57600080fd5b505af1158015613931573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061398c93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526027546020546139bd936001600160a01b0392831692600192169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a1e57600080fd5b505af1158015613a32573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613a90938793811692600192911690899060040161ab19565b600060405180830381600087803b158015613aaa57600080fd5b505af1158015613abe573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b34919061a970565b905061073f60018261601b565b6000604051602001613b529061a99c565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c4057600080fd5b505af1158015613c54573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613caf93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613ce0936001600160a01b0392831692600192169061a9d9565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015613d4257600080fd5b505af1158015613d56573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061261c938793811692600192911690899060040161ab19565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401611d72565b6000604051602001613dfe9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015613eac57600080fd5b505af1158015613ec0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613f3057600080fd5b505af1158015613f44573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061261c908490600190600090889060040161aa8a565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561278b578382906000526020600020018054613fdc9061a5a4565b80601f01602080910402602001604051908101604052809291908181526020018280546140089061a5a4565b80156140555780601f1061402a57610100808354040283529160200191614055565b820191906000526020600020905b81548152906001019060200180831161403857829003601f168201915b505050505081526020019060010190613fbd565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa1580156140b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140dd919061a970565b90506140ea60008261601b565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561417957600080fd5b505af115801561418d573d6000803e3d6000fd5b505050507f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76602c6040516141c1919061a6c6565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561422257600080fd5b505af1158015614236573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061429393928316926001921690602c9060040161ab6e565b600060405180830381600087803b1580156142ad57600080fd5b505af11580156142c1573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015614313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614337919061a970565b905061434460018261601b565b5050565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561278b5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561442b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116143d85790505b5050505050815250508152602001906001019061436c565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561449f57600080fd5b505af11580156144b3573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561452357600080fd5b505af1158015614537573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401612e96565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156145ef57600080fd5b505af1158015614603573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561467357600080fd5b505af1158015614687573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc9150606401610711565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561474357600080fd5b505af1158015614757573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156147c757600080fd5b505af11580156147db573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc9150606401610711565b600060405160200161484b9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561491557600080fd5b505af1158015614929573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401613d28565b6040516001906000906149869060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015614a5057600080fd5b505af1158015614a64573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614ac157600080fd5b505af1158015614ad5573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061294f9286928992911690889060040161aa8a565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561278b5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015614c0f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411614bbc5790505b50505050508152505081526020019060010190614b50565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561278b578382906000526020600020018054614c6a9061a5a4565b80601f0160208091040260200160405190810160405280929190818152602001828054614c969061a5a4565b8015614ce35780601f10614cb857610100808354040283529160200191614ce3565b820191906000526020600020905b815481529060010190602001808311614cc657829003601f168201915b505050505081526020019060010190614c4b565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614d6357600080fd5b505af1158015614d77573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614dd457600080fd5b505af1158015614de8573d6000803e3d6000fd5b50506020546021546027546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926001921690602c9060040161ab6e565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614eba919061a970565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f30919061a970565b6024546040519192506001600160a01b03163190600090614f539060200161a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561500157600080fd5b505af1158015615015573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561508557600080fd5b505af1158015615099573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a9591506150ee908490600190600090889060040161aa8a565b600060405180830381600087803b15801561510857600080fd5b505af115801561511c573d6000803e3d6000fd5b50505050505050505050565b60085460009060ff1615615140575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156151d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151f5919061a970565b1415905090565b600060405160200161520d9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156152d757600080fd5b505af11580156152eb573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561534857600080fd5b505af115801561535c573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600192911690899060040161ab19565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561541357600080fd5b505af1158015615427573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561549757600080fd5b505af11580156154ab573d6000803e3d6000fd5b50506020546040517f717d335f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063717d335f915061071190600090602c9060040161a6d9565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561556857600080fd5b505af115801561557c573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa7915060240161068e565b60006040516020016155d59061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561569f57600080fd5b505af11580156156b3573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561571057600080fd5b505af1158015615724573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061261c938793811692600192911690899060040161ab19565b60006040516020016157939061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561585d57600080fd5b505af1158015615871573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156158ce57600080fd5b505af11580156158e2573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c92869216906001908690899060040161ab19565b60606015805480602002602001604051908101604052809291908181526020018280548015611f94576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611f76575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156159f457600080fd5b505af1158015615a08573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615a7857600080fd5b505af1158015615a8c573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926000921690602c9060040161ab6e565b6000604051602001615afa9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615ba857600080fd5b505af1158015615bbc573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615c2c57600080fd5b505af1158015615c40573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061261c928692600092911690889060040161aa8a565b6000604051602001615ca99061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615d5757600080fd5b505af1158015615d6b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615ddb57600080fd5b505af1158015615def573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c9286921690600190600090899060040161ab19565b6000604051602001615e5a9061a99c565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615f0857600080fd5b505af1158015615f1c573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615f8c57600080fd5b505af1158015615fa0573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061261c92869260009260019290911690899060040161ab19565b600061600661a13d565b61601184848361609a565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561608657600080fd5b505afa15801561264a573d6000803e3d6000fd5b6000806160a78584616115565b905061610a6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016160f592919061aba5565b60405160208183030381529060405285616121565b9150505b9392505050565b600061610e838361614f565b60c081015151600090156161455761613e84848460c0015161616a565b905061610e565b61613e8484616310565b600061615b83836163fb565b61610e83836020015184616121565b600080616175616407565b9050600061618386836164da565b9050600061619a8260600151836020015185616980565b905060006161aa83838989616b92565b905060006161b782617a0f565b602081015181519192509060030b1561622a578982604001516040516020016161e192919061abc7565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526162219160040161a989565b60405180910390fd5b600061626d6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617bde565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906162c090849060040161a989565b602060405180830381865afa1580156162dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616301919061a6fb565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061636590879060040161a989565b600060405180830381865afa158015616382573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163aa919081019061ad01565b905060006163d882856040516020016163c492919061ad36565b604051602081830303815290604052617dde565b90506001600160a01b0381166160115784846040516020016161e192919061ad65565b61434482826000617df1565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061648e90849060040161ae10565b600060405180830381865afa1580156164ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164d3919081019061ae57565b9250505090565b61650c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506165576040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61656085617ef4565b60208201526000616570866182d9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156165b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165da919081019061ae57565b868385602001516040516020016165f4949392919061aea0565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061664c90859060040161a989565b600060405180830381865afa158015616669573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616691919081019061ae57565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906166d990849060040161afa4565b602060405180830381865afa1580156166f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061671a919061a819565b61672f57816040516020016161e1919061aff6565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061677490849060040161b088565b600060405180830381865afa158015616791573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167b9919081019061ae57565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061680090849060040161b0da565b602060405180830381865afa15801561681d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616841919061a819565b156168d6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061688b90849060040161b0da565b600060405180830381865afa1580156168a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168d0919081019061ae57565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016168fb919061b12c565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161692792919061b198565b600060405180830381865afa158015616944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261696c919081019061ae57565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161699c5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106169fc576169fc61b1bd565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110616a5057616a5061b1bd565b602002602001018190525084604051602001616a6c919061b1ec565b60405160208183030381529060405281600281518110616a8e57616a8e61b1bd565b602002602001018190525082604051602001616aaa919061b258565b60405160208183030381529060405281600381518110616acc57616acc61b1bd565b60200260200101819052506000616ae282617a0f565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616b73906040805180820182526000808252602091820152815180830190925284518252808501908201529061855c565b616b8857856040516020016161e1919061b299565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616be2565b511590565b616d5657826020015115616c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616221565b8260c0015115616d56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616221565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616d6f57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616dca9061b32a565b935060ff1681518110616ddf57616ddf61b1bd565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616e30919061b349565b604051602081830303815290604052828280616e4b9061b32a565b935060ff1681518110616e6057616e6061b1bd565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616ead9061b32a565b935060ff1681518110616ec257616ec261b1bd565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616f0f9061b32a565b935060ff1681518110616f2457616f2461b1bd565b60200260200101819052508760200151828280616f409061b32a565b935060ff1681518110616f5557616f5561b1bd565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616fa29061b32a565b935060ff1681518110616fb757616fb761b1bd565b602090810291909101015287518282616fcf8161b32a565b935060ff1681518110616fe457616fe461b1bd565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806170319061b32a565b935060ff16815181106170465761704661b1bd565b602002602001018190525061705a466185bd565b82826170658161b32a565b935060ff168151811061707a5761707a61b1bd565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806170c79061b32a565b935060ff16815181106170dc576170dc61b1bd565b6020026020010181905250868282806170f49061b32a565b935060ff16815181106171095761710961b1bd565b60209081029190910101528551156172305760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261715a8161b32a565b935060ff168151811061716f5761716f61b1bd565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906171bf90899060040161a989565b600060405180830381865afa1580156171dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617204919081019061ae57565b828261720f8161b32a565b935060ff16815181106172245761722461b1bd565b60200260200101819052505b8460200151156173005760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826172798161b32a565b935060ff168151811061728e5761728e61b1bd565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806172db9061b32a565b935060ff16815181106172f0576172f061b1bd565b60200260200101819052506174c7565b617338616bdd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6173cb5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261737b8161b32a565b935060ff16815181106173905761739061b1bd565b60200260200101819052508460a001516040516020016173b0919061b1ec565b6040516020818303038152906040528282806172db9061b32a565b8460c0015115801561740e57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261740c90511590565b155b156174c75760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826174528161b32a565b935060ff16815181106174675761746761b1bd565b602002602001018190525061747b8861865d565b60405160200161748b919061b1ec565b6040516020818303038152906040528282806174a69061b32a565b935060ff16815181106174bb576174bb61b1bd565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526174fb90511590565b6175905760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261753e8161b32a565b935060ff16815181106175535761755361b1bd565b6020026020010181905250846040015182828061756f9061b32a565b935060ff16815181106175845761758461b1bd565b60200260200101819052505b6060850151156176b15760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826175d98161b32a565b935060ff16815181106175ee576175ee61b1bd565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561765d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617685919081019061ae57565b82826176908161b32a565b935060ff16815181106176a5576176a561b1bd565b60200260200101819052505b60e085015151156177585760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826176fb8161b32a565b935060ff16815181106177105761771061b1bd565b602002602001018190525061772c8560e00151600001516185bd565b82826177378161b32a565b935060ff168151811061774c5761774c61b1bd565b60200260200101819052505b60e085015160200151156178025760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826177a58161b32a565b935060ff16815181106177ba576177ba61b1bd565b60200260200101819052506177d68560e00151602001516185bd565b82826177e18161b32a565b935060ff16815181106177f6576177f661b1bd565b60200260200101819052505b60e085015160400151156178ac5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261784f8161b32a565b935060ff16815181106178645761786461b1bd565b60200260200101819052506178808560e00151604001516185bd565b828261788b8161b32a565b935060ff16815181106178a0576178a061b1bd565b60200260200101819052505b60e085015160600151156179565760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826178f98161b32a565b935060ff168151811061790e5761790e61b1bd565b602002602001018190525061792a8560e00151606001516185bd565b82826179358161b32a565b935060ff168151811061794a5761794a61b1bd565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156179745761797461a83b565b6040519080825280602002602001820160405280156179a757816020015b60608152602001906001900390816179925790505b50905060005b8260ff168160ff161015617a0057838160ff16815181106179d0576179d061b1bd565b6020026020010151828260ff16815181106179ed576179ed61b1bd565b60209081029190910101526001016179ad565b5093505050505b949350505050565b617a366040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617abc9186910161b3b4565b600060405180830381865afa158015617ad9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617b01919081019061ae57565b90506000617b0f868361914c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617b3f919061a496565b6000604051808303816000875af1158015617b5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617b86919081019061b3fb565b805190915060030b15801590617b9f5750602081015151155b8015617bae5750604081015151155b15616b885781600081518110617bc657617bc661b1bd565b60200260200101516040516020016161e1919061b4b1565b60606000617c138560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617c4a9082905b906192a1565b15617da7576000617cc782617cc184617cbb617c8d8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906192c8565b9061932a565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617d2b9082906192a1565b15617d9557604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d92905b82906193af565b90505b617d9e816193d5565b9250505061610e565b8215617dc05784846040516020016161e192919061b69d565b505060408051602081019091526000815261610e565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617e0057505050565b6000617e0d84848461943e565b90506000617e1a82617a0f565b602081015181519192509060030b158015617eb65750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617eb690604080518082018252600080825260209182015281518083019092528451825280850190820152617c44565b15617ec357505050505050565b60408201515115617ee35781604001516040516020016161e1919061b744565b806040516020016161e1919061b7a2565b60606000617f298360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617f8e905b829061855c565b15617ffd57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff89083906199d9565b6193d5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261805f905b8290619a63565b60010361812c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180c590617d8b565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff8905b83906193af565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261818b90617f87565b156182c257604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906181f3908390619afd565b905060008160018351618206919061aaf3565b815181106182165761821661b1bd565b602002602001015190506182b9617ff861828c6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906199d9565b95945050505050565b826040516020016161e1919061b80d565b50919050565b6060600061830e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061837090617f87565b1561837e5761610e816193d5565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526183dd90618058565b60010361844757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610e90617ff890618125565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184a690617f87565b156182c257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061850e908390619afd565b905060018151111561854a578060028251618529919061aaf3565b815181106185395761853961b1bd565b602002602001015192505050919050565b50826040516020016161e1919061b80d565b80518251600091111561857157506000616015565b815183516020850151600092916185879161ab06565b618591919061aaf3565b9050826020015181036185a8576001915050616015565b82516020840151819020912014905092915050565b606060006185ca83619ba2565b600101905060008167ffffffffffffffff8111156185ea576185ea61a83b565b6040519080825280601f01601f191660200182016040528015618614576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461861e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916186e9905b8290619c84565b1561872957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618788906186e2565b156187c857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618827906186e2565b1561886757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188c6906186e2565b8061892b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261892b906186e2565b1561896b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189ca906186e2565b80618a2f5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a2f906186e2565b15618a6f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ace906186e2565b80618b335750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b33906186e2565b15618b7357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bd2906186e2565b80618c375750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c37906186e2565b15618c7757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cd6906186e2565b15618d1657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d75906186e2565b15618db557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e14906186e2565b15618e5457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618eb3906186e2565b15618ef357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f52906186e2565b15618f9257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ff1906186e2565b806190565750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619056906186e2565b1561909657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190f5906186e2565b1561913557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516161e1929060200161b8eb565b60608060005b84518110156191d7578185828151811061916e5761916e61b1bd565b602002602001015160405160200161918792919061ad36565b6040516020818303038152906040529150600185516191a6919061aaf3565b81146191cf57816040516020016191bd919061ba54565b60405160208183030381529060405291505b600101619152565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816191f0579050509050838160008151811061921b5761921b61b1bd565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061926f5761926f61b1bd565b6020026020010181905250818160028151811061928e5761928e61b1bd565b6020908102919091010152949350505050565b60208083015183518351928401516000936192bf9291849190619c98565b14159392505050565b604080518082019091526000808252602082015260006192fa8460000151856020015185600001518660200151619da9565b905083602001518161930c919061aaf3565b8451859061931b90839061aaf3565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561934f575081616015565b60208083015190840151600191146193765750815160208481015190840151829020919020145b80156193a75782518451859061938d90839061aaf3565b90525082516020850180516193a390839061ab06565b9052505b509192915050565b60408051808201909152600080825260208201526193ce838383619ec9565b5092915050565b60606000826000015167ffffffffffffffff8111156193f6576193f661a83b565b6040519080825280601f01601f191660200182016040528015619420576020820181803683370190505b50905060006020820190506193ce8185602001518660000151619f74565b6060600061944a616407565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161946757905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806194c29061b32a565b935060ff16815181106194d7576194d761b1bd565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619528919061ba95565b6040516020818303038152906040528282806195439061b32a565b935060ff16815181106195585761955861b1bd565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806195a59061b32a565b935060ff16815181106195ba576195ba61b1bd565b6020026020010181905250826040516020016195d6919061b258565b6040516020818303038152906040528282806195f19061b32a565b935060ff16815181106196065761960661b1bd565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806196539061b32a565b935060ff16815181106196685761966861b1bd565b602002602001018190525061967d8784619fee565b82826196888161b32a565b935060ff168151811061969d5761969d61b1bd565b6020908102919091010152855151156197495760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826196ef8161b32a565b935060ff16815181106197045761970461b1bd565b602002602001018190525061971d866000015184619fee565b82826197288161b32a565b935060ff168151811061973d5761973d61b1bd565b60200260200101819052505b8560800151156197b75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826197928161b32a565b935060ff16815181106197a7576197a761b1bd565b602002602001018190525061981d565b841561981d5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826197fc8161b32a565b935060ff16815181106198115761981161b1bd565b60200260200101819052505b604086015151156198b95760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826198678161b32a565b935060ff168151811061987c5761987c61b1bd565b602002602001018190525085604001518282806198989061b32a565b935060ff16815181106198ad576198ad61b1bd565b60200260200101819052505b8560600151156199235760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826199028161b32a565b935060ff16815181106199175761991761b1bd565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156199415761994161a83b565b60405190808252806020026020018201604052801561997457816020015b606081526020019060019003908161995f5790505b50905060005b8260ff168160ff1610156199cd57838160ff168151811061999d5761999d61b1bd565b6020026020010151828260ff16815181106199ba576199ba61b1bd565b602090810291909101015260010161997a565b50979650505050505050565b60408051808201909152600080825260208201528151835110156199fe575081616015565b81518351602085015160009291619a149161ab06565b619a1e919061aaf3565b60208401519091506001908214619a3f575082516020840151819020908220145b8015619a5a57835185518690619a5690839061aaf3565b9052505b50929392505050565b6000808260000151619a878560000151866020015186600001518760200151619da9565b619a91919061ab06565b90505b83516020850151619aa5919061ab06565b81116193ce5781619ab58161bada565b9250508260000151619aec856020015183619ad0919061aaf3565b8651619adc919061aaf3565b8386600001518760200151619da9565b619af6919061ab06565b9050619a94565b60606000619b0b8484619a63565b619b1690600161ab06565b67ffffffffffffffff811115619b2e57619b2e61a83b565b604051908082528060200260200182016040528015619b6157816020015b6060815260200190600190039081619b4c5790505b50905060005b8151811015617dd657619b7d617ff886866193af565b828281518110619b8f57619b8f61b1bd565b6020908102919091010152600101619b67565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619beb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619c17576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619c3557662386f26fc10000830492506010015b6305f5e1008310619c4d576305f5e100830492506008015b6127108310619c6157612710830492506004015b60648310619c73576064830492506002015b600a83106160155760010192915050565b6000619c90838361a02e565b159392505050565b600080858411619d9f5760208411619d4b5760008415619ce3576001619cbf86602061aaf3565b619cca90600861baf4565b619cd590600261bbf2565b619cdf919061aaf3565b1990505b8351811685619cf2898961ab06565b619cfc919061aaf3565b805190935082165b818114619d3657878411619d1e5787945050505050617a07565b83619d288161bbfe565b945050828451169050619d04565b619d40878561ab06565b945050505050617a07565b838320619d58858861aaf3565b619d62908761ab06565b91505b858210619d9d57848220808203619d8a57619d80868461ab06565b9350505050617a07565b619d9560018461aaf3565b925050619d65565b505b5092949350505050565b60008381868511619eb45760208511619e635760008515619df5576001619dd187602061aaf3565b619ddc90600861baf4565b619de790600261bbf2565b619df1919061aaf3565b1990505b84518116600087619e068b8b61ab06565b619e10919061aaf3565b855190915083165b828114619e5557818610619e3d57619e308b8b61ab06565b9650505050505050617a07565b85619e478161bada565b965050838651169050619e18565b859650505050505050617a07565b508383206000905b619e75868961aaf3565b8211619eb257858320808203619e915783945050505050617a07565b619e9c60018561ab06565b9350508180619eaa9061bada565b925050619e6b565b505b619ebe878761ab06565b979650505050505050565b60408051808201909152600080825260208201526000619efb8560000151866020015186600001518760200151619da9565b602080870180519186019190915251909150619f17908261aaf3565b835284516020860151619f2a919061ab06565b8103619f395760008552619f6b565b83518351619f47919061ab06565b85518690619f5690839061aaf3565b9052508351619f65908261ab06565b60208601525b50909392505050565b60208110619fac5781518352619f8b60208461ab06565b9250619f9860208361ab06565b9150619fa560208261aaf3565b9050619f74565b6000198115619fdb576001619fc283602061aaf3565b619fce9061010061bbf2565b619fd8919061aaf3565b90505b9151835183169219169190911790915250565b60606000619ffc84846164da565b805160208083015160405193945061a0169390910161bc15565b60405160208183030381529060405291505092915050565b815181516000919081111561a041575081515b6020808501519084015160005b8381101561a0fa578251825180821461a0ca57600019602087101561a0a95760018461a07b89602061aaf3565b61a085919061ab06565b61a09090600861baf4565b61a09b90600261bbf2565b61a0a5919061aaf3565b1990505b818116838216818103911461a0c75797506160159650505050505050565b50505b61a0d560208661ab06565b945061a0e260208561ab06565b9350505060208161a0f3919061ab06565b905061a04e565b5084518651616b88919061bc6d565b610b678061bc8e83390190565b61063d8061c7f583390190565b61106f8061ce3283390190565b6120728061dea183390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a18061a185565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a1806040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a2375783516001600160a01b031683526020938401939092019160010161a210565b509095945050505050565b60005b8381101561a25d57818101518382015260200161a245565b50506000910152565b6000815180845261a27e81602086016020860161a242565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a374577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a35e84865161a266565b602095860195909450929092019160010161a324565b50919750505060209485019492909201915060010161a2ba565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a3ee5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a3ae565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a464604088018261a266565b905060208201519150868103602088015261a47f818361a39a565b96505050602093840193919091019060010161a420565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a4f885835161a266565b9450602093840193919091019060010161a4be565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a38e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a58e604087018261a39a565b955050602093840193919091019060010161a535565b600181811c9082168061a5b857607f821691505b6020821081036182d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845267ffffffffffffffff8160a01c1660208501525060018201606060408501526000815461a62d8161a5a4565b806060880152600182166000811461a64c576001811461a6865761a6ba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b890101935061a6ba565b84600052602060002060005b8381101561a6b15781548a82016080015260019091019060200161a692565b89016080019450505b50919695505050505050565b60208152600061610e602083018461a5f1565b6001600160a01b0383168152604060208201526000617a07604083018461a5f1565b60006020828403121561a70d57600080fd5b81516001600160a01b038116811461610e57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061a7de577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261a7ff60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561a82b57600080fd5b8151801515811461610e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561124d57806000526020600020601f840160051c8101602085101561a8915750805b601f840160051c820191505b81811015612ec4576000815560010161a89d565b815167ffffffffffffffff81111561a8cb5761a8cb61a83b565b61a8df8161a8d9845461a5a4565b8461a86a565b6020601f82116001811461a913576000831561a8fb5750848201515b600019600385901b1c1916600184901b178455612ec4565b600084815260208120601f198516915b8281101561a943578785015182556020948501946001909201910161a923565b508482101561a9615786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561a98257600080fd5b5051919050565b60208152600061610e602083018461a266565b60208152600061601560208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b60a08152600061a9ec60a083018761a266565b6001600160a01b03861660208401528460408401526001600160a01b03841660608401528281036080840152619ebe81600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261aa61606085018261a266565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60808152600061aa9d608083018761aa4c565b8560208401526001600160a01b03851660408401528281036060840152619ebe818561a266565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156160155761601561aac4565b808201808211156160155761601561aac4565b60a08152600061ab2c60a083018861aa4c565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261ab62818561a266565b98975050505050505050565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000616b88608083018461a5f1565b6001600160a01b0383168152604060208201526000617a07604083018461a266565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161abff81601a85016020880161a242565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ac3c81601c84016020880161a242565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561ac6b5761ac6b61a83b565b60405290565b60008067ffffffffffffffff84111561ac8c5761ac8c61a83b565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561acbb5761acbb61a83b565b60405283815290508082840185101561acd357600080fd5b617dd684602083018561a242565b600082601f83011261acf257600080fd5b61610e8383516020850161ac71565b60006020828403121561ad1357600080fd5b815167ffffffffffffffff81111561ad2a57600080fd5b6160118482850161ace1565b6000835161ad4881846020880161a242565b83519083019061ad5c81836020880161a242565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ad9d81601a85016020880161a242565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161adda81603384016020880161a242565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061610e608083018461a266565b60006020828403121561ae6957600080fd5b815167ffffffffffffffff81111561ae8057600080fd5b8201601f8101841361ae9157600080fd5b6160118482516020840161ac71565b6000855161aeb2818460208a0161a242565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161aeec816001840160208a0161a242565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161af2a81600284016020890161a242565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161af6c81600284016020880161a242565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061afb7604083018461a266565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b02e81601f85016020870161a242565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b09b604083018461a266565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b0ed604083018461a266565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b16481601485016020870161a242565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b1ab604083018561a266565b828103602084015261610a818561a266565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b22481600185016020870161a242565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b26a81846020870161a242565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b31d81604b85016020870161a242565b91909101604b0192915050565b600060ff821660ff810361b3405761b34061aac4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b3a781602985016020870161a242565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061610e608083018461a266565b60006020828403121561b40d57600080fd5b815167ffffffffffffffff81111561b42457600080fd5b82016060818503121561b43657600080fd5b61b43e61ac48565b81518060030b811461b44f57600080fd5b8152602082015167ffffffffffffffff81111561b46b57600080fd5b61b4778682850161ace1565b602083015250604082015167ffffffffffffffff81111561b49757600080fd5b61b4a38682850161ace1565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b50f81602185016020870161a242565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b6fb81602185016020880161a242565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b73881602e84016020880161a242565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b3a781602985016020870161a242565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b80081602285016020870161a242565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b84581600e85016020870161a242565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b92381601885016020880161a242565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b96081601c84016020880161a242565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ba6681846020870161a242565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161bacd81601c85016020870161a242565b91909101601c0192915050565b6000600019820361baed5761baed61aac4565b5060010190565b80820281158282048414176160155761601561aac4565b6001815b600184111561bb465780850481111561bb2a5761bb2a61aac4565b600184161561bb3857908102905b60019390931c92800261bb0f565b935093915050565b60008261bb5d57506001616015565b8161bb6a57506000616015565b816001811461bb80576002811461bb8a5761bba6565b6001915050616015565b60ff84111561bb9b5761bb9b61aac4565b50506001821b616015565b5060208310610133831016604e8410600b841016171561bbc9575081810a616015565b61bbd6600019848461bb0b565b806000190482111561bbea5761bbea61aac4565b029392505050565b600061610e838361bb4e565b60008161bc0d5761bc0d61aac4565b506000190190565b6000835161bc2781846020880161a242565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bc6181600184016020880161a242565b01600101949350505050565b81810360008312801583831316838312821617156193ce576193ce61aac456fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c80635bcfd61614610033578063660b9de01461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610169565b610073565b34801561005f57600080fd5b5061003161006e366004610221565b6100ee565b6060811561008a576100878284018461028d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610383565b6100c560408a0160208b016103ef565b896040013533866040516100de9695949392919061045a565b60405180910390a1505050505050565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c768160405161011d919061051c565b60405180910390a150565b60006060828403121561013a57600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016457600080fd5b919050565b60008060008060006080868803121561018157600080fd5b853567ffffffffffffffff81111561019857600080fd5b6101a488828901610128565b9550506101b360208701610140565b935060408601359250606086013567ffffffffffffffff8111156101d657600080fd5b8601601f810188136101e757600080fd5b803567ffffffffffffffff8111156101fe57600080fd5b88602082840101111561021057600080fd5b959894975092955050506020019190565b60006020828403121561023357600080fd5b813567ffffffffffffffff81111561024a57600080fd5b61025684828501610128565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561029f57600080fd5b813567ffffffffffffffff8111156102b657600080fd5b8201601f810184136102c757600080fd5b803567ffffffffffffffff8111156102e1576102e161025e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561034d5761034d61025e565b60405281815282820160200186101561036557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126103b857600080fd5b83018035915067ffffffffffffffff8211156103d357600080fd5b6020019150368190038213156103e857600080fd5b9250929050565b60006020828403121561040157600080fd5b61040a82610140565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a08152600061046e60a08301888a610411565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156104d8576020818701810151848301820152016104bc565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683010192505050979650505050505050565b6020815273ffffffffffffffffffffffffffffffffffffffff61053e83610140565b1660208201526000602083013567ffffffffffffffff811680821461056257600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261059f57600080fd5b830160208101903567ffffffffffffffff8111156105bc57600080fd5b8036038213156105cb57600080fd5b6060808501526105df608085018284610411565b9594505050505056fea2646970667358221220078ed23f1e4df13b41aee8ed02311eda755ac8a9fe6e1a9a5736af6396fa30f964736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220e022243ea23b9a8b3124c978103fdd8ef6145763525499fed01d4848faff43a264736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a26469706673582212204da2d6ea568f1a64cd800597a2a7a50082e7956162dafab8aada7dbdc14ff61064736f6c634300081a0033", } // GatewayZEVMOutboundTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevmupgradetest.sol/gatewayzevmupgradetest.go b/v2/pkg/gatewayzevmupgradetest.sol/gatewayzevmupgradetest.go index c5e4a6f10..979b1607a 100644 --- a/v2/pkg/gatewayzevmupgradetest.sol/gatewayzevmupgradetest.go +++ b/v2/pkg/gatewayzevmupgradetest.sol/gatewayzevmupgradetest.go @@ -55,7 +55,7 @@ type RevertOptions struct { // GatewayZEVMUpgradeTestMetaData contains all meta data concerning the GatewayZEVMUpgradeTest contract. var GatewayZEVMUpgradeTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_MESSAGE_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallOnRevertNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZETANotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b0380861692635bcfd6169261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d3557887868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b03841690635bcfd6169061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea26469706673582212208a13c91b149fb6f550c049c370fc634fbf4f102e79ec8481debd5fbf58cc261f64736f6c634300081a0033", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b0380861692635bcfd6169261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d3557887868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b03841690635bcfd6169061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea26469706673582212204fdb58d6b9d313e5e1051a4c98078e3c6a8baff2220a2505931828e8ef6a4f4464736f6c634300081a0033", } // GatewayZEVMUpgradeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/senderzevm.sol/senderzevm.go b/v2/pkg/senderzevm.sol/senderzevm.go index c94c995bb..0fefee75a 100644 --- a/v2/pkg/senderzevm.sol/senderzevm.go +++ b/v2/pkg/senderzevm.sol/senderzevm.go @@ -32,7 +32,7 @@ var ( // SenderZEVMMetaData contains all meta data concerning the SenderZEVM contract. var SenderZEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"callReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawAndCallReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]}]", - Bin: "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea264697066735822122037e9f02c9f1066889aa75870351a007a7daaa8277c5c9d435a858ffde2091b1364736f6c634300081a0033", + Bin: "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220739c9c1e00fa8ae113982bcbaea09686e9af47d7f82902bcf8b8e278cd41157564736f6c634300081a0033", } // SenderZEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/systemcontract.sol/systemcontract.go b/v2/pkg/systemcontract.sol/systemcontract.go index 908cb1cf7..0b2ac6a65 100644 --- a/v2/pkg/systemcontract.sol/systemcontract.go +++ b/v2/pkg/systemcontract.sol/systemcontract.go @@ -39,7 +39,7 @@ type ZContext struct { // SystemContractMetaData contains all meta data concerning the SystemContract contract. var SystemContractMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"wzeta_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Factory_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Router02_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gasCoinZRC20ByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPriceByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasZetaPoolByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setConnectorZEVMAddress\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasCoinZRC20\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasPrice\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasZetaPool\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"erc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setWZETAContractAddress\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"uniswapv2FactoryAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"uniswapv2PairFor\",\"inputs\":[{\"name\":\"factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenA\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenB\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"pair\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"uniswapv2Router02Address\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"wZetaContractAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaConnectorZEVMAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"SetConnectorZEVM\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasCoin\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasPrice\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasZetaPool\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetWZeta\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SystemContractDeployed\",\"inputs\":[],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeIdenticalAddresses\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212206cfc8728f3e6a008fa60110012d328f8d2a859ba07c5fdfb6776051dc27a333964736f6c634300081a0033", + Bin: "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220e022243ea23b9a8b3124c978103fdd8ef6145763525499fed01d4848faff43a264736f6c634300081a0033", } // SystemContractABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/systemcontractmock.sol/systemcontractmock.go b/v2/pkg/systemcontractmock.sol/systemcontractmock.go index 2c055ee13..3e19553fb 100644 --- a/v2/pkg/systemcontractmock.sol/systemcontractmock.go +++ b/v2/pkg/systemcontractmock.sol/systemcontractmock.go @@ -32,7 +32,7 @@ var ( // SystemContractMockMetaData contains all meta data concerning the SystemContractMock contract. var SystemContractMockMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"wzeta_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Factory_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Router02_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gasCoinZRC20ByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPriceByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasZetaPoolByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onCrossChainCall\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasCoinZRC20\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasPrice\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setWZETAContractAddress\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"uniswapv2FactoryAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"uniswapv2PairFor\",\"inputs\":[{\"name\":\"factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenA\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenB\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"pair\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"uniswapv2Router02Address\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"wZetaContractAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"SetGasCoin\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasPrice\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasZetaPool\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetWZeta\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SystemContractDeployed\",\"inputs\":[],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeIdenticalAddresses\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]}]", - Bin: "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220e349eeb22d87c24401c0e0a954fb5e1774b175448e0269cf8092b426d6a4912864736f6c634300081a0033", + Bin: "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea26469706673582212202cd1363cf0f0a33af114eb5bdaaf7ba04572b0560a3882c5c6aecd5f02fe50f364736f6c634300081a0033", } // SystemContractMockABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go b/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go index b55d74562..c9d448e6d 100644 --- a/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go +++ b/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go @@ -46,7 +46,7 @@ type RevertContext struct { // TestUniversalContractMetaData contains all meta data concerning the TestUniversalContract contract. var TestUniversalContractMetaData = &bind.MetaData{ ABI: "[{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"onCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", - Bin: "0x6080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c80635bcfd61614610033578063660b9de01461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610169565b610073565b34801561005f57600080fd5b5061003161006e366004610221565b6100ee565b6060811561008a576100878284018461028d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610383565b6100c560408a0160208b016103ef565b896040013533866040516100de9695949392919061045a565b60405180910390a1505050505050565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c768160405161011d919061051c565b60405180910390a150565b60006060828403121561013a57600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016457600080fd5b919050565b60008060008060006080868803121561018157600080fd5b853567ffffffffffffffff81111561019857600080fd5b6101a488828901610128565b9550506101b360208701610140565b935060408601359250606086013567ffffffffffffffff8111156101d657600080fd5b8601601f810188136101e757600080fd5b803567ffffffffffffffff8111156101fe57600080fd5b88602082840101111561021057600080fd5b959894975092955050506020019190565b60006020828403121561023357600080fd5b813567ffffffffffffffff81111561024a57600080fd5b61025684828501610128565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561029f57600080fd5b813567ffffffffffffffff8111156102b657600080fd5b8201601f810184136102c757600080fd5b803567ffffffffffffffff8111156102e1576102e161025e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561034d5761034d61025e565b60405281815282820160200186101561036557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126103b857600080fd5b83018035915067ffffffffffffffff8211156103d357600080fd5b6020019150368190038213156103e857600080fd5b9250929050565b60006020828403121561040157600080fd5b61040a82610140565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a08152600061046e60a08301888a610411565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156104d8576020818701810151848301820152016104bc565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683010192505050979650505050505050565b6020815273ffffffffffffffffffffffffffffffffffffffff61053e83610140565b1660208201526000602083013567ffffffffffffffff811680821461056257600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261059f57600080fd5b830160208101903567ffffffffffffffff8111156105bc57600080fd5b8036038213156105cb57600080fd5b6060808501526105df608085018284610411565b9594505050505056fea2646970667358221220cb26ed07348041180f6631404fac1759ff8efa800dbae7e9722129211743d1d664736f6c634300081a0033", + Bin: "0x6080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c80635bcfd61614610033578063660b9de01461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610169565b610073565b34801561005f57600080fd5b5061003161006e366004610221565b6100ee565b6060811561008a576100878284018461028d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610383565b6100c560408a0160208b016103ef565b896040013533866040516100de9695949392919061045a565b60405180910390a1505050505050565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c768160405161011d919061051c565b60405180910390a150565b60006060828403121561013a57600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016457600080fd5b919050565b60008060008060006080868803121561018157600080fd5b853567ffffffffffffffff81111561019857600080fd5b6101a488828901610128565b9550506101b360208701610140565b935060408601359250606086013567ffffffffffffffff8111156101d657600080fd5b8601601f810188136101e757600080fd5b803567ffffffffffffffff8111156101fe57600080fd5b88602082840101111561021057600080fd5b959894975092955050506020019190565b60006020828403121561023357600080fd5b813567ffffffffffffffff81111561024a57600080fd5b61025684828501610128565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561029f57600080fd5b813567ffffffffffffffff8111156102b657600080fd5b8201601f810184136102c757600080fd5b803567ffffffffffffffff8111156102e1576102e161025e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561034d5761034d61025e565b60405281815282820160200186101561036557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126103b857600080fd5b83018035915067ffffffffffffffff8211156103d357600080fd5b6020019150368190038213156103e857600080fd5b9250929050565b60006020828403121561040157600080fd5b61040a82610140565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a08152600061046e60a08301888a610411565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156104d8576020818701810151848301820152016104bc565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683010192505050979650505050505050565b6020815273ffffffffffffffffffffffffffffffffffffffff61053e83610140565b1660208201526000602083013567ffffffffffffffff811680821461056257600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261059f57600080fd5b830160208101903567ffffffffffffffff8111156105bc57600080fd5b8036038213156105cb57600080fd5b6060808501526105df608085018284610411565b9594505050505056fea2646970667358221220078ed23f1e4df13b41aee8ed02311eda755ac8a9fe6e1a9a5736af6396fa30f964736f6c634300081a0033", } // TestUniversalContractABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zrc20.t.sol/zrc20test.go b/v2/pkg/zrc20.t.sol/zrc20test.go index dfabaf080..7a3296ea8 100644 --- a/v2/pkg/zrc20.t.sol/zrc20test.go +++ b/v2/pkg/zrc20.t.sol/zrc20test.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZRC20TestMetaData contains all meta data concerning the ZRC20Test contract. var ZRC20TestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testApproveFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurn\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurnFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderIsNotGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFrom\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfSenderIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimitFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateNameAndSymbol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateNameAndSymbolFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFeeFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasCoinNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasPriceNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testZRC20BasicInfo\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowAllowance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasCoin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasPrice\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061eb078061003c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80638ce7ef051161019c578063d27b0427116100ee578063e02beae611610097578063f1f87f4011610071578063f1f87f40146104c3578063f2413096146104cb578063fa7626d4146104d357600080fd5b8063e02beae6146104ab578063e13aba48146104b3578063e20c9f71146104bb57600080fd5b8063d97136a2116100c8578063d97136a214610493578063dcba486a1461049b578063dfbdf600146104a357600080fd5b8063d27b04271461047b578063d509b16c14610483578063d591221f1461048b57600080fd5b8063b549984c11610150578063ba414fa61161012a578063ba414fa614610453578063d04cda981461046b578063d1fd32911461047357600080fd5b8063b549984c1461043b578063b5508aa914610443578063b79cad091461044b57600080fd5b8063a4aa6c7c11610181578063a4aa6c7c14610423578063ae9687dc1461042b578063b0464fdc1461043357600080fd5b80638ce7ef0514610406578063916a17c61461040e57600080fd5b80634b629509116102605780636ff45850116102095780637f924c4e116101e35780637f924c4e146103e157806380326680146103e957806385226c81146103f157600080fd5b80636ff45850146103c957806370557298146103d15780637ee68316146103d957600080fd5b806358fdbbe01161023a57806358fdbbe0146103a45780635f01db7e146103ac57806366d9a9a0146103b457600080fd5b80634b6295091461038c5780634cfc0aaa14610394578063513999621461039c57600080fd5b806328438826116102c25780633be9ec801161029c5780633be9ec80146103745780633e5e3c231461037c5780633f7286f41461038457600080fd5b8063284388261461034f5780632ade3880146103575780632f6254fc1461036c57600080fd5b80630a9254e4116102f35780630a9254e4146103215780631142744e146103295780631ed7831c1461033157600080fd5b80630393998b1461030f5780630809dfef14610319575b600080fd5b6103176104e0565b005b6103176105e2565b610317610770565b610317610e52565b610339610f36565b6040516103469190619737565b60405180910390f35b610317610f98565b61035f6111e3565b60405161034691906197d3565b610317611325565b610317611496565b610339611683565b6103396116e3565b610317611743565b610317611816565b6103176118ef565b610317611c6c565b610317611d3f565b6103bc611eac565b6040516103469190619939565b61031761202e565b61031761223e565b61031761248e565b61031761291f565b610317612b43565b6103f9612c17565b60405161034691906199d7565b610317612ce7565b610416612ee7565b6040516103469190619a4e565b610317612fe2565b610317613197565b610416613424565b61031761351f565b6103f96135f1565b6103176136c1565b61045b613a53565b6040519015158152602001610346565b610317613b27565b610317613c6b565b610317613dae565b610317613ef1565b610317614585565b610317614669565b6103176147ef565b610317614a72565b610317614bb5565b610317614de2565b61033961508c565b6103176150ec565b610317615232565b601f5461045b9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561054c57600080fd5b505af1158015610560573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105c857600080fd5b505af11580156105dc573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561063b57600080fd5b505af115801561064f573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156106bf57600080fd5b505af11580156106d3573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076d9190619ae5565b50565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580549091166112341790556040516107b690619657565b604051809103906000f0801580156107d2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054925190810193909352921660448201526108b6919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc9550000000000000000000000000000000000000000000000000000000017905261548e565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190619b23565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610a1157600080fd5b505af1158015610a25573d6000803e3d6000fd5b505050506000806000604051610a3a90619664565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a76573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610acc90619671565b610adb96959493929190619b3e565b604051809103906000f080158015610af7573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b9757600080fd5b505af1158015610bab573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610c1557600080fd5b505af1158015610c29573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610ca957600080fd5b505af1158015610cbd573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d3d57600080fd5b505af1158015610d51573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df39190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105c857600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610ebe57600080fd5b505af1158015610ed2573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef24915060440161072a565b60606016805480602002602001604051908101604052809291908181526020018280548015610f8e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f70575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110119190619c33565b905061101e6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ba9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561112757600080fd5b505af115801561113b573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af11580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190619ae5565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561131c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561130557838290600052602060002001805461127890619c4c565b80601f01602080910402602001604051908101604052809291908181526020018280546112a490619c4c565b80156112f15780601f106112c6576101008083540402835291602001916112f1565b820191906000526020600020905b8154815290600101906020018083116112d457829003601f168201915b505050505081526020019060010190611259565b505050508152505081526020019060010190611207565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561137e57600080fd5b505af1158015611392573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113fa57600080fd5b505af115801561140e573d6000803e3d6000fd5b50505050611494601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190619b23565b613211615535565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114ef57600080fd5b505af1158015611503573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561156d57600080fd5b505af1158015611581573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115f257600080fd5b505af1158015611606573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561165f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190619c99565b60606018805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc7759991506024016105ae565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b3915060440161072a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561194d57600080fd5b505af1158015611961573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119c857600080fd5b505af11580156119dc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a3957600080fd5b505af1158015611a4d573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5f9190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bbe57600080fd5b505af1158015611bd2573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119b9190600190603801619cc5565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cd857600080fd5b505af1158015611cec573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc91506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d9857600080fd5b505af1158015611dac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611e1357600080fd5b505af1158015611e27573d6000803e3d6000fd5b50505050611494600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea79190619c33565b6154ad565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561131c5783829060005260206000209060020201604051806040016040529081600082018054611f0390619c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2f90619c4c565b8015611f7c5780601f10611f5157610100808354040283529160200191611f7c565b820191906000526020600020905b815481529060010190602001808311611f5f57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561201657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611fc35790505b50505050508152505081526020019060010190611ed0565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a79190619c33565b90506120b46000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561212c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121509190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156121bd57600080fd5b505af11580156121d1573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd915060640161119b565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b79190619c33565b90506122c46000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561233b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235f9190619ae5565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124089190619ae5565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561245e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124829190619c33565b90506111de82826154ad565b6125476040518060400160405280600581526020017f544f4b454e000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125429190810190619daf565b615596565b6125d36040518060400160405280600381526020017f544b4e0000000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561262c57600080fd5b505af1158015612640573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b1580156126d457600080fd5b505af11580156126e8573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561274557600080fd5b505af1158015612759573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c82469150606401600060405180830381600087803b1580156127ef57600080fd5b505af1158015612803573d6000803e3d6000fd5b505050506128936040518060400160405280600681526020017f544f4b454e320000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b6114946040518060400160405280600481526020017f544b4e3200000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129989190619c33565b90506129a7620186a0826154ad565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a0057600080fd5b505af1158015612a14573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015612a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab69190619ae5565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b309190619c33565b9050612b3f62030d40826154ad565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612baf57600080fd5b505af1158015612bc3573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c68915060240161072a565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561131c578382906000526020600020018054612c5a90619c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054612c8690619c4c565b8015612cd35780601f10612ca857610100808354040283529160200191612cd3565b820191906000526020600020905b815481529060010190602001808311612cb657829003601f168201915b505050505081526020019060010190612c3b565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d609190619c33565b9050612d6d6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e099190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612e7657600080fd5b505af1158015612e8a573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb915060440161119b565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561131c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612fca57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f775790505b50505050508152505081526020019060010190612f0b565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561305a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307e9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130eb57600080fd5b505af11580156130ff573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015613173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3f9190619ae5565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156131ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132149190810190619daf565b90506132556040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156132aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132d29190810190619daf565b90506133136040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338c9190619df8565b905061339c60128260ff166154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134159190619c33565b90506105dc620186a0826154ad565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561131c5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561350757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116134b45790505b50505050508152505081526020019060010190613448565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561358b57600080fd5b505af115801561359f573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a91506024016105ae565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561131c57838290600052602060002001805461363490619c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461366090619c4c565b80156136ad5780601f10613682576101008083540402835291602001916136ad565b820191906000526020600020905b81548152906001019060200180831161369057829003601f168201915b505050505081526020019060010190613615565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561372357600080fd5b505af1158015613737573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b15801561379e57600080fd5b505af11580156137b2573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561380f57600080fd5b505af1158015613823573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561388a57600080fd5b505af115801561389e573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af1158015613914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139389190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156139a557600080fd5b505af11580156139b9573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119b9190606490603801619cc5565b60085460009060ff1615613a6b575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b209190619c33565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b8057600080fd5b505af1158015613b94573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bfb57600080fd5b505af1158015613c0f573d6000803e3d6000fd5b50505050611494600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613cc457600080fd5b505af1158015613cd8573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613d4857600080fd5b505af1158015613d5c573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc7759991506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e0757600080fd5b505af1158015613e1b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613e8b57600080fd5b505af1158015613e9f573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc91506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f4f57600080fd5b505af1158015613f63573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561403b57600080fd5b505af115801561404f573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156140b657600080fd5b505af11580156140ca573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015614121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141459190619c33565b9050614154620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141cd9190619c33565b90506141dc620186a0826154ad565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142559190619c33565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af11580156142c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142eb9190619ae5565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691614383919061c35090603801619cc5565b6020604051808303816000875af11580156143a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143c69190619ae5565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561441c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144409190619c33565b9050614460856144508885619e4a565b61445a9190619e4a565b826154ad565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156144b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d89190619c33565b90506144f4866144ea8961c350619e5d565b61445a9190619e5d565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061456d9190619c33565b905061457b61c350826154ad565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa1580156145da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145fe9190619c33565b905061460b6000826154ad565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb906044016123c5565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af11580156146e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147059190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561477257600080fd5b505af1158015614786573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401613154565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561484857600080fd5b505af115801561485c573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b1580156148c857600080fd5b505af11580156148dc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561493957600080fd5b505af115801561494d573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156149b457600080fd5b505af11580156149c8573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015614a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a459190619c99565b601f549193509150614a659061010090046001600160a01b031683615535565b6105dc61445a8486619e4a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614acb57600080fd5b505af1158015614adf573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b158015614b4757600080fd5b505af1158015614b5b573d6000803e3d6000fd5b50505050611494601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611468573d6000803e3d6000fd5b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614c2157600080fd5b505af1158015614c35573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b158015614cc957600080fd5b505af1158015614cdd573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614d4d57600080fd5b505af1158015614d61573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c824691506064016105ae565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e5a9190619c33565b9050614e69620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ee29190619c33565b9050614ef1620186a0826154ad565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f7e9190619ae5565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ff79190619c33565b905061500561c350826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561505a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061507e9190619c33565b90506105dc61c350826154ad565b60606015805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561514557600080fd5b505af1158015615159573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b1580156151c357600080fd5b505af11580156151d7573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115d8565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015615287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152ab9190619c33565b90506152b86000826154ad565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa15801561532e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153529190619c33565b905061535f6000826154ad565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156153cf57600080fd5b505af11580156153e3573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af115801561546a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190619ae5565b600061549861967e565b6154a38484836155e8565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b15801561551957600080fd5b505afa15801561552d573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401615501565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d963906155019085908590600401619e70565b6000806155f58584615663565b90506156586040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615643929190619e95565b6040516020818303038152906040528561566f565b9150505b9392505050565b600061565c838361569d565b60c081015151600090156156935761568c84848460c001516156b8565b905061565c565b61568c848461585e565b60006156a98383615949565b61565c8383602001518461566f565b6000806156c3615955565b905060006156d18683615a28565b905060006156e88260600151836020015185615ece565b905060006156f8838389896160e0565b9050600061570582616f5d565b602081015181519192509060030b156157785789826040015160405160200161572f929190619eb7565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261576f91600401619f38565b60405180910390fd5b60006157bb6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161712c565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061580e908490600401619f38565b602060405180830381865afa15801561582b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061584f9190619b23565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906158b3908790600401619f38565b600060405180830381865afa1580156158d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158f89190810190619f6b565b905060006159268285604051602001615912929190619fa0565b60405160208183030381529060405261732c565b90506001600160a01b0381166154a357848460405160200161572f929190619fcf565b612b3f8282600061733f565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906159dc90849060040161a07a565b600060405180830381865afa1580156159f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a219190810190619daf565b9250505090565b615a5a6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050615aa56040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b615aae85617442565b60208201526000615abe86617827565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615b00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b289190810190619daf565b86838560200151604051602001615b42949392919061a0c1565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190615b9a908590600401619f38565b600060405180830381865afa158015615bb7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615bdf9190810190619daf565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615c2790849060040161a1c5565b602060405180830381865afa158015615c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c689190619ae5565b615c7d578160405160200161572f919061a217565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615cc290849060040161a2a9565b600060405180830381865afa158015615cdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d079190810190619daf565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615d4e90849060040161a2fb565b602060405180830381865afa158015615d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615d8f9190619ae5565b15615e24576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615dd990849060040161a2fb565b600060405180830381865afa158015615df6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e1e9190810190619daf565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615e49919061a34d565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615e75929190619e70565b600060405180830381865afa158015615e92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615eba9190810190619daf565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615eea5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615f4a57615f4a61a3b9565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615f9e57615f9e61a3b9565b602002602001018190525084604051602001615fba919061a3e8565b60405160208183030381529060405281600281518110615fdc57615fdc61a3b9565b602002602001018190525082604051602001615ff8919061a454565b6040516020818303038152906040528160038151811061601a5761601a61a3b9565b6020026020010181905250600061603082616f5d565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506160c19060408051808201825260008082526020918201528151808301909252845182528085019082015290617aaa565b6160d6578560405160200161572f919061a495565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616130565b511590565b6162a4578260200151156161ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161576f565b8260c00151156162a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161576f565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816162bd57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806163189061a526565b935060ff168151811061632d5761632d61a3b9565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161637e919061a545565b6040516020818303038152906040528282806163999061a526565b935060ff16815181106163ae576163ae61a3b9565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806163fb9061a526565b935060ff16815181106164105761641061a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061645d9061a526565b935060ff16815181106164725761647261a3b9565b6020026020010181905250876020015182828061648e9061a526565b935060ff16815181106164a3576164a361a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806164f09061a526565b935060ff16815181106165055761650561a3b9565b60209081029190910101528751828261651d8161a526565b935060ff16815181106165325761653261a3b9565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061657f9061a526565b935060ff16815181106165945761659461a3b9565b60200260200101819052506165a846617b0b565b82826165b38161a526565b935060ff16815181106165c8576165c861a3b9565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806166159061a526565b935060ff168151811061662a5761662a61a3b9565b6020026020010181905250868282806166429061a526565b935060ff16815181106166575761665761a3b9565b602090810291909101015285511561677e5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826166a88161a526565b935060ff16815181106166bd576166bd61a3b9565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061670d908990600401619f38565b600060405180830381865afa15801561672a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167529190810190619daf565b828261675d8161a526565b935060ff16815181106167725761677261a3b9565b60200260200101819052505b84602001511561684e5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826167c78161a526565b935060ff16815181106167dc576167dc61a3b9565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806168299061a526565b935060ff168151811061683e5761683e61a3b9565b6020026020010181905250616a15565b61688661612b8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6169195760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826168c98161a526565b935060ff16815181106168de576168de61a3b9565b60200260200101819052508460a001516040516020016168fe919061a3e8565b6040516020818303038152906040528282806168299061a526565b8460c0015115801561695c57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261695a90511590565b155b15616a155760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826169a08161a526565b935060ff16815181106169b5576169b561a3b9565b60200260200101819052506169c988617bab565b6040516020016169d9919061a3e8565b6040516020818303038152906040528282806169f49061a526565b935060ff1681518110616a0957616a0961a3b9565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152616a4990511590565b616ade5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282616a8c8161a526565b935060ff1681518110616aa157616aa161a3b9565b60200260200101819052508460400151828280616abd9061a526565b935060ff1681518110616ad257616ad261a3b9565b60200260200101819052505b606085015115616bff5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282616b278161a526565b935060ff1681518110616b3c57616b3c61a3b9565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616bab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616bd39190810190619daf565b8282616bde8161a526565b935060ff1681518110616bf357616bf361a3b9565b60200260200101819052505b60e08501515115616ca65760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616c498161a526565b935060ff1681518110616c5e57616c5e61a3b9565b6020026020010181905250616c7a8560e0015160000151617b0b565b8282616c858161a526565b935060ff1681518110616c9a57616c9a61a3b9565b60200260200101819052505b60e08501516020015115616d505760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616cf38161a526565b935060ff1681518110616d0857616d0861a3b9565b6020026020010181905250616d248560e0015160200151617b0b565b8282616d2f8161a526565b935060ff1681518110616d4457616d4461a3b9565b60200260200101819052505b60e08501516040015115616dfa5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282616d9d8161a526565b935060ff1681518110616db257616db261a3b9565b6020026020010181905250616dce8560e0015160400151617b0b565b8282616dd98161a526565b935060ff1681518110616dee57616dee61a3b9565b60200260200101819052505b60e08501516060015115616ea45760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616e478161a526565b935060ff1681518110616e5c57616e5c61a3b9565b6020026020010181905250616e788560e0015160600151617b0b565b8282616e838161a526565b935060ff1681518110616e9857616e9861a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616ec257616ec2619ce7565b604051908082528060200260200182016040528015616ef557816020015b6060815260200190600190039081616ee05790505b50905060005b8260ff168160ff161015616f4e57838160ff1681518110616f1e57616f1e61a3b9565b6020026020010151828260ff1681518110616f3b57616f3b61a3b9565b6020908102919091010152600101616efb565b5093505050505b949350505050565b616f846040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161700a9186910161a5b0565b600060405180830381865afa158015617027573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261704f9190810190619daf565b9050600061705d868361869a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161708d91906199d7565b6000604051808303816000875af11580156170ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526170d4919081019061a5f7565b805190915060030b158015906170ed5750602081015151155b80156170fc5750604081015151155b156160d657816000815181106171145761711461a3b9565b602002602001015160405160200161572f919061a6ad565b606060006171618560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506171989082905b906187ef565b156172f55760006172158261720f846172096171db8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618816565b90618878565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506172799082906187ef565b156172e357604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172e0905b82906188fd565b90505b6172ec81618923565b9250505061565c565b821561730e57848460405160200161572f92919061a899565b505060408051602081019091526000815261565c565b509392505050565b6000808251602084016000f09392505050565b8160a001511561734e57505050565b600061735b84848461898c565b9050600061736882616f5d565b602081015181519192509060030b1580156174045750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261740490604080518082018252600080825260209182015281518083019092528451825280850190820152617192565b1561741157505050505050565b6040820151511561743157816040015160405160200161572f919061a940565b8060405160200161572f919061a99e565b606060006174778360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506174dc905b8290617aaa565b1561754b57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546908390618f27565b618923565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ad905b8290618fb1565b60010361767a57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617613906172d9565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546905b83906188fd565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176d9906174d5565b1561781057604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061774190839061904b565b9050600081600183516177549190619e5d565b815181106177645761776461a3b9565b602002602001015190506178076175466177da6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618f27565b95945050505050565b8260405160200161572f919061aa09565b50919050565b6060600061785c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506178be906174d5565b156178cc5761565c81618923565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261792b906175a6565b60010361799557604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c9061754690617673565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179f4906174d5565b1561781057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617a5c90839061904b565b9050600181511115617a98578060028251617a779190619e5d565b81518110617a8757617a8761a3b9565b602002602001015192505050919050565b508260405160200161572f919061aa09565b805182516000911115617abf575060006154a7565b81518351602085015160009291617ad591619e4a565b617adf9190619e5d565b905082602001518103617af65760019150506154a7565b82516020840151819020912014905092915050565b60606000617b18836190f0565b600101905060008167ffffffffffffffff811115617b3857617b38619ce7565b6040519080825280601f01601f191660200182016040528015617b62576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617b6c57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617c37905b82906191d2565b15617c7757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cd690617c30565b15617d1657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d7590617c30565b15617db557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e1490617c30565b80617e795750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e7990617c30565b15617eb957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f1890617c30565b80617f7d5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f7d90617c30565b15617fbd57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261801c90617c30565b806180815750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261808190617c30565b156180c157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261812090617c30565b806181855750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261818590617c30565b156181c557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261822490617c30565b1561826457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182c390617c30565b1561830357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261836290617c30565b156183a257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261840190617c30565b1561844157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184a090617c30565b156184e057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261853f90617c30565b806185a45750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185a490617c30565b156185e457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261864390617c30565b1561868357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161572f929060200161aae7565b60608060005b845181101561872557818582815181106186bc576186bc61a3b9565b60200260200101516040516020016186d5929190619fa0565b6040516020818303038152906040529150600185516186f49190619e5d565b811461871d578160405160200161870b919061ac50565b60405160208183030381529060405291505b6001016186a0565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161873e57905050905083816000815181106187695761876961a3b9565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106187bd576187bd61a3b9565b602002602001018190525081816002815181106187dc576187dc61a3b9565b6020908102919091010152949350505050565b602080830151835183519284015160009361880d92918491906191e6565b14159392505050565b6040805180820190915260008082526020820152600061884884600001518560200151856000015186602001516192f7565b905083602001518161885a9190619e5d565b84518590618869908390619e5d565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561889d5750816154a7565b60208083015190840151600191146188c45750815160208481015190840151829020919020145b80156188f5578251845185906188db908390619e5d565b90525082516020850180516188f1908390619e4a565b9052505b509192915050565b604080518082019091526000808252602082015261891c838383619417565b5092915050565b60606000826000015167ffffffffffffffff81111561894457618944619ce7565b6040519080825280601f01601f19166020018201604052801561896e576020820181803683370190505b509050600060208201905061891c81856020015186600001516194c2565b60606000618998615955565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816189b557905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618a109061a526565b935060ff1681518110618a2557618a2561a3b9565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618a76919061ac91565b604051602081830303815290604052828280618a919061a526565b935060ff1681518110618aa657618aa661a3b9565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618af39061a526565b935060ff1681518110618b0857618b0861a3b9565b602002602001018190525082604051602001618b24919061a454565b604051602081830303815290604052828280618b3f9061a526565b935060ff1681518110618b5457618b5461a3b9565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618ba19061a526565b935060ff1681518110618bb657618bb661a3b9565b6020026020010181905250618bcb878461953c565b8282618bd68161a526565b935060ff1681518110618beb57618beb61a3b9565b602090810291909101015285515115618c975760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282618c3d8161a526565b935060ff1681518110618c5257618c5261a3b9565b6020026020010181905250618c6b86600001518461953c565b8282618c768161a526565b935060ff1681518110618c8b57618c8b61a3b9565b60200260200101819052505b856080015115618d055760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282618ce08161a526565b935060ff1681518110618cf557618cf561a3b9565b6020026020010181905250618d6b565b8415618d6b5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282618d4a8161a526565b935060ff1681518110618d5f57618d5f61a3b9565b60200260200101819052505b60408601515115618e075760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618db58161a526565b935060ff1681518110618dca57618dca61a3b9565b60200260200101819052508560400151828280618de69061a526565b935060ff1681518110618dfb57618dfb61a3b9565b60200260200101819052505b856060015115618e715760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618e508161a526565b935060ff1681518110618e6557618e6561a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618e8f57618e8f619ce7565b604051908082528060200260200182016040528015618ec257816020015b6060815260200190600190039081618ead5790505b50905060005b8260ff168160ff161015618f1b57838160ff1681518110618eeb57618eeb61a3b9565b6020026020010151828260ff1681518110618f0857618f0861a3b9565b6020908102919091010152600101618ec8565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618f4c5750816154a7565b81518351602085015160009291618f6291619e4a565b618f6c9190619e5d565b60208401519091506001908214618f8d575082516020840151819020908220145b8015618fa857835185518690618fa4908390619e5d565b9052505b50929392505050565b6000808260000151618fd585600001518660200151866000015187602001516192f7565b618fdf9190619e4a565b90505b83516020850151618ff39190619e4a565b811161891c57816190038161acd6565b925050826000015161903a85602001518361901e9190619e5d565b865161902a9190619e5d565b83866000015187602001516192f7565b6190449190619e4a565b9050618fe2565b606060006190598484618fb1565b619064906001619e4a565b67ffffffffffffffff81111561907c5761907c619ce7565b6040519080825280602002602001820160405280156190af57816020015b606081526020019060019003908161909a5790505b50905060005b8151811015617324576190cb61754686866188fd565b8282815181106190dd576190dd61a3b9565b60209081029190910101526001016190b5565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619139577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619165576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061918357662386f26fc10000830492506010015b6305f5e100831061919b576305f5e100830492506008015b61271083106191af57612710830492506004015b606483106191c1576064830492506002015b600a83106154a75760010192915050565b60006191de838361957c565b159392505050565b6000808584116192ed5760208411619299576000841561923157600161920d866020619e5d565b61921890600861acf0565b61922390600261adee565b61922d9190619e5d565b1990505b83518116856192408989619e4a565b61924a9190619e5d565b805190935082165b8181146192845787841161926c5787945050505050616f55565b836192768161adfa565b945050828451169050619252565b61928e8785619e4a565b945050505050616f55565b8383206192a68588619e5d565b6192b09087619e4a565b91505b8582106192eb578482208082036192d8576192ce8684619e4a565b9350505050616f55565b6192e3600184619e5d565b9250506192b3565b505b5092949350505050565b6000838186851161940257602085116193b1576000851561934357600161931f876020619e5d565b61932a90600861acf0565b61933590600261adee565b61933f9190619e5d565b1990505b845181166000876193548b8b619e4a565b61935e9190619e5d565b855190915083165b8281146193a35781861061938b5761937e8b8b619e4a565b9650505050505050616f55565b856193958161acd6565b965050838651169050619366565b859650505050505050616f55565b508383206000905b6193c38689619e5d565b8211619400578583208082036193df5783945050505050616f55565b6193ea600185619e4a565b93505081806193f89061acd6565b9250506193b9565b505b61940c8787619e4a565b979650505050505050565b6040805180820190915260008082526020820152600061944985600001518660200151866000015187602001516192f7565b6020808701805191860191909152519091506194659082619e5d565b8352845160208601516194789190619e4a565b810361948757600085526194b9565b835183516194959190619e4a565b855186906194a4908390619e5d565b90525083516194b39082619e4a565b60208601525b50909392505050565b602081106194fa57815183526194d9602084619e4a565b92506194e6602083619e4a565b91506194f3602082619e5d565b90506194c2565b6000198115619529576001619510836020619e5d565b61951c9061010061adee565b6195269190619e5d565b90505b9151835183169219169190911790915250565b6060600061954a8484615a28565b80516020808301516040519394506195649390910161ae11565b60405160208183030381529060405291505092915050565b815181516000919081111561958f575081515b6020808501519084015160005b8381101561964857825182518082146196185760001960208710156195f7576001846195c9896020619e5d565b6195d39190619e4a565b6195de90600861acf0565b6195e990600261adee565b6195f39190619e5d565b1990505b81811683821681810391146196155797506154a79650505050505050565b50505b619623602086619e4a565b9450619630602085619e4a565b935050506020816196419190619e4a565b905061959c565b50845186516160d6919061ae69565b610b678061ae8a83390190565b61106f8061b9f183390190565b6120728061ca6083390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016196c16196c6565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016196c16040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156197785783516001600160a01b0316835260209384019390920191600101619751565b509095945050505050565b60005b8381101561979e578181015183820152602001619786565b50506000910152565b600081518084526197bf816020860160208601619783565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156198b5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261989f8486516197a7565b6020958601959094509290920191600101619865565b5091975050506020948501949290920191506001016197fb565b50929695505050505050565b600081518084526020840193506020830160005b8281101561992f5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016198ef565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526199a560408801826197a7565b90506020820151915086810360208801526199c081836198db565b965050506020938401939190910190600101619961565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619a398583516197a7565b945060209384019391909101906001016199ff565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152619acf60408701826198db565b9550506020938401939190910190600101619a76565b600060208284031215619af757600080fd5b8151801515811461565c57600080fd5b80516001600160a01b0381168114619b1e57600080fd5b919050565b600060208284031215619b3557600080fd5b61565c82619b07565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619bf8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152619c1960c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215619c4557600080fd5b5051919050565b600181811c90821680619c6057607f821691505b602082108103617821577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008060408385031215619cac57600080fd5b619cb583619b07565b6020939093015192949293505050565b604081526000619cd860408301856197a7565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619d3957619d39619ce7565b60405290565b60008067ffffffffffffffff841115619d5a57619d5a619ce7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619d8957619d89619ce7565b604052838152905080828401851015619da157600080fd5b617324846020830185619783565b600060208284031215619dc157600080fd5b815167ffffffffffffffff811115619dd857600080fd5b8201601f81018413619de957600080fd5b6154a384825160208401619d3f565b600060208284031215619e0a57600080fd5b815160ff8116811461565c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156154a7576154a7619e1b565b818103818111156154a7576154a7619e1b565b604081526000619e8360408301856197a7565b828103602084015261565881856197a7565b6001600160a01b0383168152604060208201526000616f5560408301846197a7565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619eef81601a850160208801619783565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351619f2c81601c840160208801619783565b01601c01949350505050565b60208152600061565c60208301846197a7565b600082601f830112619f5c57600080fd5b61565c83835160208501619d3f565b600060208284031215619f7d57600080fd5b815167ffffffffffffffff811115619f9457600080fd5b6154a384828501619f4b565b60008351619fb2818460208801619783565b835190830190619fc6818360208801619783565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a00781601a850160208801619783565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a044816033840160208801619783565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061565c60808301846197a7565b6000855161a0d3818460208a01619783565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a10d816001840160208a01619783565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a14b816002840160208901619783565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a18d816002840160208801619783565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a1d860408301846197a7565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a24f81601f850160208701619783565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a2bc60408301846197a7565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a30e60408301846197a7565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a385816014850160208701619783565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a420816001850160208701619783565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a466818460208701619783565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a51981604b850160208701619783565b91909101604b0192915050565b600060ff821660ff810361a53c5761a53c619e1b565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061565c60808301846197a7565b60006020828403121561a60957600080fd5b815167ffffffffffffffff81111561a62057600080fd5b82016060818503121561a63257600080fd5b61a63a619d16565b81518060030b811461a64b57600080fd5b8152602082015167ffffffffffffffff81111561a66757600080fd5b61a67386828501619f4b565b602083015250604082015167ffffffffffffffff81111561a69357600080fd5b61a69f86828501619f4b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a70b816021850160208701619783565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a8f7816021850160208801619783565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a93481602e840160208801619783565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a9fc816022850160208701619783565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161aa4181600e850160208701619783565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161ab1f816018850160208801619783565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161ab5c81601c840160208801619783565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ac62818460208701619783565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161acc981601c850160208701619783565b91909101601c0192915050565b6000600019820361ace95761ace9619e1b565b5060010190565b80820281158282048414176154a7576154a7619e1b565b6001815b600184111561ad425780850481111561ad265761ad26619e1b565b600184161561ad3457908102905b60019390931c92800261ad0b565b935093915050565b60008261ad59575060016154a7565b8161ad66575060006154a7565b816001811461ad7c576002811461ad865761ada2565b60019150506154a7565b60ff84111561ad975761ad97619e1b565b50506001821b6154a7565b5060208310610133831016604e8410600b841016171561adc5575081810a6154a7565b61add2600019848461ad07565b806000190482111561ade65761ade6619e1b565b029392505050565b600061565c838361ad4a565b60008161ae095761ae09619e1b565b506000190190565b6000835161ae23818460208801619783565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161ae5d816001840160208801619783565b01600101949350505050565b818103600083128015838313168383128216171561891c5761891c619e1b56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212206cfc8728f3e6a008fa60110012d328f8d2a859ba07c5fdfb6776051dc27a333964736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220d096ee6dcf3146cb3f765dc3c395bdf2d989c974fa3328ef8ba88e44ff2b383b64736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061eb078061003c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80638ce7ef051161019c578063d27b0427116100ee578063e02beae611610097578063f1f87f4011610071578063f1f87f40146104c3578063f2413096146104cb578063fa7626d4146104d357600080fd5b8063e02beae6146104ab578063e13aba48146104b3578063e20c9f71146104bb57600080fd5b8063d97136a2116100c8578063d97136a214610493578063dcba486a1461049b578063dfbdf600146104a357600080fd5b8063d27b04271461047b578063d509b16c14610483578063d591221f1461048b57600080fd5b8063b549984c11610150578063ba414fa61161012a578063ba414fa614610453578063d04cda981461046b578063d1fd32911461047357600080fd5b8063b549984c1461043b578063b5508aa914610443578063b79cad091461044b57600080fd5b8063a4aa6c7c11610181578063a4aa6c7c14610423578063ae9687dc1461042b578063b0464fdc1461043357600080fd5b80638ce7ef0514610406578063916a17c61461040e57600080fd5b80634b629509116102605780636ff45850116102095780637f924c4e116101e35780637f924c4e146103e157806380326680146103e957806385226c81146103f157600080fd5b80636ff45850146103c957806370557298146103d15780637ee68316146103d957600080fd5b806358fdbbe01161023a57806358fdbbe0146103a45780635f01db7e146103ac57806366d9a9a0146103b457600080fd5b80634b6295091461038c5780634cfc0aaa14610394578063513999621461039c57600080fd5b806328438826116102c25780633be9ec801161029c5780633be9ec80146103745780633e5e3c231461037c5780633f7286f41461038457600080fd5b8063284388261461034f5780632ade3880146103575780632f6254fc1461036c57600080fd5b80630a9254e4116102f35780630a9254e4146103215780631142744e146103295780631ed7831c1461033157600080fd5b80630393998b1461030f5780630809dfef14610319575b600080fd5b6103176104e0565b005b6103176105e2565b610317610770565b610317610e52565b610339610f36565b6040516103469190619737565b60405180910390f35b610317610f98565b61035f6111e3565b60405161034691906197d3565b610317611325565b610317611496565b610339611683565b6103396116e3565b610317611743565b610317611816565b6103176118ef565b610317611c6c565b610317611d3f565b6103bc611eac565b6040516103469190619939565b61031761202e565b61031761223e565b61031761248e565b61031761291f565b610317612b43565b6103f9612c17565b60405161034691906199d7565b610317612ce7565b610416612ee7565b6040516103469190619a4e565b610317612fe2565b610317613197565b610416613424565b61031761351f565b6103f96135f1565b6103176136c1565b61045b613a53565b6040519015158152602001610346565b610317613b27565b610317613c6b565b610317613dae565b610317613ef1565b610317614585565b610317614669565b6103176147ef565b610317614a72565b610317614bb5565b610317614de2565b61033961508c565b6103176150ec565b610317615232565b601f5461045b9060ff1681565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561054c57600080fd5b505af1158015610560573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156105c857600080fd5b505af11580156105dc573d6000803e3d6000fd5b50505050565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561063b57600080fd5b505af115801561064f573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156106bf57600080fd5b505af11580156106d3573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076d9190619ae5565b50565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580549091166112341790556040516107b690619657565b604051809103906000f0801580156107d2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054925190810193909352921660448201526108b6919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc9550000000000000000000000000000000000000000000000000000000017905261548e565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190619b23565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610a1157600080fd5b505af1158015610a25573d6000803e3d6000fd5b505050506000806000604051610a3a90619664565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a76573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602154604051601293600193849360009391921690610acc90619671565b610adb96959493929190619b3e565b604051809103906000f080158015610af7573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610b9757600080fd5b505af1158015610bab573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610c1557600080fd5b505af1158015610c29573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610ca957600080fd5b505af1158015610cbd573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d3d57600080fd5b505af1158015610d51573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df39190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105c857600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610ebe57600080fd5b505af1158015610ed2573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef24915060440161072a565b60606016805480602002602001604051908101604052809291908181526020018280548015610f8e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f70575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110119190619c33565b905061101e6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ba9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561112757600080fd5b505af115801561113b573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af11580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190619ae5565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561131c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561130557838290600052602060002001805461127890619c4c565b80601f01602080910402602001604051908101604052809291908181526020018280546112a490619c4c565b80156112f15780601f106112c6576101008083540402835291602001916112f1565b820191906000526020600020905b8154815290600101906020018083116112d457829003601f168201915b505050505081526020019060010190611259565b505050508152505081526020019060010190611207565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561137e57600080fd5b505af1158015611392573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113fa57600080fd5b505af115801561140e573d6000803e3d6000fd5b50505050611494601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190619b23565b613211615535565b565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114ef57600080fd5b505af1158015611503573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561156d57600080fd5b505af1158015611581573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115f257600080fd5b505af1158015611606573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561165f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190619c99565b60606018805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc7759991506024016105ae565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b3915060440161072a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561194d57600080fd5b505af1158015611961573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119c857600080fd5b505af11580156119dc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a3957600080fd5b505af1158015611a4d573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5f9190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bbe57600080fd5b505af1158015611bd2573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119b9190600190603801619cc5565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cd857600080fd5b505af1158015611cec573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc91506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d9857600080fd5b505af1158015611dac573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611e1357600080fd5b505af1158015611e27573d6000803e3d6000fd5b50505050611494600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea79190619c33565b6154ad565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561131c5783829060005260206000209060020201604051806040016040529081600082018054611f0390619c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2f90619c4c565b8015611f7c5780601f10611f5157610100808354040283529160200191611f7c565b820191906000526020600020905b815481529060010190602001808311611f5f57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561201657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611fc35790505b50505050508152505081526020019060010190611ed0565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a79190619c33565b90506120b46000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561212c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121509190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156121bd57600080fd5b505af11580156121d1573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd915060640161119b565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b79190619c33565b90506122c46000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561233b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235f9190619ae5565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af11580156123e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124089190619ae5565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561245e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124829190619c33565b90506111de82826154ad565b6125476040518060400160405280600581526020017f544f4b454e000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125429190810190619daf565b615596565b6125d36040518060400160405280600381526020017f544b4e0000000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561262c57600080fd5b505af1158015612640573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b1580156126d457600080fd5b505af11580156126e8573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561274557600080fd5b505af1158015612759573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c82469150606401600060405180830381600087803b1580156127ef57600080fd5b505af1158015612803573d6000803e3d6000fd5b505050506128936040518060400160405280600681526020017f544f4b454e320000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b6114946040518060400160405280600481526020017f544b4e3200000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561251a573d6000803e3d6000fd5b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129989190619c33565b90506129a7620186a0826154ad565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a0057600080fd5b505af1158015612a14573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015612a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab69190619ae5565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b309190619c33565b9050612b3f62030d40826154ad565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612baf57600080fd5b505af1158015612bc3573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c68915060240161072a565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561131c578382906000526020600020018054612c5a90619c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054612c8690619c4c565b8015612cd35780601f10612ca857610100808354040283529160200191612cd3565b820191906000526020600020905b815481529060010190602001808311612cb657829003601f168201915b505050505081526020019060010190612c3b565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d609190619c33565b9050612d6d6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e099190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612e7657600080fd5b505af1158015612e8a573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb915060440161119b565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561131c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612fca57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f775790505b50505050508152505081526020019060010190612f0b565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561305a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307e9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156130eb57600080fd5b505af11580156130ff573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af1158015613173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3f9190619ae5565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156131ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132149190810190619daf565b90506132556040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156132aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132d29190810190619daf565b90506133136040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338c9190619df8565b905061339c60128260ff166154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134159190619c33565b90506105dc620186a0826154ad565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561131c5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561350757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116134b45790505b50505050508152505081526020019060010190613448565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561358b57600080fd5b505af115801561359f573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a91506024016105ae565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561131c57838290600052602060002001805461363490619c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461366090619c4c565b80156136ad5780601f10613682576101008083540402835291602001916136ad565b820191906000526020600020905b81548152906001019060200180831161369057829003601f168201915b505050505081526020019060010190613615565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561372357600080fd5b505af1158015613737573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b15801561379e57600080fd5b505af11580156137b2573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561380f57600080fd5b505af1158015613823573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561388a57600080fd5b505af115801561389e573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af1158015613914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139389190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156139a557600080fd5b505af11580156139b9573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119b9190606490603801619cc5565b60085460009060ff1615613a6b575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b209190619c33565b1415905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b8057600080fd5b505af1158015613b94573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613bfb57600080fd5b505af1158015613c0f573d6000803e3d6000fd5b50505050611494600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613cc457600080fd5b505af1158015613cd8573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613d4857600080fd5b505af1158015613d5c573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc7759991506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e0757600080fd5b505af1158015613e1b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613e8b57600080fd5b505af1158015613e9f573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc91506024016105ae565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f4f57600080fd5b505af1158015613f63573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561403b57600080fd5b505af115801561404f573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156140b657600080fd5b505af11580156140ca573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015614121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141459190619c33565b9050614154620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141cd9190619c33565b90506141dc620186a0826154ad565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142559190619c33565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af11580156142c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142eb9190619ae5565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691614383919061c35090603801619cc5565b6020604051808303816000875af11580156143a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143c69190619ae5565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561441c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144409190619c33565b9050614460856144508885619e4a565b61445a9190619e4a565b826154ad565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156144b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d89190619c33565b90506144f4866144ea8961c350619e5d565b61445a9190619e5d565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061456d9190619c33565b905061457b61c350826154ad565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa1580156145da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145fe9190619c33565b905061460b6000826154ad565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb906044016123c5565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af11580156146e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147059190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561477257600080fd5b505af1158015614786573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401613154565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561484857600080fd5b505af115801561485c573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b1580156148c857600080fd5b505af11580156148dc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561493957600080fd5b505af115801561494d573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156149b457600080fd5b505af11580156149c8573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015614a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a459190619c99565b601f549193509150614a659061010090046001600160a01b031683615535565b6105dc61445a8486619e4a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614acb57600080fd5b505af1158015614adf573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b158015614b4757600080fd5b505af1158015614b5b573d6000803e3d6000fd5b50505050611494601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611468573d6000803e3d6000fd5b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614c2157600080fd5b505af1158015614c35573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b158015614cc957600080fd5b505af1158015614cdd573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614d4d57600080fd5b505af1158015614d61573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c824691506064016105ae565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e5a9190619c33565b9050614e69620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ee29190619c33565b9050614ef1620186a0826154ad565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f7e9190619ae5565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ff79190619c33565b905061500561c350826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561505a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061507e9190619c33565b90506105dc61c350826154ad565b60606015805480602002602001604051908101604052809291908181526020018280548015610f8e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f70575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561514557600080fd5b505af1158015615159573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b1580156151c357600080fd5b505af11580156151d7573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016115d8565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015615287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152ab9190619c33565b90506152b86000826154ad565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa15801561532e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153529190619c33565b905061535f6000826154ad565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156153cf57600080fd5b505af11580156153e3573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af115801561546a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190619ae5565b600061549861967e565b6154a38484836155e8565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b15801561551957600080fd5b505afa15801561552d573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401615501565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d963906155019085908590600401619e70565b6000806155f58584615663565b90506156586040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615643929190619e95565b6040516020818303038152906040528561566f565b9150505b9392505050565b600061565c838361569d565b60c081015151600090156156935761568c84848460c001516156b8565b905061565c565b61568c848461585e565b60006156a98383615949565b61565c8383602001518461566f565b6000806156c3615955565b905060006156d18683615a28565b905060006156e88260600151836020015185615ece565b905060006156f8838389896160e0565b9050600061570582616f5d565b602081015181519192509060030b156157785789826040015160405160200161572f929190619eb7565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261576f91600401619f38565b60405180910390fd5b60006157bb6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161712c565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061580e908490600401619f38565b602060405180830381865afa15801561582b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061584f9190619b23565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906158b3908790600401619f38565b600060405180830381865afa1580156158d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158f89190810190619f6b565b905060006159268285604051602001615912929190619fa0565b60405160208183030381529060405261732c565b90506001600160a01b0381166154a357848460405160200161572f929190619fcf565b612b3f8282600061733f565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906159dc90849060040161a07a565b600060405180830381865afa1580156159f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a219190810190619daf565b9250505090565b615a5a6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050615aa56040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b615aae85617442565b60208201526000615abe86617827565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615b00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b289190810190619daf565b86838560200151604051602001615b42949392919061a0c1565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190615b9a908590600401619f38565b600060405180830381865afa158015615bb7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615bdf9190810190619daf565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615c2790849060040161a1c5565b602060405180830381865afa158015615c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c689190619ae5565b615c7d578160405160200161572f919061a217565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615cc290849060040161a2a9565b600060405180830381865afa158015615cdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d079190810190619daf565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615d4e90849060040161a2fb565b602060405180830381865afa158015615d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615d8f9190619ae5565b15615e24576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615dd990849060040161a2fb565b600060405180830381865afa158015615df6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e1e9190810190619daf565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615e49919061a34d565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615e75929190619e70565b600060405180830381865afa158015615e92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615eba9190810190619daf565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615eea5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615f4a57615f4a61a3b9565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615f9e57615f9e61a3b9565b602002602001018190525084604051602001615fba919061a3e8565b60405160208183030381529060405281600281518110615fdc57615fdc61a3b9565b602002602001018190525082604051602001615ff8919061a454565b6040516020818303038152906040528160038151811061601a5761601a61a3b9565b6020026020010181905250600061603082616f5d565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506160c19060408051808201825260008082526020918201528151808301909252845182528085019082015290617aaa565b6160d6578560405160200161572f919061a495565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616130565b511590565b6162a4578260200151156161ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161576f565b8260c00151156162a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161576f565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816162bd57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806163189061a526565b935060ff168151811061632d5761632d61a3b9565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161637e919061a545565b6040516020818303038152906040528282806163999061a526565b935060ff16815181106163ae576163ae61a3b9565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806163fb9061a526565b935060ff16815181106164105761641061a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061645d9061a526565b935060ff16815181106164725761647261a3b9565b6020026020010181905250876020015182828061648e9061a526565b935060ff16815181106164a3576164a361a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806164f09061a526565b935060ff16815181106165055761650561a3b9565b60209081029190910101528751828261651d8161a526565b935060ff16815181106165325761653261a3b9565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061657f9061a526565b935060ff16815181106165945761659461a3b9565b60200260200101819052506165a846617b0b565b82826165b38161a526565b935060ff16815181106165c8576165c861a3b9565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806166159061a526565b935060ff168151811061662a5761662a61a3b9565b6020026020010181905250868282806166429061a526565b935060ff16815181106166575761665761a3b9565b602090810291909101015285511561677e5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826166a88161a526565b935060ff16815181106166bd576166bd61a3b9565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061670d908990600401619f38565b600060405180830381865afa15801561672a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167529190810190619daf565b828261675d8161a526565b935060ff16815181106167725761677261a3b9565b60200260200101819052505b84602001511561684e5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826167c78161a526565b935060ff16815181106167dc576167dc61a3b9565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806168299061a526565b935060ff168151811061683e5761683e61a3b9565b6020026020010181905250616a15565b61688661612b8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6169195760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826168c98161a526565b935060ff16815181106168de576168de61a3b9565b60200260200101819052508460a001516040516020016168fe919061a3e8565b6040516020818303038152906040528282806168299061a526565b8460c0015115801561695c57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261695a90511590565b155b15616a155760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826169a08161a526565b935060ff16815181106169b5576169b561a3b9565b60200260200101819052506169c988617bab565b6040516020016169d9919061a3e8565b6040516020818303038152906040528282806169f49061a526565b935060ff1681518110616a0957616a0961a3b9565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152616a4990511590565b616ade5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282616a8c8161a526565b935060ff1681518110616aa157616aa161a3b9565b60200260200101819052508460400151828280616abd9061a526565b935060ff1681518110616ad257616ad261a3b9565b60200260200101819052505b606085015115616bff5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282616b278161a526565b935060ff1681518110616b3c57616b3c61a3b9565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616bab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616bd39190810190619daf565b8282616bde8161a526565b935060ff1681518110616bf357616bf361a3b9565b60200260200101819052505b60e08501515115616ca65760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616c498161a526565b935060ff1681518110616c5e57616c5e61a3b9565b6020026020010181905250616c7a8560e0015160000151617b0b565b8282616c858161a526565b935060ff1681518110616c9a57616c9a61a3b9565b60200260200101819052505b60e08501516020015115616d505760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616cf38161a526565b935060ff1681518110616d0857616d0861a3b9565b6020026020010181905250616d248560e0015160200151617b0b565b8282616d2f8161a526565b935060ff1681518110616d4457616d4461a3b9565b60200260200101819052505b60e08501516040015115616dfa5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282616d9d8161a526565b935060ff1681518110616db257616db261a3b9565b6020026020010181905250616dce8560e0015160400151617b0b565b8282616dd98161a526565b935060ff1681518110616dee57616dee61a3b9565b60200260200101819052505b60e08501516060015115616ea45760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616e478161a526565b935060ff1681518110616e5c57616e5c61a3b9565b6020026020010181905250616e788560e0015160600151617b0b565b8282616e838161a526565b935060ff1681518110616e9857616e9861a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616ec257616ec2619ce7565b604051908082528060200260200182016040528015616ef557816020015b6060815260200190600190039081616ee05790505b50905060005b8260ff168160ff161015616f4e57838160ff1681518110616f1e57616f1e61a3b9565b6020026020010151828260ff1681518110616f3b57616f3b61a3b9565b6020908102919091010152600101616efb565b5093505050505b949350505050565b616f846040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161700a9186910161a5b0565b600060405180830381865afa158015617027573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261704f9190810190619daf565b9050600061705d868361869a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161708d91906199d7565b6000604051808303816000875af11580156170ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526170d4919081019061a5f7565b805190915060030b158015906170ed5750602081015151155b80156170fc5750604081015151155b156160d657816000815181106171145761711461a3b9565b602002602001015160405160200161572f919061a6ad565b606060006171618560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506171989082905b906187ef565b156172f55760006172158261720f846172096171db8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618816565b90618878565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506172799082906187ef565b156172e357604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172e0905b82906188fd565b90505b6172ec81618923565b9250505061565c565b821561730e57848460405160200161572f92919061a899565b505060408051602081019091526000815261565c565b509392505050565b6000808251602084016000f09392505050565b8160a001511561734e57505050565b600061735b84848461898c565b9050600061736882616f5d565b602081015181519192509060030b1580156174045750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261740490604080518082018252600080825260209182015281518083019092528451825280850190820152617192565b1561741157505050505050565b6040820151511561743157816040015160405160200161572f919061a940565b8060405160200161572f919061a99e565b606060006174778360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506174dc905b8290617aaa565b1561754b57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546908390618f27565b618923565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ad905b8290618fb1565b60010361767a57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617613906172d9565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546905b83906188fd565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176d9906174d5565b1561781057604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061774190839061904b565b9050600081600183516177549190619e5d565b815181106177645761776461a3b9565b602002602001015190506178076175466177da6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618f27565b95945050505050565b8260405160200161572f919061aa09565b50919050565b6060600061785c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506178be906174d5565b156178cc5761565c81618923565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261792b906175a6565b60010361799557604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c9061754690617673565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179f4906174d5565b1561781057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617a5c90839061904b565b9050600181511115617a98578060028251617a779190619e5d565b81518110617a8757617a8761a3b9565b602002602001015192505050919050565b508260405160200161572f919061aa09565b805182516000911115617abf575060006154a7565b81518351602085015160009291617ad591619e4a565b617adf9190619e5d565b905082602001518103617af65760019150506154a7565b82516020840151819020912014905092915050565b60606000617b18836190f0565b600101905060008167ffffffffffffffff811115617b3857617b38619ce7565b6040519080825280601f01601f191660200182016040528015617b62576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617b6c57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617c37905b82906191d2565b15617c7757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cd690617c30565b15617d1657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d7590617c30565b15617db557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e1490617c30565b80617e795750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e7990617c30565b15617eb957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f1890617c30565b80617f7d5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f7d90617c30565b15617fbd57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261801c90617c30565b806180815750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261808190617c30565b156180c157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261812090617c30565b806181855750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261818590617c30565b156181c557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261822490617c30565b1561826457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182c390617c30565b1561830357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261836290617c30565b156183a257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261840190617c30565b1561844157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184a090617c30565b156184e057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261853f90617c30565b806185a45750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185a490617c30565b156185e457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261864390617c30565b1561868357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161572f929060200161aae7565b60608060005b845181101561872557818582815181106186bc576186bc61a3b9565b60200260200101516040516020016186d5929190619fa0565b6040516020818303038152906040529150600185516186f49190619e5d565b811461871d578160405160200161870b919061ac50565b60405160208183030381529060405291505b6001016186a0565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161873e57905050905083816000815181106187695761876961a3b9565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106187bd576187bd61a3b9565b602002602001018190525081816002815181106187dc576187dc61a3b9565b6020908102919091010152949350505050565b602080830151835183519284015160009361880d92918491906191e6565b14159392505050565b6040805180820190915260008082526020820152600061884884600001518560200151856000015186602001516192f7565b905083602001518161885a9190619e5d565b84518590618869908390619e5d565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561889d5750816154a7565b60208083015190840151600191146188c45750815160208481015190840151829020919020145b80156188f5578251845185906188db908390619e5d565b90525082516020850180516188f1908390619e4a565b9052505b509192915050565b604080518082019091526000808252602082015261891c838383619417565b5092915050565b60606000826000015167ffffffffffffffff81111561894457618944619ce7565b6040519080825280601f01601f19166020018201604052801561896e576020820181803683370190505b509050600060208201905061891c81856020015186600001516194c2565b60606000618998615955565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816189b557905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618a109061a526565b935060ff1681518110618a2557618a2561a3b9565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618a76919061ac91565b604051602081830303815290604052828280618a919061a526565b935060ff1681518110618aa657618aa661a3b9565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618af39061a526565b935060ff1681518110618b0857618b0861a3b9565b602002602001018190525082604051602001618b24919061a454565b604051602081830303815290604052828280618b3f9061a526565b935060ff1681518110618b5457618b5461a3b9565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618ba19061a526565b935060ff1681518110618bb657618bb661a3b9565b6020026020010181905250618bcb878461953c565b8282618bd68161a526565b935060ff1681518110618beb57618beb61a3b9565b602090810291909101015285515115618c975760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282618c3d8161a526565b935060ff1681518110618c5257618c5261a3b9565b6020026020010181905250618c6b86600001518461953c565b8282618c768161a526565b935060ff1681518110618c8b57618c8b61a3b9565b60200260200101819052505b856080015115618d055760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282618ce08161a526565b935060ff1681518110618cf557618cf561a3b9565b6020026020010181905250618d6b565b8415618d6b5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282618d4a8161a526565b935060ff1681518110618d5f57618d5f61a3b9565b60200260200101819052505b60408601515115618e075760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618db58161a526565b935060ff1681518110618dca57618dca61a3b9565b60200260200101819052508560400151828280618de69061a526565b935060ff1681518110618dfb57618dfb61a3b9565b60200260200101819052505b856060015115618e715760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618e508161a526565b935060ff1681518110618e6557618e6561a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618e8f57618e8f619ce7565b604051908082528060200260200182016040528015618ec257816020015b6060815260200190600190039081618ead5790505b50905060005b8260ff168160ff161015618f1b57838160ff1681518110618eeb57618eeb61a3b9565b6020026020010151828260ff1681518110618f0857618f0861a3b9565b6020908102919091010152600101618ec8565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618f4c5750816154a7565b81518351602085015160009291618f6291619e4a565b618f6c9190619e5d565b60208401519091506001908214618f8d575082516020840151819020908220145b8015618fa857835185518690618fa4908390619e5d565b9052505b50929392505050565b6000808260000151618fd585600001518660200151866000015187602001516192f7565b618fdf9190619e4a565b90505b83516020850151618ff39190619e4a565b811161891c57816190038161acd6565b925050826000015161903a85602001518361901e9190619e5d565b865161902a9190619e5d565b83866000015187602001516192f7565b6190449190619e4a565b9050618fe2565b606060006190598484618fb1565b619064906001619e4a565b67ffffffffffffffff81111561907c5761907c619ce7565b6040519080825280602002602001820160405280156190af57816020015b606081526020019060019003908161909a5790505b50905060005b8151811015617324576190cb61754686866188fd565b8282815181106190dd576190dd61a3b9565b60209081029190910101526001016190b5565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619139577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619165576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061918357662386f26fc10000830492506010015b6305f5e100831061919b576305f5e100830492506008015b61271083106191af57612710830492506004015b606483106191c1576064830492506002015b600a83106154a75760010192915050565b60006191de838361957c565b159392505050565b6000808584116192ed5760208411619299576000841561923157600161920d866020619e5d565b61921890600861acf0565b61922390600261adee565b61922d9190619e5d565b1990505b83518116856192408989619e4a565b61924a9190619e5d565b805190935082165b8181146192845787841161926c5787945050505050616f55565b836192768161adfa565b945050828451169050619252565b61928e8785619e4a565b945050505050616f55565b8383206192a68588619e5d565b6192b09087619e4a565b91505b8582106192eb578482208082036192d8576192ce8684619e4a565b9350505050616f55565b6192e3600184619e5d565b9250506192b3565b505b5092949350505050565b6000838186851161940257602085116193b1576000851561934357600161931f876020619e5d565b61932a90600861acf0565b61933590600261adee565b61933f9190619e5d565b1990505b845181166000876193548b8b619e4a565b61935e9190619e5d565b855190915083165b8281146193a35781861061938b5761937e8b8b619e4a565b9650505050505050616f55565b856193958161acd6565b965050838651169050619366565b859650505050505050616f55565b508383206000905b6193c38689619e5d565b8211619400578583208082036193df5783945050505050616f55565b6193ea600185619e4a565b93505081806193f89061acd6565b9250506193b9565b505b61940c8787619e4a565b979650505050505050565b6040805180820190915260008082526020820152600061944985600001518660200151866000015187602001516192f7565b6020808701805191860191909152519091506194659082619e5d565b8352845160208601516194789190619e4a565b810361948757600085526194b9565b835183516194959190619e4a565b855186906194a4908390619e5d565b90525083516194b39082619e4a565b60208601525b50909392505050565b602081106194fa57815183526194d9602084619e4a565b92506194e6602083619e4a565b91506194f3602082619e5d565b90506194c2565b6000198115619529576001619510836020619e5d565b61951c9061010061adee565b6195269190619e5d565b90505b9151835183169219169190911790915250565b6060600061954a8484615a28565b80516020808301516040519394506195649390910161ae11565b60405160208183030381529060405291505092915050565b815181516000919081111561958f575081515b6020808501519084015160005b8381101561964857825182518082146196185760001960208710156195f7576001846195c9896020619e5d565b6195d39190619e4a565b6195de90600861acf0565b6195e990600261adee565b6195f39190619e5d565b1990505b81811683821681810391146196155797506154a79650505050505050565b50505b619623602086619e4a565b9450619630602085619e4a565b935050506020816196419190619e4a565b905061959c565b50845186516160d6919061ae69565b610b678061ae8a83390190565b61106f8061b9f183390190565b6120728061ca6083390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016196c16196c6565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016196c16040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156197785783516001600160a01b0316835260209384019390920191600101619751565b509095945050505050565b60005b8381101561979e578181015183820152602001619786565b50506000910152565b600081518084526197bf816020860160208601619783565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156198b5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261989f8486516197a7565b6020958601959094509290920191600101619865565b5091975050506020948501949290920191506001016197fb565b50929695505050505050565b600081518084526020840193506020830160005b8281101561992f5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016198ef565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526199a560408801826197a7565b90506020820151915086810360208801526199c081836198db565b965050506020938401939190910190600101619961565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619a398583516197a7565b945060209384019391909101906001016199ff565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152619acf60408701826198db565b9550506020938401939190910190600101619a76565b600060208284031215619af757600080fd5b8151801515811461565c57600080fd5b80516001600160a01b0381168114619b1e57600080fd5b919050565b600060208284031215619b3557600080fd5b61565c82619b07565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619bf8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152619c1960c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215619c4557600080fd5b5051919050565b600181811c90821680619c6057607f821691505b602082108103617821577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008060408385031215619cac57600080fd5b619cb583619b07565b6020939093015192949293505050565b604081526000619cd860408301856197a7565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619d3957619d39619ce7565b60405290565b60008067ffffffffffffffff841115619d5a57619d5a619ce7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619d8957619d89619ce7565b604052838152905080828401851015619da157600080fd5b617324846020830185619783565b600060208284031215619dc157600080fd5b815167ffffffffffffffff811115619dd857600080fd5b8201601f81018413619de957600080fd5b6154a384825160208401619d3f565b600060208284031215619e0a57600080fd5b815160ff8116811461565c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156154a7576154a7619e1b565b818103818111156154a7576154a7619e1b565b604081526000619e8360408301856197a7565b828103602084015261565881856197a7565b6001600160a01b0383168152604060208201526000616f5560408301846197a7565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619eef81601a850160208801619783565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351619f2c81601c840160208801619783565b01601c01949350505050565b60208152600061565c60208301846197a7565b600082601f830112619f5c57600080fd5b61565c83835160208501619d3f565b600060208284031215619f7d57600080fd5b815167ffffffffffffffff811115619f9457600080fd5b6154a384828501619f4b565b60008351619fb2818460208801619783565b835190830190619fc6818360208801619783565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a00781601a850160208801619783565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a044816033840160208801619783565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061565c60808301846197a7565b6000855161a0d3818460208a01619783565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a10d816001840160208a01619783565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a14b816002840160208901619783565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a18d816002840160208801619783565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a1d860408301846197a7565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a24f81601f850160208701619783565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a2bc60408301846197a7565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a30e60408301846197a7565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a385816014850160208701619783565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a420816001850160208701619783565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a466818460208701619783565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a51981604b850160208701619783565b91909101604b0192915050565b600060ff821660ff810361a53c5761a53c619e1b565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061565c60808301846197a7565b60006020828403121561a60957600080fd5b815167ffffffffffffffff81111561a62057600080fd5b82016060818503121561a63257600080fd5b61a63a619d16565b81518060030b811461a64b57600080fd5b8152602082015167ffffffffffffffff81111561a66757600080fd5b61a67386828501619f4b565b602083015250604082015167ffffffffffffffff81111561a69357600080fd5b61a69f86828501619f4b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a70b816021850160208701619783565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a8f7816021850160208801619783565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a93481602e840160208801619783565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a9fc816022850160208701619783565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161aa4181600e850160208701619783565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161ab1f816018850160208801619783565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161ab5c81601c840160208801619783565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ac62818460208701619783565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161acc981601c850160208701619783565b91909101601c0192915050565b6000600019820361ace95761ace9619e1b565b5060010190565b80820281158282048414176154a7576154a7619e1b565b6001815b600184111561ad425780850481111561ad265761ad26619e1b565b600184161561ad3457908102905b60019390931c92800261ad0b565b935093915050565b60008261ad59575060016154a7565b8161ad66575060006154a7565b816001811461ad7c576002811461ad865761ada2565b60019150506154a7565b60ff84111561ad975761ad97619e1b565b50506001821b6154a7565b5060208310610133831016604e8410600b841016171561adc5575081810a6154a7565b61add2600019848461ad07565b806000190482111561ade65761ade6619e1b565b029392505050565b600061565c838361ad4a565b60008161ae095761ae09619e1b565b506000190190565b6000835161ae23818460208801619783565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161ae5d816001840160208801619783565b01600101949350505050565b818103600083128015838313168383128216171561891c5761891c619e1b56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220e022243ea23b9a8b3124c978103fdd8ef6145763525499fed01d4848faff43a264736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a264697066735822122093e75ee8b844eac5de93f68fd5e4eac7b5b403e5afb156d7fca9723e51dedc8e64736f6c634300081a0033", } // ZRC20TestABI is the input ABI used to generate the binding from. diff --git a/v2/types/factories/GatewayZEVMUpgradeTest__factory.ts b/v2/types/factories/GatewayZEVMUpgradeTest__factory.ts index ba65fe1de..a6285e19a 100644 --- a/v2/types/factories/GatewayZEVMUpgradeTest__factory.ts +++ b/v2/types/factories/GatewayZEVMUpgradeTest__factory.ts @@ -1399,7 +1399,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b0380861692635bcfd6169261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d3557887868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b03841690635bcfd6169061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea26469706673582212208a13c91b149fb6f550c049c370fc634fbf4f102e79ec8481debd5fbf58cc261f64736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b0380861692635bcfd6169261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167f3adf8a8d73037d29dfb621546205d69f95d01f9613c3c811af66901fc1d3557887868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b03841690635bcfd6169061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea26469706673582212204fdb58d6b9d313e5e1051a4c98078e3c6a8baff2220a2505931828e8ef6a4f4464736f6c634300081a0033"; type GatewayZEVMUpgradeTestConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/GatewayZEVM__factory.ts b/v2/types/factories/GatewayZEVM__factory.ts index d22f567f2..53298b1b7 100644 --- a/v2/types/factories/GatewayZEVM__factory.ts +++ b/v2/types/factories/GatewayZEVM__factory.ts @@ -1302,7 +1302,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b0380861692635bcfd6169261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b03841690635bcfd6169061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea26469706673582212205b760c9072c4b8b5ebc94339927027ff9e67d3127c5bf7f24bb821ffbe32443064736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a126100fd600039600081816126080152818161263101526128070152613a126000f3fe6080604052600436106101c65760003560e01c806352d1902d116100f757806397d340f511610095578063c39aca3711610064578063c39aca371461061c578063d547741f1461063c578063e63ab1e91461065c578063f45346dc1461069057600080fd5b806397d340f51461057b578063a217fddf14610591578063ad3cb1cc146105a6578063bcf7f32b146105fc57600080fd5b80637c0dcb5f116100d15780637c0dcb5f146104c65780638456cb59146104e657806391d14854146104fb57806397a1cef11461056057600080fd5b806352d1902d1461045a5780635c975abb1461046f578063717d335f146104a657600080fd5b80632f2ff15d116101645780633ce4a5bc1161013e5780633ce4a5bc146103ea5780633f4ba83a14610412578063485cc955146104275780634f1ef2861461044757600080fd5b80632f2ff15d1461038a57806336568abe146103aa5780633b283933146103ca57600080fd5b80631cb5ea75116101a05780631cb5ea75146102b557806321501a95146102d557806321e093b1146102f5578063248a9ca31461032d57600080fd5b806301ffc9a7146102405780630310eb7614610275578063048ae42c1461029557600080fd5b3661023b576101d36106b0565b6000546001600160a01b0316331480159061020257503373735b14bb79463307aacbed86daf3322b1e6226ab14155b15610239576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024c57600080fd5b5061026061025b366004612d50565b61070e565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610239610290366004612dbf565b6107a7565b3480156102a157600080fd5b506102396102b0366004612f81565b610a33565b3480156102c157600080fd5b506102396102d0366004613041565b610c81565b3480156102e157600080fd5b506102396102f03660046130f6565b610f8b565b34801561030157600080fd5b50600054610315906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561033957600080fd5b5061037c610348366004613182565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161026c565b34801561039657600080fd5b506102396103a536600461319b565b611158565b3480156103b657600080fd5b506102396103c536600461319b565b6111a2565b3480156103d657600080fd5b506102396103e53660046131cb565b6111f3565b3480156103f657600080fd5b5061031573735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041e57600080fd5b50610239611235565b34801561043357600080fd5b5061023961044236600461325e565b61126a565b61023961045536600461328c565b6114bf565b34801561046657600080fd5b5061037c6114de565b34801561047b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610260565b3480156104b257600080fd5b506102396104c13660046132dc565b61150d565b3480156104d257600080fd5b506102396104e1366004613322565b611615565b3480156104f257600080fd5b50610239611874565b34801561050757600080fd5b5061026061051636600461319b565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056c57600080fd5b506102396103e536600461339b565b34801561058757600080fd5b5061037c61040081565b34801561059d57600080fd5b5061037c600081565b3480156105b257600080fd5b506105ef6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161026c919061346d565b34801561060857600080fd5b50610239610617366004613480565b6118a6565b34801561062857600080fd5b50610239610637366004613480565b6119d6565b34801561064857600080fd5b5061023961065736600461319b565b611be5565b34801561066857600080fd5b5061037c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561069c57600080fd5b506102396106ab36600461351e565b611c29565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561070c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107f4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107fc6106b0565b6001600160a01b038416158061081957506001600160a01b038216155b15610850576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361088a576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108bd57506001600160a01b03821630145b156108f4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610980919061356e565b6109b6576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109fb908490600401613638565b600060405180830381600087803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b5050505050505050565b610a3b611e38565b610a436106b0565b610a53604082016020830161369e565b15610a8a576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8651600003610ac5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610aff576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610b39576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610b4960608301836136bb565b610b54915085613720565b10610b8b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b98878785611eb9565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d919061375a565b8c8c8c8c604051610c46999897969594939291906137f4565b60405180910390a350610c7860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610c89611e38565b610c916106b0565b610ca1604082016020830161369e565b15610cd8576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551600003610d13576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003610d4d576040517f60ee124700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610400610d5d60608301836136bb565b610d68915085613720565b1115610da0576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf919061356e565b610f05576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610f50959493929190613895565b60405180910390a35050610f8360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610fd8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe06106b0565b6001600160a01b038316611020576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361105a576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061108d57506001600160a01b03831630145b156110c4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110ce84846121bc565b6000546040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b0380861692635bcfd6169261111f928a9216908990889088906004016138e1565b600060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111928161238a565b61119c8383612394565b50505050565b6001600160a01b03811633146111e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ee8282612481565b505050565b6111fb611e38565b6112036106b0565b6040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61125f8161238a565b611267612545565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156112b55750825b905060008267ffffffffffffffff1660011480156112d25750303b155b9050811580156112e0575080155b15611317576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061139557506001600160a01b038616155b156113cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113d46125d5565b6113dc6125d5565b6113e46125dd565b6113ec6125ed565b6113f7600087612394565b506114227f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87612394565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610c785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114c76125fd565b6114d0826126cd565b6114da82826126d8565b5050565b60006114e86127fc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461155a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115626106b0565b6001600160a01b0382166115a2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906115e7908490600401613638565b600060405180830381600087803b15801561160157600080fd5b505af1158015610f83573d6000803e3d6000fd5b61161d611e38565b6116256106b0565b611635604082016020830161369e565b1561166c576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000036116a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036116e1576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104006116f160608301836136bb565b9050111561172b576040517f9507fb3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611737848461285e565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cc919061375a565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e919061375a565b8a6040516118429796959493929190613952565b60405180910390a35061119c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61189e8161238a565b6112676128cc565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118f3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fb6106b0565b6001600160a01b038516158061191857506001600160a01b038316155b1561194f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5bcfd6160000000000000000000000000000000000000000000000000000000081526001600160a01b03841690635bcfd6169061199c90899089908990889088906004016138e1565b600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a23576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a2b6106b0565b6001600160a01b0385161580611a4857506001600160a01b038316155b15611a7f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611ab9576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611aec57506001600160a01b03831630145b15611b23576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf919061356e565b61194f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1f8161238a565b61119c8383612481565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c76576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c7e6106b0565b6001600160a01b0383161580611c9b57506001600160a01b038116155b15611cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611d0c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d3f57506001600160a01b03811630145b15611d76576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e02919061356e565b6111ee576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eec91815260200190565b6040805180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613867565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd5919061356e565b61200b576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209b919061356e565b6120d1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612155919061356e565b61218b576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612250919061356e565b612286576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461234a576040519150601f19603f3d011682016040523d82523d6000602084013e61234f565b606091505b50509050806111ee576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112678133612945565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612477576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561242d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107a1565b60009150506107a1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612477576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107a1565b61254d6129d2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b61070c612a2d565b6125e5612a2d565b61070c612a94565b6125f5612a2d565b61070c612ae5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061269657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661268a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114da8161238a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612750575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261274d9181019061375a565b60015b612796576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127f2576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161278d565b6111ee8383612aed565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461070c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061218f8383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c7919061375a565b611eb9565b6128d46106b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336125b7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166114da576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161278d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661070c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a9c612a2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612196612a2d565b612af682612b43565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b3b576111ee8282612beb565b6114da612c61565b806001600160a01b03163b600003612b92576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161278d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c0891906139c0565b600060405180830381855af49150503d8060008114612c43576040519150601f19603f3d011682016040523d82523d6000602084013e612c48565b606091505b5091509150612c58858383612c99565b95945050505050565b341561070c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612cae57612ca982612d0e565b61218f565b8151158015612cc557506001600160a01b0384163b155b15612d07576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161278d565b508061218f565b805115612d1e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d6257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461218f57600080fd5b6001600160a01b038116811461126757600080fd5b600060608284031215612db957600080fd5b50919050565b60008060008060808587031215612dd557600080fd5b8435612de081612d92565b9350602085013592506040850135612df781612d92565b9150606085013567ffffffffffffffff811115612e1357600080fd5b612e1f87828801612da7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e6b57600080fd5b813567ffffffffffffffff811115612e8557612e85612e2b565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ef157612ef1612e2b565b604052818152838201602001851015612f0957600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b602083019150836020828501011115612f6857600080fd5b9250929050565b600060a08284031215612db957600080fd5b600080600080600080600060c0888a031215612f9c57600080fd5b873567ffffffffffffffff811115612fb357600080fd5b612fbf8a828b01612e5a565b975050602088013595506040880135612fd781612d92565b9450606088013567ffffffffffffffff811115612ff357600080fd5b612fff8a828b01612f26565b9095509350506080880135915060a088013567ffffffffffffffff81111561302657600080fd5b6130328a828b01612f6f565b91505092959891949750929550565b60008060008060008060a0878903121561305a57600080fd5b863567ffffffffffffffff81111561307157600080fd5b61307d89828a01612e5a565b965050602087013561308e81612d92565b9450604087013567ffffffffffffffff8111156130aa57600080fd5b6130b689828a01612f26565b90955093505060608701359150608087013567ffffffffffffffff8111156130dd57600080fd5b6130e989828a01612f6f565b9150509295509295509295565b60008060008060006080868803121561310e57600080fd5b853567ffffffffffffffff81111561312557600080fd5b61313188828901612da7565b95505060208601359350604086013561314981612d92565b9250606086013567ffffffffffffffff81111561316557600080fd5b61317188828901612f26565b969995985093965092949392505050565b60006020828403121561319457600080fd5b5035919050565b600080604083850312156131ae57600080fd5b8235915060208301356131c081612d92565b809150509250929050565b60008060008060008060a087890312156131e457600080fd5b863567ffffffffffffffff8111156131fb57600080fd5b61320789828a01612e5a565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561323257600080fd5b61323e89828a01612f26565b909450925050608087013567ffffffffffffffff8111156130dd57600080fd5b6000806040838503121561327157600080fd5b823561327c81612d92565b915060208301356131c081612d92565b6000806040838503121561329f57600080fd5b82356132aa81612d92565b9150602083013567ffffffffffffffff8111156132c657600080fd5b6132d285828601612e5a565b9150509250929050565b600080604083850312156132ef57600080fd5b82356132fa81612d92565b9150602083013567ffffffffffffffff81111561331657600080fd5b6132d285828601612da7565b6000806000806080858703121561333857600080fd5b843567ffffffffffffffff81111561334f57600080fd5b61335b87828801612e5a565b94505060208501359250604085013561337381612d92565b9150606085013567ffffffffffffffff81111561338f57600080fd5b612e1f87828801612f6f565b600080600080608085870312156133b157600080fd5b843567ffffffffffffffff8111156133c857600080fd5b6133d487828801612e5a565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561338f57600080fd5b60005b8381101561341a578181015183820152602001613402565b50506000910152565b6000815180845261343b8160208601602086016133ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061218f6020830184613423565b60008060008060008060a0878903121561349957600080fd5b863567ffffffffffffffff8111156134b057600080fd5b6134bc89828a01612da7565b96505060208701356134cd81612d92565b94506040870135935060608701356134e481612d92565b9250608087013567ffffffffffffffff81111561350057600080fd5b61350c89828a01612f26565b979a9699509497509295939492505050565b60008060006060848603121561353357600080fd5b833561353e81612d92565b925060208401359150604084013561355581612d92565b809150509250925092565b801515811461126757600080fd5b60006020828403121561358057600080fd5b815161218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135c057600080fd5b830160208101925035905067ffffffffffffffff8111156135e057600080fd5b803603821315612f6857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561364981612d92565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461367557600080fd5b806040850152505061368a604084018461358b565b606080850152612c586080850182846135ef565b6000602082840312156136b057600080fd5b813561218f81613560565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f057600080fd5b83018035915067ffffffffffffffff82111561370b57600080fd5b602001915036819003821315612f6857600080fd5b808201808211156107a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561376c57600080fd5b5051919050565b6000813561378081612d92565b6001600160a01b03168352602082013561379981613560565b1515602084015260408201356137ae81612d92565b6001600160a01b031660408401526137c9606083018361358b565b60a060608601526137de60a0860182846135ef565b6080948501359590940194909452509092915050565b6101008152600061380961010083018c613423565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a084015261383d8187896135ef565b90508460c084015282810360e08401526138578185613773565b9c9b505050505050505050505050565b6000806040838503121561387a57600080fd5b825161388581612d92565b6020939093015192949293505050565b6080815260006138a86080830188613423565b82810360208401526138bb8187896135ef565b905084604084015282810360608401526138d58185613773565b98975050505050505050565b6080815260006138f1878861358b565b6060608085015261390660e0850182846135ef565b915050602088013561391781612d92565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138d58185876135ef565b6101008152600061396761010083018a613423565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506139b26020820185613773565b9a9950505050505050505050565b600082516139d28184602087016133ff565b919091019291505056fea264697066735822122007dc2fc270cd9173cd51e6e82a40e69a3e4c880140d29f35b36663598c05686864736f6c634300081a0033"; type GatewayZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/SenderZEVM__factory.ts b/v2/types/factories/SenderZEVM__factory.ts index 8a274dfe1..1a74cc903 100644 --- a/v2/types/factories/SenderZEVM__factory.ts +++ b/v2/types/factories/SenderZEVM__factory.ts @@ -120,7 +120,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea264697066735822122037e9f02c9f1066889aa75870351a007a7daaa8277c5c9d435a858ffde2091b1364736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526000602080840182905283850192909252835191820184528082526060830191909152608082018190525491517f048ae42c000000000000000000000000000000000000000000000000000000008152909173ffffffffffffffffffffffffffffffffffffffff169063048ae42c906102d7908b908b908b9088906001908990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a08101835261032180825260008284018190528285019190915283519283018452808352606082019290925260808101829052905491517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260016024820181905293945090929188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220739c9c1e00fa8ae113982bcbaea09686e9af47d7f82902bcf8b8e278cd41157564736f6c634300081a0033"; type SenderZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/SystemContract.sol/SystemContract__factory.ts b/v2/types/factories/SystemContract.sol/SystemContract__factory.ts index 6f835a388..d17929124 100644 --- a/v2/types/factories/SystemContract.sol/SystemContract__factory.ts +++ b/v2/types/factories/SystemContract.sol/SystemContract__factory.ts @@ -439,7 +439,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212206cfc8728f3e6a008fa60110012d328f8d2a859ba07c5fdfb6776051dc27a333964736f6c634300081a0033"; + "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220e022243ea23b9a8b3124c978103fdd8ef6145763525499fed01d4848faff43a264736f6c634300081a0033"; type SystemContractConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts b/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts index 1c2c0b5d6..5c5afe67b 100644 --- a/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts +++ b/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts @@ -342,7 +342,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220e349eeb22d87c24401c0e0a954fb5e1774b175448e0269cf8092b426d6a4912864736f6c634300081a0033"; + "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea26469706673582212202cd1363cf0f0a33af114eb5bdaaf7ba04572b0560a3882c5c6aecd5f02fe50f364736f6c634300081a0033"; type SystemContractMockConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/TestUniversalContract__factory.ts b/v2/types/factories/TestUniversalContract__factory.ts index e19ff3fb7..9995e2775 100644 --- a/v2/types/factories/TestUniversalContract__factory.ts +++ b/v2/types/factories/TestUniversalContract__factory.ts @@ -168,7 +168,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c80635bcfd61614610033578063660b9de01461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610169565b610073565b34801561005f57600080fd5b5061003161006e366004610221565b6100ee565b6060811561008a576100878284018461028d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610383565b6100c560408a0160208b016103ef565b896040013533866040516100de9695949392919061045a565b60405180910390a1505050505050565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c768160405161011d919061051c565b60405180910390a150565b60006060828403121561013a57600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016457600080fd5b919050565b60008060008060006080868803121561018157600080fd5b853567ffffffffffffffff81111561019857600080fd5b6101a488828901610128565b9550506101b360208701610140565b935060408601359250606086013567ffffffffffffffff8111156101d657600080fd5b8601601f810188136101e757600080fd5b803567ffffffffffffffff8111156101fe57600080fd5b88602082840101111561021057600080fd5b959894975092955050506020019190565b60006020828403121561023357600080fd5b813567ffffffffffffffff81111561024a57600080fd5b61025684828501610128565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561029f57600080fd5b813567ffffffffffffffff8111156102b657600080fd5b8201601f810184136102c757600080fd5b803567ffffffffffffffff8111156102e1576102e161025e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561034d5761034d61025e565b60405281815282820160200186101561036557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126103b857600080fd5b83018035915067ffffffffffffffff8211156103d357600080fd5b6020019150368190038213156103e857600080fd5b9250929050565b60006020828403121561040157600080fd5b61040a82610140565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a08152600061046e60a08301888a610411565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156104d8576020818701810151848301820152016104bc565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683010192505050979650505050505050565b6020815273ffffffffffffffffffffffffffffffffffffffff61053e83610140565b1660208201526000602083013567ffffffffffffffff811680821461056257600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261059f57600080fd5b830160208101903567ffffffffffffffff8111156105bc57600080fd5b8036038213156105cb57600080fd5b6060808501526105df608085018284610411565b9594505050505056fea2646970667358221220cb26ed07348041180f6631404fac1759ff8efa800dbae7e9722129211743d1d664736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c80635bcfd61614610033578063660b9de01461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610169565b610073565b34801561005f57600080fd5b5061003161006e366004610221565b6100ee565b6060811561008a576100878284018461028d565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610383565b6100c560408a0160208b016103ef565b896040013533866040516100de9695949392919061045a565b60405180910390a1505050505050565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c768160405161011d919061051c565b60405180910390a150565b60006060828403121561013a57600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016457600080fd5b919050565b60008060008060006080868803121561018157600080fd5b853567ffffffffffffffff81111561019857600080fd5b6101a488828901610128565b9550506101b360208701610140565b935060408601359250606086013567ffffffffffffffff8111156101d657600080fd5b8601601f810188136101e757600080fd5b803567ffffffffffffffff8111156101fe57600080fd5b88602082840101111561021057600080fd5b959894975092955050506020019190565b60006020828403121561023357600080fd5b813567ffffffffffffffff81111561024a57600080fd5b61025684828501610128565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561029f57600080fd5b813567ffffffffffffffff8111156102b657600080fd5b8201601f810184136102c757600080fd5b803567ffffffffffffffff8111156102e1576102e161025e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561034d5761034d61025e565b60405281815282820160200186101561036557600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126103b857600080fd5b83018035915067ffffffffffffffff8211156103d357600080fd5b6020019150368190038213156103e857600080fd5b9250929050565b60006020828403121561040157600080fd5b61040a82610140565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a08152600061046e60a08301888a610411565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156104d8576020818701810151848301820152016104bc565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683010192505050979650505050505050565b6020815273ffffffffffffffffffffffffffffffffffffffff61053e83610140565b1660208201526000602083013567ffffffffffffffff811680821461056257600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261059f57600080fd5b830160208101903567ffffffffffffffff8111156105bc57600080fd5b8036038213156105cb57600080fd5b6060808501526105df608085018284610411565b9594505050505056fea2646970667358221220078ed23f1e4df13b41aee8ed02311eda755ac8a9fe6e1a9a5736af6396fa30f964736f6c634300081a0033"; type TestUniversalContractConstructorParams = | [signer?: Signer] From 6d90fbcee6fa9daae81b1ea9b9d76f8e35881c18 Mon Sep 17 00:00:00 2001 From: skosito Date: Wed, 16 Oct 2024 06:44:36 +0200 Subject: [PATCH 14/16] Revert "build(deps): bump github.com/ethereum/go-ethereum from 1.10.26 to 1.13.15 (#340)" This reverts commit b68feb9d74926c77a012ab826a58e94588b51e40. --- go.mod | 28 ++++-------- go.sum | 131 +++++++++++++++------------------------------------------ 2 files changed, 44 insertions(+), 115 deletions(-) diff --git a/go.mod b/go.mod index 8baa4f6d0..04b81a491 100644 --- a/go.mod +++ b/go.mod @@ -2,34 +2,24 @@ module github.com/zeta-chain/protocol-contracts go 1.19 -require github.com/ethereum/go-ethereum v1.13.15 +require github.com/ethereum/go-ethereum v1.10.26 require ( - github.com/Microsoft/go-winio v0.6.1 // indirect github.com/StackExchange/wmi v1.2.1 // indirect - github.com/bits-and-blooms/bitset v1.10.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect - github.com/consensys/bavard v0.1.13 // indirect - github.com/consensys/gnark-crypto v0.12.1 // indirect - github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect - github.com/deckarep/golang-set/v2 v2.1.0 // indirect + github.com/deckarep/golang-set v1.8.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect - github.com/ethereum/c-kzg-4844 v0.4.0 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/go-ole/go-ole v1.3.0 // indirect + github.com/go-ole/go-ole v1.2.5 // indirect + github.com/go-stack/stack v1.8.1 // indirect github.com/google/uuid v1.3.0 // indirect github.com/gorilla/websocket v1.4.2 // indirect - github.com/holiman/uint256 v1.2.4 // indirect - github.com/mmcloughlin/addchain v0.4.0 // indirect + github.com/holiman/uint256 v1.2.3 // indirect + github.com/rjeczalik/notify v0.9.1 // indirect github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect - github.com/supranational/blst v0.3.11 // indirect + github.com/stretchr/testify v1.8.2 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect golang.org/x/crypto v0.17.0 // indirect - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect - golang.org/x/mod v0.14.0 // indirect - golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.16.0 // indirect - golang.org/x/tools v0.15.0 // indirect - rsc.io/tmplfunc v0.0.3 // indirect + golang.org/x/sys v0.15.0 // indirect + gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect ) diff --git a/go.sum b/go.sum index 785766b26..81b83be05 100644 --- a/go.sum +++ b/go.sum @@ -1,129 +1,68 @@ -github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= -github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88= -github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cockroachdb/errors v1.8.1 h1:A5+txlVZfOqFBDa4mGz2bUWSp0aHElvHX2bKkdbQu+Y= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY= -github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 h1:aPEJyR4rPBvDmeyi+l/FS/VtA00IWvjeFvjen1m1l1A= -github.com/cockroachdb/redact v1.0.8 h1:8QG/764wK+vmEYoOlfobpe12EQcS81ukx/a4hdVMxNw= -github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 h1:IKgmqgMQlVJIZj19CdocBeSfSaiCbEBZGKODaixqtHM= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= -github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= -github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= -github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= -github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= -github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ= -github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= -github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= -github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= -github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= -github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/ethereum/go-ethereum v1.13.15 h1:U7sSGYGo4SPjP6iNIifNoyIAiNjrmQkz6EwQG+/EZWo= -github.com/ethereum/go-ethereum v1.13.15/go.mod h1:TN8ZiHrdJwSe8Cb6x+p0hs5CxhJZPbqB7hHkaUXcmIU= -github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= -github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= +github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= +github.com/ethereum/go-ethereum v1.10.26 h1:i/7d9RBBwiXCEuyduBQzJw/mKmnvzsN14jqBmytw72s= +github.com/ethereum/go-ethereum v1.10.26/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg= +github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= -github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= -github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= -github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= -github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= -github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= -github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= -github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= -github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= -github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= -github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= -github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= +github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= +github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/prometheus/client_golang v1.12.0 h1:C+UIj/QWtmqY13Arb8kwMt5j34/0Z2iKamrJ+ryC0Gg= -github.com/prometheus/client_model v0.2.1-0.20210607210712-147c58e9608a h1:CmF68hwI0XsOQ5UwlBopMi2Ow4Pbg32akc4KIVCOm+Y= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= +github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= +github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= -github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= -github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= -github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= -golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= -golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= -rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From 168fbeeddbe4a6f70b0ac3c14efef5385de120fd Mon Sep 17 00:00:00 2001 From: skosito Date: Mon, 21 Oct 2024 17:08:45 +0200 Subject: [PATCH 15/16] script to deploy GatewayZEVM --- .../deterministic/DeployGatewayZEVM.s.sol | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 v2/scripts/deploy/deterministic/DeployGatewayZEVM.s.sol diff --git a/v2/scripts/deploy/deterministic/DeployGatewayZEVM.s.sol b/v2/scripts/deploy/deterministic/DeployGatewayZEVM.s.sol new file mode 100644 index 000000000..5b329a49a --- /dev/null +++ b/v2/scripts/deploy/deterministic/DeployGatewayZEVM.s.sol @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Script.sol"; +import "contracts/zevm/GatewayZEVM.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +contract DeployGatewayZEVM is Script { + function run() external { + address admin = vm.envAddress("GATEWAY_ADMIN_ADDRESS_ZEVM"); + address zeta = vm.envAddress("ZETA_TOKEN"); + + address expectedImplAddress; + address expectedProxyAddress; + + bytes32 implSalt = keccak256("GatewayZEVM"); + bytes32 proxySalt = keccak256("GatewayZEVMProxy"); + + vm.startBroadcast(); + + expectedImplAddress = vm.computeCreate2Address( + implSalt, + hashInitCode(type(GatewayZEVM).creationCode) + ); + + GatewayZEVM gatewayImpl = new GatewayZEVM{salt: implSalt}(); + require(address(gatewayImpl) != address(0), "gatewayImpl deployment failed"); + + require(expectedImplAddress == address(gatewayImpl), "impl address doesn't match expected address"); + + expectedProxyAddress = vm.computeCreate2Address( + proxySalt, + hashInitCode( + type(ERC1967Proxy).creationCode, + abi.encode( + address(gatewayImpl), + abi.encodeWithSelector(GatewayZEVM.initialize.selector, zeta, admin) + ) + ) + ); + + ERC1967Proxy gatewayProxy = new ERC1967Proxy{salt: proxySalt}( + address(gatewayImpl), + abi.encodeWithSelector(GatewayZEVM.initialize.selector, zeta, admin) + ); + require(address(gatewayProxy) != address(0), "gatewayProxy deployment failed"); + + require(expectedProxyAddress == address(gatewayProxy), "proxy address doesn't match expected address"); + + GatewayZEVM gateway = GatewayZEVM(payable(address(gatewayProxy))); + require(gateway.zetaToken() == zeta, "zeta token not set"); + + vm.stopBroadcast(); + } +} \ No newline at end of file From aef054e72dc168bc0642efb673261c9477c170ae Mon Sep 17 00:00:00 2001 From: skosito Date: Tue, 22 Oct 2024 04:47:40 +0200 Subject: [PATCH 16/16] PR comment --- v2/.env.sample | 2 ++ v2/scripts/deploy/deterministic/DeployGatewayZEVM.s.sol | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/v2/.env.sample b/v2/.env.sample index d34ad24b4..b2b157fdb 100644 --- a/v2/.env.sample +++ b/v2/.env.sample @@ -10,6 +10,8 @@ ZETA_ERC20_EVM=0x42928581Ba60cD97B65D873151dc063F3D0619f8 # zevm GATEWAY_PROXY_ZEVM= SYSTEM_CONTRACT= +GATEWAY_ADMIN_ADDRESS_ZEVM= +WZETA= # update for every zrc20 deployment ZRC20_NAME= diff --git a/v2/scripts/deploy/deterministic/DeployGatewayZEVM.s.sol b/v2/scripts/deploy/deterministic/DeployGatewayZEVM.s.sol index 5b329a49a..f25c0eb80 100644 --- a/v2/scripts/deploy/deterministic/DeployGatewayZEVM.s.sol +++ b/v2/scripts/deploy/deterministic/DeployGatewayZEVM.s.sol @@ -8,7 +8,7 @@ import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy contract DeployGatewayZEVM is Script { function run() external { address admin = vm.envAddress("GATEWAY_ADMIN_ADDRESS_ZEVM"); - address zeta = vm.envAddress("ZETA_TOKEN"); + address zeta = vm.envAddress("WZETA"); address expectedImplAddress; address expectedProxyAddress;